1、定义一个学生结构体,包括学号、姓名和分数三个数据分量。 2、从键盘上输入10个学生的信息(使用第1步中定义的结构体),存放到一个学生结构体数组中 3、写一个函数对以上数组按分数进行排序(以数组首地址为参数)
时间: 2024-10-06 21:03:34 浏览: 49
1_lower7y7_定义一个包含学生信息(学号_成绩)的顺序表和链表(二选一)_姓名_使其具有如下功能_
5星 · 资源好评率100%
首先,我们来创建一个名为`Student`的结构体,它包含学号、姓名和分数这三个属性:
```c
typedef struct {
int student_id;
char name[50];
float score;
} Student;
```
接下来,我们需要编写一个函数用于从键盘输入10个学生信息并存储到结构体数组中:
```c
void input_students(Student students[], int size) {
for (int i = 0; i < size; i++) {
printf("请输入第%d个学生的学号、姓名和分数:\n", i + 1);
scanf("%d", &students[i].student_id);
fgets(students[i].name, sizeof(students[i].name), stdin); // 读取字符串,记得去掉换行符
students[i].name[strlen(students[i].name) - 1] = '\0'; // 去掉多余换行符
scanf("%f", &students[i].score);
}
}
```
然后,我们可以编写一个函数,采用快速排序算法对数组按分数进行降序排序(因为题目没指定升序或降序,这里假设需要按照分数降序):
```c
// 快速排序函数,传入数组首地址和数组长度
void quick_sort_descending(Student* array, int left, int right) {
if (left < right) {
int pivot_index = partition_descending(array, left, right);
quick_sort_descending(array, left, pivot_index - 1);
quick_sort_descending(array, pivot_index + 1, right);
}
}
// 分区函数,返回值是基准元素的新位置
int partition_descending(Student* array, int low, int high) {
float pivot = array[high].score;
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (array[j].score >= pivot) {
i++;
swap(&array[i], &array[j]);
}
}
swap(&array[i + 1], &array[high]);
return i + 1;
}
// 交换两个结构体变量
void swap(Student* a, Student* b) {
Student temp = *a;
*a = *b;
*b = temp;
}
```
最后,你可以调用`input_students()`函数输入学生信息,然后调用`quick_sort_descending()`函数对数组排序:
```c
int main() {
Student students[10];
input_students(students, 10);
quick_sort_descending(students, 0, 9);
// 输出排序后的学生信息
for (int i = 0; i < 10; i++) {
printf("学号:%d,姓名:%s,分数:%f\n", students[i].student_id, students[i].name, students[i].score);
}
return 0;
}
```
阅读全文