4:18pm ccbsd3:tstStruct/> gcc samp2.c 4:18pm ccbsd3:tstStruct/> ./a.out 學 號 姓 名 身高 9817001 錢阿三 149.69 9817002 李阿水 155.63 9817003 孫三8 172.05 9817004 錢阿三 169.10 9817005 趙阿三 157.31 === === 學 號 姓 名 身高 名次 9817001 錢阿三 149.69 0 9817002 李阿水 155.63 0 9817003 孫三8 172.05 0 9817004 錢阿三 169.10 0 9817005 趙阿三 157.31 0 4:18pm ccbsd3:tstStruct/> cat -n samp2.c 1 //samp2.c -- by tsaiwn@csie.nctu.edu.tw 2 #include<stdio.h> 3 #include<stdlib.h> 4 typedef struct { 5 long id; 6 char name[9]; 7 float height; 8 double score; 9 int rank; // 名次 10 } Student; 11 Student x[999]; 12 double nRand(double avg, double std, double min, double max); 13 int getData( ); 14 void printData(int n, int flag); 15 void sort( ) { } 16 int main( ) { 17 int nStu; 18 nStu = getData( ); 19 printData(nStu, 0); 20 printf("=== ===\n"); 21 sort( ); 22 printData(nStu, 1); 23 return 0; 24 } 25 int getData( ){ 26 static char cn[ ][3]={ "趙", "錢", "孫", "李", "陳", "林"}; 27 static char first[ ][5]= { 28 "阿三", "小弟", "三8", "4久", "小五", "阿水", "大華" }; 29 int cnLen = (sizeof(cn) / sizeof(cn[0]) ); 30 int firstLen =(sizeof(first) / sizeof(first[0]) ); 31 int i, k, n; 32 long baseID = 9817000; 33 k = 5; // example 34 for(i=1; i<= k; ++i) { // 第 0 個故意不用 35 x[i].id = baseID + i; 36 n = rand( ) % cnLen; 37 strcpy(x[i].name, cn[n]); 38 n = rand( ) % firstLen; 39 strcat(x[i].name, first[n]); 40 x[i].height = nRand(168, 8, 135, 198); // [135, 198] 41 } 42 return k; 43 } 44 void printData(int n, int flag){ 45 //印出 n 個人的 data, x[1] .. x[n]; 注意第 0 個故意不用 46 // flag == 0 表示不印名次 47 int i; 48 printf("學 號 姓 名 身高"); 49 if(flag!=0) printf(" 名次"); 50 printf("\n"); 51 for(i=1; i<=n; ++i) { 52 printf("%ld ", x[i].id); 53 printf("%-9s ", x[i].name); 54 printf("%7.2f ", x[i].height); //身高 55 if(flag!=0) printf(" %3d", x[i].rank); 56 printf("\n"); 57 } 58 } 59 double nRand(double avg, double std, double min, double max){ 60 // Normal distribution N(avg, std*std) 61 int i; 62 double ans; 63 ans=0.0; 64 for(i=1; i<=12; ++i) { 65 ans += (rand( )%32768L)/32768.0; 66 } 67 ans -= 6.0; 68 ans = avg + ans*std; 69 // 調整到規定的 range, 即 [min, max] 70 if(ans<min) ans = min; 71 if(ans>max) ans = max; 72 return ans; 73 } 4:18pm ccbsd3:tstStruct/>