问题:
某班有5个学生,三门课。分别编写3个函数实现以下要求:
(1) 求各门课的平均分;
(2) 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
(3) 找出三门课平均成绩在85-90分的学生,并输出其学号和姓名。
主程序输入5个学生的成绩,然后调用上述函数输出结果。
代码已编写好,但问题在于,第一遍输入第一个同学的姓名和学号时正常,但输入第二个时便会出现 未输入名字之前,输入名字和输入学号一起出现,以至于无法输入第2-5个同学的姓名
截图如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
float aver(int a,int b,int c);
int select(int a,int b,int c);
int bjg(int a,int b,int c);
int main()
{
struct book{
char name[10];
char number[10];
int sub1;
int sub2;
int sub3;
};
struct book student[6];//为了初始化和顺序对应,故舍弃第一个结构数组元素不用
int i,j;
for(i=1;i<6;i++)
{
printf("请输入第%d个同学的姓名:\n",i);
gets(student[i].name);
printf("请输入第%d个同学的学号:\n",i);
gets(student[i].number);
printf("请输入第%d个同学的第1门课成绩:\n",i);
scanf("%d",&student[i].sub1);
printf("请输入第%d个同学的第2门课成绩:\n",i);
scanf("%d",&student[i].sub2);
printf("请输入第%d个同学的第3门课成绩:\n",i);
scanf("%d",&student[i].sub3);
}
//输入部分结束
float average[4];
for(i=1;i<4;i++)
{
average[i]=aver(student[i].sub1,student[i].sub2,student[i].sub3);
printf("第%d门课的平均成绩为:%f\n",i,average[i]);
}
//三门课平均分输出完毕
for(i=1;i<4;i++)
{
if(bjg(student[i].sub1,student[i].sub2,student[i].sub3)>=2)
{
printf("不及格超过2门\n");
puts(student[i].name);
puts(student[i].number);
if(student[i].sub1<60)
printf("%d ",student[i].sub1);
if(student[i].sub2<60)
printf("%d ",student[i].sub2);
if(student[i].sub3<60)
printf("%d ",student[i].sub3);
}
}
for(i=1;i<4;i++)
{
if(select(student[i].sub1,student[i].sub2,student[i].sub3)==1)
{
printf("成绩在85-90之间:\n");
puts(student[i].name);
puts(student[i].number);
}
}
}
//函数1:求平均分数
float aver(int a,int b,int c)
{
return((a+b+c)/3);
}
//函数2:求不及格门数超过2的同学
int bjg(int a,int b,int c)
{
int count=0;
if(a<60)
count+=1;
if(b<60)
count+=1;
if(c<60)
count+=1;
if(count>2)
return count;
else return 0;
}
//函数3:求三门课平均成绩在85-90分的学生
int select(int a,int b,int c)
{
if(((a+b+c)/3)>=85&&((a+b+c)/3)<=90)
return 1;
else
return 0;
}