给定学生成绩登记表如表14.1所示。编写一个C程序,用冒泡排序对该学生成绩表按成绩(grade)从低到高进行排序。 表11 学生成绩登记表 学号(num) 姓名(name) 成绩(grade) 02 Lin 92 03 Zhang 87 04 Zhao 72 05 Ma 91 09 Zhen 85 11 Wang 100 12 L 86 口 13 Xu 83 16 Mao 78 17 Hao 95 20 Lu 82 21 Sopg 76 22 Wu 88 具体要求: (1)定义一个结构体数组表示学生成绩登记表,其中的每个元素依次存放表14.1中各学生的情况。具体要求: (1)定义一个结构体数组表示学生成绩登记表,其中的每个元素依次存放表14.1中各学生的情况。 结构体类型为 struct student ( int num; char name[10]: int grade: ]: (2)在程序中另外定义一个结构体指针数组,在排序前,其中每一个数组元素依次指向学生成绩登记表(为结构体类型数组)中的各学生情况。 (3)在程序中,首先输出排序前的学生情况,然后输出排序后的结果。输出形式如表14.1所示,但不要表中的框线。 (4)将冒泡排序的功能独立编写成一个函数。
时间: 2024-03-14 08:45:21 浏览: 149
以下为您提供参考代码:
```c
#include <stdio.h>
#include <string.h>
struct student {
int num;
char name[10];
int grade;
};
void bubble_sort(struct student *arr, int n) {
int i, j;
struct student tmp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (arr[j].grade > arr[j+1].grade) {
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
int main(void) {
struct student table[12] = {
{2, "Lin", 92},
{3, "Zhang", 87},
{4, "Zhao", 72},
{5, "Ma", 91},
{9, "Zhen", 85},
{11, "Wang", 100},
{12, "L", 86},
{13, "Xu", 83},
{16, "Mao", 78},
{17, "Hao", 95},
{20, "Lu", 82},
{21, "Sopg", 76},
{22, "Wu", 88}
};
struct student *ptr[12];
int i, n = 12;
for (i = 0; i < n; i++) {
ptr[i] = &table[i];
}
printf("排序前:\n");
printf("学号\t姓名\t成绩\n");
for (i = 0; i < n; i++) {
printf("%d\t%s\t%d\n", ptr[i]->num, ptr[i]->name, ptr[i]->grade);
}
bubble_sort(ptr, n);
printf("排序后:\n");
printf("学号\t姓名\t成绩\n");
for (i = 0; i < n; i++) {
printf("%d\t%s\t%d\n", ptr[i]->num, ptr[i]->name, ptr[i]->grade);
}
return 0;
}
```
代码中使用了冒泡排序算法对学生成绩进行从小到大排序,函数 bubble_sort 接收一个指向结构体数组的指针以及数组长度 n,将数组进行排序。在主函数中,定义了一个学生成绩登记表 table,另外定义了一个结构体指针数组 ptr,将其中每个元素指向 table 中的各学生情况。最后输出排序前和排序后的学生情况。
阅读全文