不是很難,但是有點繁瑣的一道題。注意要把用於計數的變量 count 放到合適的位置。
10.15有一個班4個學生,5門課。(1)求第一門課的平均分;(2)找出有兩門以上課程不及格的學生,輸出他們的學號和全部課程成績及平均成績;(3)找出平均成績在90分以上或全部課程成績在85分以上的學生。分別編3個函數實現上3個要求。
#include <stdio.h> int main(){ void avcour1(char (* pcourse)[10], float (* pscore)[5]); void avsco(float (*pscore)[5],float * paver); void fail2(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver); void good(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver); char course[5][10]={"English","Computer","Math","Physics","Chemistry"}; char (* pcourse)[10]; int i, j,* pnum; int num[4]={1001,1002,1003,1004}; float score[4][5]={{34,56,88,99,89}, {77,88,99,67,78}, {99,90,87,86,89}, {78,89,99,56,77}}; float (* pscore)[5],* paver; float aver[4]; pnum=num; //一維數組,存放學生編號 pscore=score; //二維數組,存放學生的成績 pcourse=course; //一維數組,存放課程名稱 paver=aver; //一維數組,存放每名學生平均成績 //將學生編號和成績打印 printf("NO. "); for(i=0; i<5; i++){ printf(",%s ",course[i]); } printf("\n"); //打印學生編號和成績 for(i=0; i<4; i++){ printf("%-8d",num[i]); for(j=0; j<5; j++){ printf("%4.2f ",score[i][j]); } printf("\n"); } //每名學生所有課程的平均成績 avsco(pscore, paver); //1.求所有學生第一門課程的平均成績 avcour1(pcourse, pscore); //2.找出兩門以上課程不及格的學生,輸出學號,成績,平均成績 fail2(pcourse, pnum, pscore, paver); //3.找出平均成績在90分以上或全部課程成績在85分以上的學生,輸出學號,成績,平均成績 good(pcourse, pnum, pscore, paver); return 0; } void avsco(float (*pscore)[5],float * paver){ int i,j; float sum,avg; for(i=0; i<4; i++){ sum=0; for(j=0; j<5; j++){ sum += *(*(pscore+i)+j); } avg = sum/5;//第i個學生的平均成績 *(paver+i)=avg; } for(i=0; i<4; i++){ printf("第%d個學生的平均成績為%4.2f \n",i+1,*(paver+i)); } } //1. void avcour1(char (* pcourse)[10], float (* pscore)[5]){ int i; float sum=0,avg1; for(i=0; i<4; i++){ sum += *(*(pscore+i)); } avg1 = (float)sum/4; printf("第一門課%s的平均成績為:%4.2f\n",* pcourse,avg1); } //2.找出兩門以上課程不及格的學生,輸出學號,成績,平均成績 void fail2(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver){ int i,j,count; printf("\n下面的學生有兩門及以上的課程不及格.\n"); //將學生編號和成績打印 printf("NO. "); for(i=0; i<5; i++){ printf(",%s ",*(pcourse+i)); } printf("average"); printf("\n"); for(i=0; i<4; i++){ count=0; for(j=0; j<5; j++){ if(*(*(pscore+i)+j) < 60 ) count++; } if(count>=2){ printf("%-8d",*(pnum+i)); for(j=0; j<5; j++){ printf("%4.2f ",*(*(pscore+i)+j)); } printf("%4.2f ",*(paver+i)); printf("\n"); } } } //3.找出平均成績在90分以上或全部課程成績在85分以上的學生,輸出學號,成績,平均成績 void good(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver){ int i,j,count; printf("\n下面的學生平均成績在90分以上或全部課程成績在85分以上.\n"); //將學生編號和課程打印 printf("NO. "); for(i=0; i<5; i++){ printf(",%s ",*(pcourse+i)); } printf("average"); printf("\n"); for(i=0; i<4; i++){ count=0; for(j=0; j<5; j++){ if(*(*(pscore+i)+j) > 85) count++; } if(count==5 || *(paver+i)>90){ printf("%-8d",*(pnum+i)); for(j=0; j<5; j++){ printf("%4.2f ",*(*(pscore+i)+j)); } printf("%4.2f ",*(paver+i)); printf("\n"); } } }
結果: