体能考试结束后,输入n名(不超过10)男生的成绩,每名学生的成绩包括引体向上、蛇形跑、3公里、仰卧起坐,输出每名学生的总成绩,并输出每个项目的最高分。
输入格式:
输入人数n,然后每行输入体能每个人的4项体能成绩。
输出格式:
每行输出每个人的总成绩
最后一行输出每一项的最高分,空格隔开
输入样例:
4
90 70 80 90
70 88 98 90
58 70 70 89
70 80 88 94
输出样例:
330
346
287
332
90 88 98 94
解决方案,虽然有点复杂,但纯属突发奇想,写着玩玩
#include<stdio.h>
int main() {
struct Student {
int a, b, c, d;
} num[10];
int n, i, j;
int maxA = 0, maxB = 0, maxC = 0, maxD = 0;
// 输入人数
scanf("%d", &n);
for (i = 0; i < n; i++) {
// 输入每名学生的成绩
scanf("%d %d %d %d", &num[i].a, &num[i].b, &num[i].c, &num[i].d);
// 计算总成绩
int sum = num[i].a + num[i].b + num[i].c + num[i].d;
printf("%d\n", sum);
// 更新每个项目的最高分
maxA = (maxA > num[i].a) ? maxA : num[i].a;
maxB = (maxB > num[i].b) ? maxB : num[i].b;
maxC = (maxC > num[i].c) ? maxC : num[i].c;
maxD = (maxD > num[i].d) ? maxD : num[i].d;
}
// 输出每个项目的最高分
printf("%d %d %d %d\n", maxA, maxB, maxC, maxD);
return 0;
}
附加:三元操作符是 C 语言中的一种条件表达式,它允许您在一条语句中同时进行条件判断和赋值操作。三元操作符的基本语法如下:
条件 ? 表达式1 : 表达式2
如果条件为真(即条件表达式的结果为非零),则表达式的值为表达式1;如果条件为假(即条件表达式的结果为零),则表达式的值为表达式2。
在您的代码中,maxA = (maxA > num[i].a) ? maxA : num[i].a; 这行代码的意思是:
(maxA > num[i].a) 是一个条件表达式,它会比较 maxA 和 num[i].a 的值。
如果 maxA 大于 num[i].a,则条件为真,maxA 的值保持不变,即 maxA = maxA。
如果 maxA 不大于 num[i].a,则条件为假,maxA 的值被赋为 num[i].a 的值,即 maxA = num[i].a。
简单来说,这行代码的目的是为了更新 maxA 的值,使其保持为当前遇到的最高分数 num[i].a 和之前 maxA 中的较大值。同样的逻辑也应用于 maxB、maxC 和 maxD 的更新