請以思惟導圖總結本週的學習內容,以下圖所示:
描述本週學習感覺,也能夠在這裏提出你不理解地方,對教師教學建議等。
感受指針真的像指針同樣,好繞,讓我不能理解,甚至很懵,課後從新看了書,看視頻後,理解了一點點,可對於題目,這遠遠不夠啊!深入的記得星期五晚上,一直在作一個題目,仍是作不出來(真的好絕望),問了其餘同窗也沒有解決,次日早上起來,想到了它尚未作完,就看看,仍是不能解決,因而我想到了百度!結果按百度上的作法也是錯的!真的好無奈!
在excel中畫以下表格,保存好,複製到博客隨筆。注意要累計全部代碼量。
貼圖展現。
填寫本次題目集的總得分。 <span style ="color:red">注意,請把PTA代碼展現給批閱助教,並能完整回答助教問題,才能得滿分。不然根據回答狀況給分。</span>
從PTA中選1題你最滿意的題目,題目選難度越大,分值越高:
簡要介紹題目,如:
7-2 說反話-增強版 (20 分) 給定一句英語,要求你編寫程序,將句中全部單詞的順序顛倒輸出。 輸入格式: 測試輸入包含一個測試用例,在一行內給出總長度不超過500 000的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用若干個空格分開。 輸出格式: 每一個測試用例的輸出佔一行,輸出倒序後的句子,而且保證單詞間只有1個空格。 輸入樣例: Hello World Here I Come 輸出樣例: Come I Here World Hello
以僞代碼方式描述算法思路。僞代碼注意文字+C語法方式描述,不要純C代碼或者C代碼直接翻譯,能作到看了僞代碼就知道你的思路是如何。
char t[MAX]; //定義一個字符數組 while ((s=getchar()) != '\n') //getchar每次讀入一個字符 { if (s != ' ') { flag = 1; //表示輸入的不是空格 } else if (count > 0) { continue; //知足則跳過下一條語句 } else if (flag) { t[i++] = s; //只有以前遇到單詞的狀況下碰到空格才把這個空格寫入目標字符串 } for (i-=1; i>=0; i--) //i-=1.i=i-1,最後一個標號爲i裏面是不存東西的 { if (t[i] != ' ') { count ++; // 用 count 統計單詞中字母的個數 } else if (t[i]==' ' && count > 0) { for (j=i+1; j<=i+count; j++) { printf("%c", t[j]); //遇到空格就輸出單詞 } printf(" "); count = 0; } } // 還剩最後一個單詞沒輸出,由於最後一個單詞可能前方無空格 ,只完成了count++,可是沒有遇到 空格,那麼邏輯是同樣的 for (j=i+1; j<=i+count; j++) { printf("%c", t[j]); // 倒序輸出字符。 }
貼圖展現代碼,不要複製,如
根據提交列表,簡要描述下調試程序碰到的問題及解決辦法。
Q1:出現編譯錯誤和格式錯誤。 A1:定義的數組的長度過小了!編譯過不去。 Q2:最後一個測試點過不了,運行時錯誤。 A2:找同窗的代碼來看,比較代碼的不一樣。
在函數那章,咱們已經實現小學四則運算這份做業,如今要求你們把以前設計函數升級改造,原來的函數你們都是用全局變量實現不一樣函數參數傳遞,此次做業要求改地址傳遞,減小全局變量的使用。
題目有3個難度級別,分別爲: 第一級是1位數的一步加減乘除計算 第二級是2位數的2步加減運算 第三級是3位數的2步加減運算
3.表達式運算算法
主要上述三個函數的改造說明
把隨機數存放到一維數組裏面
產生隨機運算符,把運算符存放到字符數組ch[2]裏面,求出式子結果;
Num(class); op(class,Num); //調用兩個函數生成式子; if(grade==1) { srand(time(NULL)); k=rand()%4; switch(k) { case 0~3: ch[0]=' '; result=q[0]+q[1]; break; } } else { srand(time(NULL)); k=rand()%4; switch(k) { case 0~3: ch[0]=' '; ch[1]=' '; result=q[0]+q[1]+q[2]; break; } } return result; //返回結果;
改造前: 不一樣點:代碼直接生成隨機數就放在哪兒了,沒有返回給主函數。 優勢:代碼簡潔易懂。 缺點:代碼的步驟基本同樣,有點浪費代碼行,代碼量相對較少。 改造後: 不一樣點:用指針把玩家的等級傳進來,把隨機數存放到一個數組裏面。 優勢:不用使用全局變量來進行計算。 缺點:在這個函數須要多定義幾個變量,和定義一個一維數組。
改造前: 不一樣: 產生隨機運算符和題目都放在一塊兒。 優勢:都放在一個函數裏, 總體感很強。 缺點:代碼攏堆在一塊兒,讓讀者不太好閱讀。 改造後: 不一樣:把結果,運算符和式子分開; 優勢:看起來更清晰。 缺點:分散在兩個函數裏,使讀者跳躍性的閱讀,函數調用太繁瑣。
改造前: 不一樣:和隨機數和運算符放在同一個函數裏。 優勢:不用調用其它函數就能夠完成。 缺點:一個函數裏的代碼行太長,很差閱讀,會讓讀者產生厭惡感,不想讀下去。 改造後: 不一樣:單獨放在一個函數裏面,隨機數和運算符經過傳參進來,隨機數放到一個一維數組裏。 優勢:隨機數放到數組再用指針傳進來使用,大大提升效率和減小了相同步驟的屢次運行,也減小了代碼量。 缺點:用指針容易出錯。
回顧兩次做業編寫過程,總結碰到問題及後續程序編寫注意事項。
在編程過程當中會碰到,在函數調用傳參的時候會有問題,會出現「expected primary-expression before 'int'的錯誤,我不知道這是什麼錯誤,注意:在編程量大的時候要注意花括號對齊,否則容易缺乏。函數調用以前必定要聲明。在使用變量以前要定義,防止後面忘記了。必定要理清傳參的關係。