从键盘输入5个学生数据(包括学号、姓名、3门课的成绩),计算并输出课程总平均成绩和最高分的学生信息。
1.输出的课程总平均成绩是3门课程的总平均成绩,输出的学生信息包括学号、姓名、3门课的成绩和平均分数。浮点型的数据输出保留1位小数。
2.程序中的数据输入、平均分计算、最高分查找都利用函数实现。计算结果的输出在main函数中实现。
如输入( 包括提示):
input scores of student 1:
NO.:1
name:zhang
score 1:70
score 2:80
score 3:90
input scores of student 2:
NO.:2
name:wang
score 1:90
score 2:98
score 3:97
input scores of student 3:
NO.:3
name:li
score 1:98
score 2:90
score 3:87
input scores of student 4:
NO.:4
name:zhao
score 1:99
score 2:98
score 3:97
input scores of student 5:
NO.:5
name:hu
score 1:76
score 2:77
score 3:78
输出:
功课的平均成绩分别为:88.3
最高分的同学信息是:
No.: 4, name: zhao, score:99.0, 98.0, 97.0, average: 98.0
一个实现,如果功课的平均成绩那里要输出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;
}