二維數組做參數


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必須用括號括起來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM