解题思路: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分
3 人评分
大神老白 (C语言代码)浏览:715 |
printf基础练习2 (C语言代码)浏览:567 |
【绝对值排序】 (C++代码)浏览:672 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:675 |
WU-输入输出格式练习 (C++代码)浏览:1082 |
WU-陶陶摘苹果2 (C++代码)浏览:975 |
幸运数 (C++代码)浏览:1264 |
A+B for Input-Output Practice (V) (C语言代码)浏览:469 |
Hello, world! (C语言代码)浏览:824 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:401 |