二维数组做参数

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必须用括号括起来

posted @ 2017-12-21 17:39  Rohlf  阅读(2366)  评论(0编辑  收藏  举报