一个实现,如果功课的平均成绩那里要输出5个学生的平均成绩,可以用一个for循环从学生成绩结构数组s的avg字段读取,供参考:
#include <stdio.h>
struct stu{
int id;
char name[10];
float chinese;
float math;
float english;
float avg;
};
//获取5个学生信息到学生成绩结构数组s中
void input(struct stu * s){
int i=0;
while(i<5){
printf("input scores of student %d:\n",i+1);
printf("NO.:");
scanf("%d",&s[i].id);
while(getchar()!='\n') //清除输入的换行符,以便让下面的名字字符串获取成功
continue;
printf("name:");
scanf("%s",s[i].name);
printf("score 1:");
scanf("%f",&s[i].chinese);
printf("score 2:");
scanf("%f",&s[i].math);
printf("score 3:");
scanf("%f",&s[i].english);
i++;
}
}
//计算学生的总平均成绩
float calculateAvg(struct stu *s){
int i=0;
int j;
float avg=0;
while(i<5){
s[i].avg=(float)(s[i].chinese+s[i].english+s[i].math)/3; //每个学生的平均成绩存入学生成绩结构数据s的平均分字段avg中
avg+=s[i].avg; //累加每个学生的平均分
i++;
}
avg/=5; //除以学生的人数得出成绩的总平均分
return avg;
}
int findMax(struct stu * s){ //寻找最高分的下标
int i;
float maxScore=0;
float maxindex=0;
float temp;
for(i=0;i<5;i++){
temp=(float)(s[i].chinese+s[i].english+s[i].math);
if(temp>maxScore){
maxScore=temp;
maxindex=i;
}
}
return maxindex;
}
int main(void){
struct stu s[5];
input(s);
printf("功课的平均分成绩分别为:%.1f\n",calculateAvg(s));
printf("最高分的同学信息是:\n");
int index = findMax(s);
printf("NO.:%d, name:%s, score:%.1f, %.1f, %.1f, average:%.1f"
,index+1,s[index].name,s[index].chinese,s[index].math,s[index].english,s[index].avg);
return 0;
}