原题链接:[编程入门]结构体之成绩统计2
解题思路:1.main函数只用使用for循环读取N名同学的信息
2.自定义average函数,求出三科成绩的平均数
3.然后自定义greatest函数,找出成绩最好的同学(通过每位同学总分的compare)
注意事项: 1.申请数组时尽量大一些,防止越界
2.输入的时候注意是否要取址
3.统计的变量要初始化
参考代码:
#include <stdio.h>
struct score
{
char number[100];
char name[100];
int grade1; //第一科成绩
int grade2; //第二科成绩
int grade3; //第三科成绩
};
int average(struct score student[], int N)
{
int average1 = 0, average2 = 0, average3 = 0; //分别是第一科、第二科、第三科成绩
int sum1 = 0, sum2 = 0, sum3 = 0; //分别是N名同学第一科成绩总和、第二名成绩总和、第三名成绩总和
int i = 0;
for(i = 0; i < N; i ++)
{
sum1 = student[i].grade1 + sum1;
sum2 = student[i].grade2 + sum2;
sum3 = student[i].grade3 + sum3; //for循环遍历获取三科总分
}
average1 = sum1 / N;
average2 = sum2 / N;
average3 = sum3 / N;
printf("%d %d %d\n", average1, average2, average3);
return 0;
}
void greatest(struct score student[], int N)
{
int i = 0;
int total = 0;
int greatest_index = 0; //获取成绩最好的同学的索引
for(i = 0; i < N; i ++)
{
int total1 = student[i].grade1 + student[i].grade2 + student[i].grade3; //求各个同学的总分
if(total1 > total)
{
total = total1;
greatest_index = i; //通过compare找出成绩最高的同学,在每一次遍历过后,将较高的成绩存储在total变量之中
}
}
printf("%s %s %d %d %d\n", student[greatest_index].number, student[greatest_index].name, student[greatest_index].grade1, student[greatest_index].grade2, student[greatest_index].grade3);
}
int main()
{
struct score student[100] = {0};
int N = 0;
int i = 0;
scanf("%d", &N);
for(i = 0; i < N; i++)
{
scanf("%s %s %d %d %d", student[i].number, student[i].name, &student[i].grade1, &student[i].grade2, &student[i].grade3);
}
average(student, N);
greatest(student, N);
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复