結構體
一、PTA實驗作業
題目1:7-2 通訊錄排序
1. 本題PTA提交列表
2. 設計思路
將每個人的信息先錄入到結構體數組中,再將每個人的年齡拿出來比較,可選用選擇排序法將朋友信息重新排序,最后實現按照年齡從大到小輸出朋友的信息。
3.本題調試過程碰到問題及PTA提交列表情況說明
錯誤原因:選擇排序法使用錯誤,正確的做法應該是先找出出生日期最小值(即年齡最大)所在的數組下標,再調換位置,而不是直接將數組替換過去。
4.代碼截圖
題目2:7-3 找出總分最高的學生
1. 本題PTA提交列表
2. 設計思路
運用結構體先輸入第一個學生的成績,計算他的總分並將這個學生記做成績最高的學生max。接着依次輸入n-1個學生成績,逐個計算總分並與max所在的學生總分相比,若高於max,將這個學生記做max,直到判斷完成,輸出max所在學生信息。
3.本題調試過程碰到問題及PTA提交列表情況說明
錯誤原因:給num數組分配的元素個數太少,把第3行中的5改成10即可調試成功。
4.代碼截圖
題目3:7-4 通訊錄的錄入與顯示
1. 本題PTA提交列表
2. 設計思路
用結構數組輸入朋友的信息。再輸入要查找的記錄編號在數組中查找,若沒有找到,輸出 Not Found ;若找到,輸出對應朋友信息。
3.本題調試過程碰到問題及PTA提交列表情況說明
錯誤原因:第15行條件欠缺,該條件成立的判斷是輸入的y值不僅要滿足y>=n還需滿足y<0
調試:將15行改成 if(y>=n||y<0) .
4.代碼截圖
二、同學代碼結對互評
7-5 復數四則運算
1.互評同學名字
羅藝芳
2.我的代碼,同學的代碼截圖
羅藝芳的代碼:
我的代碼:
3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。
(1).羅藝芳的代碼是將復數四則運算計算完成后按順序一個一個輸出,我是把四則運算符號用數組表示,再用循環計算,依次輸出。
(2).主要的差別是輸出方式不同,還有羅藝芳的代碼有用到結構體,我沒有用到。
(3).我更喜歡我的代碼,更加簡潔明了。
三、截圖本周題目集的PTA最后排名。
四、本周學習總結
1.你學會了什么?
(1).用結構struct定義可以把一些數據分量聚合成一個整體的數據類型。
(2).結構變量可以通過結構成員操作符“.”對其某個成員進行引用,結構類型變量的存儲布局按其類型定義中成員的先后順序排列。
(3).一個結構類型變量所占的內存空間是其各個成員所占內存空間之和。
(4) .(*p).num中的的括號是必不可少的,因為成員運算符“.”的優先級高於“*”的優先級。
2.本周的內容,你還不會什么?
漢諾塔問題還是不太理解。
鏈表
一、PTA實驗作業
題目1:7-10 單向鏈表1
1. 本題PTA提交列表
2. 設計思路
首先創建鏈表輸入一組數,再從頭指針head開始判斷是否為奇數值,若是,head=head->next,直到找到一個非奇數值將其定義為頭結點,然后依次判斷后面的數是否為奇數值,若是則刪除,最后將刪除后的鏈表輸出。
3.本題調試過程碰到問題及PTA提交列表情況說明
出錯原因:沒有注意輸出格式,題目要求最后一個數字后不能有空格,可是我的這種做法末尾有空格。
調試:改正輸出那個位置的代碼,先輸出第一個數字,后面的數字用“空格+數字”的格式輸出。
4.代碼截圖
題目2:7-12 單向鏈表4
1. 本題PTA提交列表
2. 設計思路
將輸入的第一個非-1的數定義為頭結點,后面依次輸入數字(!=-1),創建鏈表,將每次輸進的數存入原先動態分配給它的一個結構體指針*p,令p->next=head,head=p.這樣可以將輸進的數逆序存進鏈表,最后將鏈表中的數輸出就得到逆序數。
3.本題調試過程碰到問題及PTA提交列表情況說明
4.代碼截圖
題目3:7-13 單向鏈表5
1. 本題PTA提交列表
2. 設計思路
輸入一組學生信息存進鏈表,再輸入一個成績g,從鏈表的頭結點開始依次往后判斷,若p->grade)<g,則把鏈表中的這個節點刪去,最后將鏈表中所剩的學生信息輸出。
3.本題調試過程碰到問題及PTA提交列表情況說明
出錯原因:在這個代碼中我犯了個非常微小的完全不應該犯的錯誤,第34、35行對p->num、p->name賦了值,可是忘記了對p->grade賦值,導致輸出亂碼。
調試:補上“p->grade=grade;”這一語句。
4.代碼截圖
二、同學代碼結對互評
7-12 單向鏈表4
1.互評同學名字
雷慧
2.我的代碼,同學的代碼截圖
雷慧的代碼:
我的代碼:
3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。
(1).雷慧的代碼是將鏈表頭結點定義為空,我所創建的鏈表頭結點非空。
(2).用雷慧的做法可以固定頭結點的位置,我的做法需要通過不斷判斷找出頭結點。
(3).我更喜歡雷慧的代碼,省去判斷頭結點的步驟,更有條理性。
三、截圖本周題目集的PTA最后排名。
四、本周學習總結
1.你學會了什么?
(1).必要時可以用鏈表代替數組進行數據的存儲和操作。這樣有兩個主要優勢:一是不需要事先定義存儲空間的大小,可以實時動態分配,內存使用效率高;二是可以很方便地插入新元素,操作效率高。
(2).sizeof可以判斷所定義變量占據的內存空間。
(3).學會了操作鏈表的增刪改查等。
2.本周的內容,你還不會什么?
對於鏈表中指針位置的替換還不太熟練。
3.鏈表考試總結
一開始做鏈表相關的題目時錯誤點非常多,后來改善了些,需要更加注意自己常犯的錯誤並及時改正。