解题思路: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语言代码)浏览:926 |
汽水瓶 (C语言代码)浏览:664 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:545 |
【绝对值排序】 (C++代码)浏览:720 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |
简单的a+b (C语言代码)浏览:641 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:1267 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:638 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:646 |