1. 程式人生 > >計算機二級-C語言-程式填空題-190112記錄-結構體的遍歷和結構體的資料的交換處理,檔案的操作。

計算機二級-C語言-程式填空題-190112記錄-結構體的遍歷和結構體的資料的交換處理,檔案的操作。

//程式設計題:學生的記錄由學號和成績組成,N名學生的資料已在主函式中放入結構體陣列s中,請編寫函式fun,它的功能是:把分數低的學生資料放在b所指的陣列中,注意:分數最低的學生可能不止一個,函式返回分數最低的學生人數。

//重難點:結構體的定義。結構體的使用。檔案指標的定義。對檔案的操作。輸出格式‘%4d’。兩種方法獲取最小值。

 1 #include <stdio.h>
 2 #define   N   16
 3 typedef  struct//定義一個新結構體型別
 4 {  char  num[10];
 5    int   s;
 6 } STREC;//新型別名稱
 7 int
fun( STREC *a, STREC *b )//形參這裡可以有三種定義方式,指標,陣列,陣列加下標 8 { 9 //第一種方法:先把第一個數定義為最小的,然後遍歷,如果遇見更小的就重新賦值。 10 int i, j; 11 j = 0; 12 int min = a[0].s; 13 for (i = 1; i < N; i++) 14 { 15 if (min > a[i].s) 16 { 17 min = a[i].s; 18 } 19 } 20 for
(i = 0; i < N; i++) 21 { 22 if (a[i].s == min) 23 { 24 b[j]= a[i]; 25 j++; 26 } 27 } 28 return j;//這裡不是j+1,因為上面多了一次j++。 29 /* //第二種方法:先把a陣列進行由小到大的排序,然後再遍歷一遍,和第一個相等的,都輸出出來。 30 int i, j, t; 31 STREC m; 32 t = 1; 33 for (i = 0; i < N; i++)
34 { 35 for (j = i; j < N; j++) 36 { 37 if (a[i].s > a[j].s) 38 { 39 m = a[i]; 40 a[i] = a[j]; 41 a[j]= m; 42 } 43 } 44 } 45 b[0]= a[0];//靈活變通,如果分開不能賦值的話,就把整體直接交換定義。 46 for (i = 1; i < N; i++) 47 { 48 if (b[0].s == a[i].s) 49 { 50 b[i]= a[i]; 51 t = t + 1; 52 } 53 } 54 return t;*/ 55 } 56 main() 57 { 58 //定義結構體陣列。 59 STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85}, 60 {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}, 61 {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, 62 {"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}}; 63 STREC h[N]; 64 int i,n;FILE *out ; 65 n=fun( s,h );//以地址方式傳遞 66 printf("The %d lowest score :\n",n); 67 for(i=0;i<n; i++) 68 printf("%s %4d\n",h[i].num,h[i].s);//注意這裡是4d,所以如果是兩位數,會出現兩個空格。 69 printf("\n"); 70 out = fopen("out.dat","w") ; 71 fprintf(out, "%d\n",n); 72 for(i=0;i<n; i++) 73 fprintf(out, "%4d\n",h[i].s);//可以修改out檔案,考試的時候 74 fclose(out); 75 }