二维数组做参数
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必须用括号括起来