用C语言编写 有n个学生,每人有m门课程的分数,要求: (1) 找出总分最高的学生号; (2) 找出至少有一门课分数不及格的学生号并输出其所有分数 (3) 统计每门分数都在85分以上的学生人数
时间: 2024-01-12 12:03:40 浏览: 88
以下是用C语言编写的程序,可以实现上述要求:
```c
#include <stdio.h>
#define N 100 // 最大学生数
#define M 10 // 最大课程数
int main() {
int scores[N][M]; // 所有学生的分数
int n, m; // 学生数、课程数
int i, j; // 循环计数器
int max_sum = 0; // 总分最高的学生的总分
int max_id = -1; // 总分最高的学生的学号
int num_failed = 0; // 不及格的学生数
int num_all_85 = 0; // 所有分数都在85分以上的学生数
// 输入学生数和课程数
printf("请输入学生数和课程数:");
scanf("%d%d", &n, &m);
// 输入每个学生的分数
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的%d门课程分数:", i + 1, m);
for (j = 0; j < m; j++) {
scanf("%d", &scores[i][j]);
}
}
// 统计总分最高的学生
for (i = 0; i < n; i++) {
int sum = 0;
for (j = 0; j < m; j++) {
sum += scores[i][j];
}
if (sum > max_sum) {
max_sum = sum;
max_id = i;
}
}
printf("总分最高的学生是第%d个,总分为%d\n", max_id + 1, max_sum);
// 统计至少有一门课分数不及格的学生
printf("以下学生至少有一门课分数不及格:\n");
for (i = 0; i < n; i++) {
int has_failed = 0;
for (j = 0; j < m; j++) {
if (scores[i][j] < 60) {
has_failed = 1;
break;
}
}
if (has_failed) {
num_failed++;
printf("学生%d的分数为:", i + 1);
for (j = 0; j < m; j++) {
printf("%d ", scores[i][j]);
}
printf("\n");
}
}
if (num_failed == 0) {
printf("没有学生不及格!\n");
}
// 统计所有分数都在85分以上的学生数
for (i = 0; i < n; i++) {
int has_all_85 = 1;
for (j = 0; j < m; j++) {
if (scores[i][j] < 85) {
has_all_85 = 0;
break;
}
}
if (has_all_85) {
num_all_85++;
}
}
printf("所有分数都在85分以上的学生数为%d\n", num_all_85);
return 0;
}
```
该程序首先输入学生数和课程数,然后输入每个学生的分数。接着,程序分别统计总分最高的学生、至少有一门课分数不及格的学生以及所有分数都在85分以上的学生数,并输出相应的结果。
注意,该程序中假设输入的学生数不超过100,课程数不超过10,可以根据实际情况进行修改。另外,该程序并没有对输入的分数进行验证,需要保证输入的分数是合法的整数。
阅读全文