//4个学生,5门课程//①函数1:求第一门课程的平均分//②函数2:找出有2以上课程不及格的学生,输出其学号和全部成绩//③函数3:平均成绩在90分以上或全部课程成绩在85分以上的学生(输出学号即可)#include<stdio.h>floatfunc1(float(*p)[5],int n)//n表示行数{float aver =0, sum =0;for(int i =0; i < n; i++){
sum = sum +*(*(p+i)+0);}
aver = sum / n;return aver;}voidfunc2(float(*p)[5],int n){int flag[4]={0};//记录每个学生低于60分的课程的个数for(int i =0; i < n; i++){for(int j =0; j <5; j++){if(*(*(p + i)+ j)<60){
flag[i]++;}}}for(int i =0; i <4; i++){if(flag[i]>1){printf("No.%d\t", i +1);//学号for(int j =0; j <5; j++){printf("%.2f\t",*(*(p + i)+ j));}printf("\n");}elsebreak;}}voidfunc3(float(*p)[5],int n){int flag1[4]={0}, flag2[4]={1}, sum[4]={0}, aver[4]={0};//计算每个学生的平均分并在flag1中记录for(int i =0; i < n; i++){for(int j =0; j <5; j++){
sum[i]+=*(*(p + i)+ j);}
aver[i]= sum[i]/5;if(aver[i]>=90)
flag1[i]=1;}//检查每个学生每门课程的成绩,若有低于85的,则将flag2赋值为0;for(int i =0; i < n; i++){for(int j =0; j <5; j++){if(*(*(p + i)+ j)<85)
flag2[i]=0;break;}}//输出flag1==1||flag2==1for(int i =0; i < n; i++){if(flag1[i]==1|| flag2[i]==1){printf("No.%d\t", i +1);//学号printf("\n");}}}intmain(){float score[4][5]={{34,56,28,92,98},{96,87,89,86,91},{96,105,87,200,98},{97,97,96,97,90}};float(*ps)[5]= score;//按一定的格式将课程分数和学号原样输出for(int i =0; i <6; i++){if(i ==0){printf("Num\t");}elseprintf("C.No.%d\t", i);}printf("\n");for(int i =0; i <4; i++){printf("No.%d\t", i +1);//学号for(int j =0; j <5; j++){printf("%.2f\t",*(*(ps + i)+ j));}printf("\n");}printf("\n");//调用函数1求第一门课程的平均成绩printf("the first subject's average is:%.2f\n",func1(ps,4));//调用函数2求解问题②找出有2以上课程不及格的学生,输出其学号和全部成绩printf("The following students have failed two or more subjects:\n");//表头for(int i =0; i <6; i++){if(i ==0){printf("Num\t");}elseprintf("C.No.%d\t", i);}printf("\n");//调用函数2func2(ps,4);//调用函数3printf("Students with an average score of 90 or more or all courses with a score of 85 or more:\n");func3(ps,4);return0;}