有一个班同学,实现计算平均分和不及格同学等功能
//有一个班4个学生,5门课程。①求第一门课程的平均分;②找出两门以上课程不及格的同学,输入他们的姓名和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩85分以上的同学。分别编3个函数实现以上3个要求。
#define N 5 // N表示5门课程 #include<stdio.h> int main() { float sub_average(int *p,char (*p1)[5],int n);//计算每门课的平均成绩 int sub_name(int *p1,char (*p2)[5]);//找出求2门以上不及格同学和成绩 int average_name(int *p3,char (*p2)[5]);//找出求平均分90以上或全部课程成绩85分以上的同学 int score[][N]={{51,52,73,45,53},{50,51,80,90,100},{86,87,88,89,90},{100,100,100,100,60}}; char sub[][5]={"语文","数学","英语","政治","历史"}; char name[][5]={"张三","李四","王五","任六"}; char (*p1_sub)[5],(*p2_name)[5]; //p_sub1指向课程名字 p2_name指向同学名字 int *p_score;//p指向成绩 char (*p3_name)[5];//p3指向同学名字 int n,i; p1_sub=sub; p2_name=name; p_score=score[0]; p3_name=name; n=sizeof(score)/4/5;//4;n等于数组的行数,也就是有几个学生 for(i=0;i<N;i++) { sub_average(p_score+i,p1_sub++,n); } sub_name(p_score,p3_name); average_name(p_score,p3_name); } int average_name(int *p1,char (*p2)[5]) { int j,i=0,flag_1=0,flag_2=0,sum=0;//flage_1为1 代表平均成绩在90以上,flag_2为1代表全部课程在85以上 float average=0; printf("平均成绩在90以上或者全部课程在85以上的同学有:\n"); for(i=0;i<4;i++,p1=p1+5) { flag_1=0,flag_2=0,sum=0; for(j=0;j<5;j++) { sum=sum+*(p1+j); } average=sum*1.0/5; if(average>90.00) flag_1=1; for(j=0;j<5;j++) { if(*(p1+j)<85) break; flag_2=1; } if((flag_1+flag_2)>=1) printf("%s\n",p2+i); } return 0; } int sub_name(int *p1,char (*p2)[5]) { int i,j=0,k; int flag=0; for(i=0;i<5;i++,p1=p1+5,p2++) { flag=0; for(j=0;j<5;j++) { if(*(p1+j)<60) flag++; if(flag==2) break; } if(flag>=2) { printf("%s",p2); for(k=0;k<5;k++,p1) { printf("%d ",*(p1+k)); } printf("\n"); } } return 0; } float sub_average(int *p,char (*p1)[5],int n) { int sum=0,i=0; for(;i<n;i++) { sum=sum+*p; p=p+N; } printf("%s:",p1); printf("%.2f\n",sum*1.0/N); return 0; }