一、PTA實驗作業
題目1:6-4 結構體數組按總分排序
1. 本題PTA提交列表
2. 設計思路
* void calc(struct student *p,int n) //傳結構體地址和數組的長度,功能是求和
* 定義變量i用於循環
* for i=0至n-1
p[i].sum =p[i].score[0]+p[i].score[1]+p[i].score[2] //求和
end
* void sort(struct student *p,int n) //功能是將成績總和從高到低對這組數據進行排序
* struct student x
* 定義變量 i,j,temp,t;//ij用於循環
* emp等於(p+i)->sum; //給temp賦值
* for j從i+1;j至n-1; //選擇排序法
if((p+j)->sum大於temp){
temp等於(p+j)->sum;
t=j;
end
* *(p+i)賦值給x
*(p+t)賦值給*(p+i)
x賦值給*(p+t)
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
- 這道題沒有問題,一開始用上面的將結構體交換,后來復習了老師的ppt,發現交換結構體只要中間有一個過渡的結構體就可以了,
汗顏,知識存在缺漏。
題目2:7-2 時間換算
2. 設計思路
* struct time //設置時間的信息
{
int hour,minute,second;
int n;
};//該結構體表示時間,和增加的時間
* 定義變量ij用於循環,sum用於總秒,數組a[4]用於存放增加后的時分秒
還有struct time times
* 輸入時分秒,還有n
* sum=times.n+times.hour*3600+times.minute*60+times.second; //總秒
* do{
x[++i]等於sum%60; //求時分秒
sum等於sum/60;
}直到sum對於0
* for i從2開始直到為0
如果i對於2
那么a[i]>24 ,則a[i]/=24
如果a[i]x小於10,則在%d前加上0
否則直接輸出按%d輸出
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
- 這道題沒有問題
題目3:7-6 通訊錄的錄入與顯示
1. 本題PTA提交列表
2. 設計思路
* struct information{
char name[11];
char born[11];
char sex[2];
char number1[19];
char number2[19];
};//朋友的姓名、出生日期、性別、固定電話號碼、移動電話號碼
* 定義變量ij用於循環,n,k,t
* 輸出n,定義數組結構體a[n]
* for i從0開始至n-1
scanf("%s%s%s%s%s",a[i].name,a[i].born,a[i].sex,a[i].number1,a[i].number2); //輸值
* 輸出k
* 定義數組b[k]
* for i從0開始至k-1
輸入b[k]
end
* for i從0至k-1
* 如果b[k]大於等於0且小於等於n-1
t等於b[k]
printf("%s %s %s %s %s\n",a[t].name,a[t].number1,a[t].number2,a[t].sex,a[t].born); //輸出
* 否則輸出 Not Found
end
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
- 其實這道題剛開始我的思路中出生日期沒有用字符型,后來做到一半發現寫不下去了,才轉換思路全部用字符型來做。
這個是由於數組sex只定義一個造成的,沒有調試,調試不下去。
這個問題是我一開始定義的字符數組太小造成的。
二、截圖本周題目集的PTA最后排名。
三、閱讀代碼
5-5 時間換算
- 以hh:mm:ss的格式輸出某給定時間再過n秒后的時間值(超過23:59:59就從0點開始計時)。
- 輸入格式:輸入在第一行中以hh:mm:ss的格式給出起始時間,第二行給出整秒數n(<60)。
- 輸出格式:輸出在一行中給出hh:mm:ss格式的結果時間。
- 這個代碼跟我的思路差不多,都是對時間進行時分秒存儲到數組中,然后用一個函數返回。
7-6 通訊錄的錄入與顯示
- 通訊錄中的一條記錄包含下述基本信息:朋友的姓名、出生日期、性別、固定電話號碼、移動電話號碼。 本題要求編寫程序,錄入N條記錄,並且根據要求顯示任意某條記錄。
- 輸入格式:輸入在第一行給出正整數N(≤10);隨后N行,每行按照格式姓名 生日 性別 固話 手機給出一條記錄。其中姓名是不超過10個字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式給出年月日;性別用M表示“男”、F表示“女”;固話和手機均為不超過15 位的連續數字,前面有可能出現+。
- 在通訊錄記錄輸入完成后,最后一行給出正整數K,並且隨后給出K個整數,表示要查詢的記錄編號(從0到N−1順序編號)。數字間以空格分隔。
輸出格式:對每一條要查詢的記錄編號,在一行中按照姓名 固話 手機 性別 生日的格式輸出該記錄。若要查詢的記錄不存在,則輸出Not Found。
- 這篇代碼我選擇它是因為我在前面提到過我曾經用定義日期用int,做不出來,這個代碼關於輸出日期采用%04d/%02d/%02d,讓我對%md理解了更深。
四、本周學習總結
1.總結本周學習內容。
結構體、共用體、枚舉這種構造數據類型特點。
- 結構體可以有結構體類型、共用體的類型的數據。結構體每一位成員都用來表示一種具體事務的屬性,可以賦初值。
- 共用體是一種多變量共享存儲空間的構造類型,它允許幾種不同的變量共用同一存儲空間。(同一存儲空間可以存儲不同類型的數據)。
它不可以賦初值,空間等於最大成員占據的空間。 - 枚舉類型是指變量的值可以全部列出,定義一個枚舉變量后,變量的值確定在定義之中。
它和結構體、共用體的區別在於,枚舉元素是常量,只能在定義階段賦值。
遞歸函數原理
- 百度一下資料,可能不是很全面,所謂遞歸函數,就是不斷調用自身。每次執行遞歸調用之前,
把遞歸函數的值參和局部變量的當前值以及調用后的返回地址壓棧。有一個邊界條件,他就不調用了
然后想彈簧一樣把儲存的值釋放出去 。
2.羅列本周一些錯題
這道題原本答案是15,后來想調試看看函數怎么走,去在dev上運行,發現不可以,就選擇均錯誤。