C語言博客作業--結構體


一、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上運行,發現不可以,就選擇均錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM