題目:一個班有4名學生,5門課程,分別寫三個函數實現以下功能 1.求第一門課程的平均分 2.找出兩門以上不及格學生,輸出其學號,全部成績及平均成績 3.找出平均成績在90分以上,及全部成績在85分以上的學生 思路:這題就是對返回指針值的函數知識點的鞏固。唯一需要註意的是,我們要在函數中處理二維數組時 ...
題目:一個班有4名學生,5門課程,分別寫三個函數實現以下功能
1.求第一門課程的平均分
2.找出兩門以上不及格學生,輸出其學號,全部成績及平均成績
3.找出平均成績在90分以上,及全部成績在85分以上的學生
思路:這題就是對返回指針值的函數知識點的鞏固。唯一需要註意的是,我們要在函數中處理二維數組時,實參是二維數組名,形參是指向一維數組的指針變數,具體看代碼
1 #include<stdio.h> 2 int main(){ 3 void avg1(int (*p)[5]); 4 void fail2(int (*p)[5]); 5 void dalao(int (*p)[5]); 6 int a[4][5]; 7 8 for(int i=0;i<4;i++){ 9 printf("請輸入第 %d 個學生成績:\n",i+1); 10 for(int j=0;j<5;j++){ 11 scanf("%d",&a[i][j]); 12 } 13 } 14 avg1(a); 15 printf("\n"); 16 fail2(a); 17 printf("\n"); 18 dalao(a); 19 } 20 //求第一門課的平均成績 21 void avg1(int (*p)[5]){ 22 int sum=0; 23 for(int i=0;i<4;i++){ 24 sum=sum+*(*(p+i)+0); 25 } 26 printf("第一門課的平均成績為 %.2f 分\n",(float)sum/4); 27 } 28 //找出掛兩門學生,並輸出他們的全部成績和平均成績 29 void fail2(int (*p)[5]){ 30 int f; 31 int sum; 32 for(int i=0;i<4;i++){ 33 f=0;sum=0; 34 for(int j=0;j<5;j++){ 35 if(*(*(p+i)+j)<60) f++; 36 sum=sum+*(*(p+i)+j); 37 } 38 if(f>2){ 39 printf("第 %d 個學生有兩門以上不及格,他的成績如下:\n",i+1); 40 for(int k=0;k<5;k++) 41 printf("%d ",*(*(p+i)+k)); 42 printf(" 平均成績為 %.2f",(float)sum/5); 43 } 44 printf("\n"); 45 } 46 } 47 //找出平均成績在90分以上及全部成績在 85分之上的優秀學生 48 void dalao(int (*p)[5]){ 49 int flag[4]={0,0,0,0}; 50 int sum,g,c=0; 51 for(int i=0;i<4;i++){ 52 sum=0;g=0; 53 for(int j=0;j<5;j++){ 54 sum=sum+*(*(p+i)+j); 55 if(*(*(p+i)+j)>85) g++; 56 } 57 if(g==5) flag[i]=1; 58 if((sum/5)>90) flag[i]=1; 59 } 60 for(int k=0;k<4;k++){ 61 if(flag[k]==1) printf("第 %d 位學生符合標準",k+1); 62 else if(flag[k]==0) c++; 63 } 64 if(c==4) printf("無人符合標準"); 65 }
運行結果: