假设此顺序表存放学生C语言程序设计课程成绩,请采用顺序表存储方式完成一下功能: (1)输入该班学成成绩; (2)求出该门课程成绩最高分; (3)对学生成绩由高到低进行排序,并输出排序前后的成绩单。
时间: 2024-11-28 22:27:06 浏览: 21
为了完成这个功能,我们可以创建一个顺序表结构,每个元素代表一个学生的成绩,然后依次实现所需的功能。
首先,我们需要定义一个数据结构,比如`StudentScore`,包含学生的姓名和成绩:
```c
typedef struct {
char name[50];
int score;
} StudentScore;
```
接下来,我们可以建立一个顺序表来存储所有学生的成绩,例如使用数组:
```c
StudentScore students[100]; // 假设最多有100个学生
int numStudents = 0; // 记录实际的学生数量
```
以下是实现各个功能的步骤:
1. **输入学生成绩**:
使用循环读取用户输入的姓名和分数,直到没有更多学生为止:
```c
void inputScores() {
while (true) {
printf("请输入学生姓名(输入'q'结束): ");
fgets(students[numStudents].name, sizeof(students[numStudents].name), stdin);
if (strcmp(students[numStudents].name, "q") == 0) break;
printf("请输入学生成绩: ");
scanf("%d", &students[numStudents].score);
numStudents++;
}
}
```
2. **求出最高分**:
可以遍历顺序表查找最大值:
```c
int highestScore() {
int maxScore = students[0].score;
for (int i = 1; i < numStudents; i++) {
if (students[i].score > maxScore) {
maxScore = students[i].score;
}
}
return maxScore;
}
```
3. **成绩从高到低排序**:
你可以使用冒泡排序或快速排序等算法对数组进行降序排列:
```c
void sortScoresDesc() {
for (int i = 0; i < numStudents - 1; i++) {
for (int j = 0; j < numStudents - 1 - i; j++) {
if (students[j].score < students[j + 1].score) {
StudentScore temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
```
最后,可以分别打印排序前后的成绩单:
```c
void printScores() {
printf("原始成绩单:\n");
for (int i = 0; i < numStudents; i++) {
printf("%s: %d\n", students[i].name, students[i].score);
}
printf("\n最高分:%d\n", highestScore());
printf("\n排序后的成绩单(从高到低):\n");
for (int i = 0; i < numStudents; i++) {
printf("%s: %d\n", students[i].name, students[i].score);
}
}
```
阅读全文