不是很难,但是有点繁琐的一道题。注意要把用于计数的变量 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"); } } }
结果: