实验内容
设一个班有10个学生,每个学生有学号,以及数学、物理、英语、语文、体育5门课的成绩信息。分别编写3个函数以实现以下3个要求:
(1)求数学的平均成绩。
(2)对于有两门以上课程不及格的学生,输出他们的学号、各门课成绩及平均成绩。
(3)输出成绩优良的学生(平均成绩在85分以上或全部成绩都在80分以上)的学号、各门课成绩和平均成绩。
【输入形式】
输入数据共有10行,每行有6个数据,分别表示学生学号,数学、物理、英语、语文和体育成绩。学号不超过15位,成绩在0~100之间。
【输出形式】
第一行输出数学的平均成绩(保留两位小数);
接下来n行按输入顺序,输出符合两门以上课程不及格的学生,并输出他们的学号、各门课成绩及平均成绩(保留两位小数);
接下来m行按输入顺序,输出平均成绩≥85分或全部成绩≥80分的学生,输出格式同上。

#include
#define N 10
struct student
{
char num[20];
double math;
double physics;
double English;
double chinese;
double PE;
double average;
}stu[N];
void averagemath(struct student stu[N])
{
float averagemath=0;
int i;
for(i=0;i<N;i++)
averagemath=averagemath+stu[i].math;
averagemath=averagemath/N;
printf("%.2lf\n",averagemath);
}
void fail(struct student stu[N])
{
int i,j;
for(i=0;i<N;i++)
{
j=0;
if(stu[i].math<60) j++;
if(stu[i].physics<60) j++;
if(stu[i].English<60) j++;
if(stu[i].chinese<60) j++;
if(stu[i].PE<60) j++;
if(j>2)
printf("%s %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",stu[i].num,stu[i].math,stu[i].physics,stu[i].English,stu[i].chinese,stu[i].PE,stu[i].average);
}
}
void good(struct student stu[N])
{
int i,j;
for(i=0;i<N;i++)
{
j=0;
if(stu[i].math>80) j++;
if(stu[i].physics>80) j++;
if(stu[i].English>80) j++;
if(stu[i].chinese>80) j++;
if(stu[i].PE>80) j++;
if(j==5||stu[i].average>85)
printf("%s %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",stu[i].num,stu[i].math,stu[i].physics,stu[i].English,stu[i].chinese,stu[i].PE,stu[i].average);
}
}
int main(void)
{
int i;
for(i=0;i<N;i++)
{
scanf("%s",stu[i].num);
scanf("%lf",&stu[i].math);
scanf("%lf",&stu[i].physics);
scanf("%lf",&stu[i].English);
scanf("%lf",&stu[i].chinese);
scanf("%lf",&stu[i].PE);
stu[i].average=(stu[i].math+stu[i].physics+stu[i].English+stu[i].chinese+stu[i].PE)/5;
}
averagemath(stu);
fail(stu);
good(stu);
return 0;
}
问一下上面有什么问题???
第三个函数需要的是>=,你没有判断=
第二个函数 两门以上,包不包括两门?这个有点含糊