c语言有10位学生需要选课,数组score[i]存储第 i 位学生的分数: int score[11] = {0,80,70,90,100, 81,95,86,45,78,91}; 现有序号为1、2、3、4的课程待选。输入每位学生选的课程号,保存在数组no中,其中no[i]存储第 i 位学生想选的课程号。 请编写选课程序,规则如下: 每门课程只余1个名额,只能录取选课学生中分数最高者。 程序运行结果:输出各课程录取的学生号及分数 ,如果某课程无人选修,则输出“...号课程无人报”。 输入格式: 按序输入每位学生选的课程号,中间用空格分隔 输出格式: 一行输出一门课程的录取结果。 在printf中用%d号课程录取第%d位学生%d分\n格式输出各课程号录取的学生及分数。 如果课程无人报,则输出i号课程无人报。 输入样例: 1 2 1 2 2 1 4 4 4 4 输出样例: 1号课程录取第6位学生95分 2号课程录取第4位学生100分 3号课程无人报 4号课程录取第10位学生91分
时间: 2024-02-15 19:03:47 浏览: 103
C语言用数组来对学生成绩进行处理
这道题可以用一个二维数组来存储每门课程被哪些学生选择,然后再用一个一维数组来存储每个学生选择的课程,最后遍历每门课程,找到分数最高的学生输出即可。具体代码实现如下:
```c
#include <stdio.h>
int main()
{
int score[11] = {0,80,70,90,100,81,95,86,45,78,91}; // 存储学生分数
int course[5][11] = {0}; // 存储每门课程被哪些学生选择
int no[11]; // 存储每个学生选择的课程
int i, j, k, max, max_score;
// 输入每个学生选择的课程
for (i = 1; i <= 10; i++) {
scanf("%d", &no[i]);
course[no[i]][i] = 1; // 标记该学生选择了该课程
}
// 遍历每门课程
for (i = 1; i <= 4; i++) {
max = 0; // 分数最高的学生编号
max_score = 0; // 分数最高的学生分数
// 遍历选择该课程的学生
for (j = 1; j <= 10; j++) {
if (course[i][j] == 1 && score[j] > max_score) {
max = j;
max_score = score[j];
}
}
if (max_score > 0) {
printf("%d号课程录取第%d位学生%d分\n", i, max, max_score);
} else {
printf("%d号课程无人报\n", i);
}
}
return 0;
}
```
输入样例:
```
1 2 1 2 2 1 4 4 4 4
```
输出样例:
```
1号课程录取第6位学生95分
2号课程录取第4位学生100分
3号课程无人报
4号课程录取第10位学生91分
```
阅读全文