10個學生5門課成績,分別用三個函數實現三個內容:①計算每個學生的平均分②計算每門課的平均分③找出50個分數中最高分的學生並打印那一行
一個10×6的數組。第一列存學號:代碼如下
1 #include<stdio.h> 2 int main() 3 { 4 int a[10][6]; 5 for(int i=0;i<10;i++) 6 for(int j=0;j<6;j++) 7 scanf("%d",&a[i][j]); 8 void aver_stu(int (*p)[6],int n); 9 void aver_cla(int (*p)[6]); 10 void search(int (*p)[6],int n); 11 aver_stu(a,10); 12 aver_cla(a); 13 search(a,10); 14 return 0; 15 } 16 17 void aver_stu(int (*p)[6],int n) 18 {double aver[10]; 19 for(int i=0;i<n;i++) 20 {int sum=0; 21 for(int j=1;j<6;j++) 22 { 23 sum+=p[i][j]; 24 } 25 aver[i]=sum/5.0; 26 } 27 for(int k=0;k<10;k++) 28 printf("%5.2lf",aver[k]); 29 } 30 31 void aver_cla(int (*p)[6]) 32 {double aver[5]; 33 for(int i=1;i<6;i++) 34 { int sum=0; 35 for(int j=0;j<10;j++) 36 { 37 sum+=p[j][i]; 38 } 39 aver[i-1]=sum/10.0; 40 } 41 for(int k=0;k<5;k++) 42 { 43 printf("%5.2lf",aver[k]); 44 } 45 } 46 47 void search(int (*p)[6],int n) 48 { 49 int max=0;int m,l; 50 for(int i=0;i<n;i++) 51 for(int j=1;j<6;j++) 52 { 53 if(max<p[i][j]) 54 {max=p[i][j];m=i;l=i;} 55 } 56 for(int q=0;q<6;q++) 57 {printf("%d",p[m][q]); 58 } 59 }
規定:如果將二維數組作為參數傳遞給函數,那么在函數的參數聲明中必須指明數組的列數,數組的行數沒有太大關系,可以指定也可以不指定。因為函數調用時傳遞的是一個指針,它指向由行向量夠成的一維數組。因此二維數組作為函數參數正確寫法如下所示:
void Func(int array[3][10]);
void Func(int array[ ][10]);
因為數組的行數無關緊要,所以還可以寫成如下形式:
void Func(int (*array)[10]); 注意*array需要用括號括起來。
這種形式的聲明參數是一個指針,它指向具有10個元素的一維數組。因為[]的優先級比*的優先級高,故*array必須用括號括起來