c语言输入一组学生的姓名和总分,根据总分由高到低排名次(假定不超过10名学生)。提示:学生的姓名可用元素长度为20个字符的字符型二维数组char name【10】【20】存储
时间: 2023-12-06 20:44:23 浏览: 30
下面是一组基于冒泡排序的 C 代码实现,可以实现根据总分由高到低排名次的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 10
#define NAME_LEN 20
int main() {
char name[MAX_STUDENT][NAME_LEN];
int score[MAX_STUDENT];
int i, j, temp_score;
char temp_name[NAME_LEN];
// 输入学生姓名和总分
for (i = 0; i < MAX_STUDENT; i++) {
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", name[i]);
printf("请输入第%d个学生的总分:", i+1);
scanf("%d", &score[i]);
}
// 冒泡排序
for (i = 0; i < MAX_STUDENT-1; i++) {
for (j = 0; j < MAX_STUDENT-i-1; j++) {
if (score[j] < score[j+1]) {
// 交换学生姓名和总分
temp_score = score[j+1];
score[j+1] = score[j];
score[j] = temp_score;
strcpy(temp_name, name[j+1]);
strcpy(name[j+1], name[j]);
strcpy(name[j], temp_name);
}
}
}
// 输出排名
printf("排名\t姓名\t总分\n");
for (i = 0; i < MAX_STUDENT; i++) {
printf("%d\t%s\t%d\n", i+1, name[i], score[i]);
}
return 0;
}
```
代码中,我们首先定义了一个 `MAX_STUDENT` 和 `NAME_LEN` 分别表示最多输入的学生数量和每个学生姓名的最大长度。然后定义了两个数组 `name` 和 `score` 分别存储学生的姓名和总分。
在输入学生姓名和总分之后,我们使用冒泡排序对学生的总分进行排序。当总分相同时,我们默认排名靠前的学生名次更高。
最后,我们按照排名的顺序输出学生的姓名和总分。