使用C语言输入5个学生的姓名和成绩,并按照成绩的从高到低输出。请用指针改写下列程序。
时间: 2023-09-04 13:04:11 浏览: 141
### 回答1:
以下是用指针改写的 C 语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[20];
int score;
} student;
int compare(const void *a, const void *b) {
return ((student *) b)->score - ((student *) a)->score;
}
int main() {
int i;
student students[5];
student *pstu;
for (i = 0; i < 5; i++) {
pstu = &students[i];
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", pstu->name);
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%d", &pstu->score);
}
qsort(students, 5, sizeof(student), compare);
printf("\n按成绩从高到低排序后的学生信息如下:\n");
for (i = 0; i < 5; i++) {
pstu = &students[i];
printf("姓名:%s,成绩:%d\n", pstu->name, pstu->score);
}
return 0;
}
```
说明:
- `compare` 函数是一个比较函数,用于排序。
- `qsort` 函数是 C 语言标准库中的排序函数。
- `students` 数组存储了 5 个学生的信息,`pstu` 指针指向每个学生的信息。
### 回答2:
使用指针改写下列程序可以更加简洁和高效。以下是改写后的代码:
```c
#include <stdio.h>
#define MAX_STUDENTS 5
typedef struct {
char name[50];
float score;
} Student;
void sortStudents(Student *students, int n) {
int i, j;
Student temp;
for (i = 0; i < n-1; i++) {
for(j = 0; j < n-i-1; j++) {
if (students[j].score < students[j+1].score) {
temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
}
int main() {
int i;
Student students[MAX_STUDENTS];
// 输入学生姓名和成绩
for(i = 0; i < MAX_STUDENTS; i++) {
printf("请输入第%d个学生的姓名和成绩:", i+1);
scanf("%s%f", students[i].name, &(students[i].score));
}
// 按成绩排序
sortStudents(students, MAX_STUDENTS);
// 按顺序输出学生信息
printf("按成绩从高到低的学生列表:\n");
for(i = 0; i < MAX_STUDENTS; i++) {
printf("姓名:%s\t 成绩:%.2f\n", students[i].name, students[i].score);
}
return 0;
}
```
在这个改写后的程序中,使用了一个名为`Student`的结构体来存储每个学生的姓名和成绩。`sortStudents`函数使用冒泡排序法按照成绩将学生数组进行排序。程序顶部定义了一个常量`MAX_STUDENTS`,指定了学生的数量。在`main`函数中,首先定义了一个`students`数组来保存学生信息,并通过输入循环依次获取学生的姓名和成绩。之后调用`sortStudents`函数对学生成绩进行排序,并按照排序后的顺序输出学生的姓名和成绩。
阅读全文