现在有一组学生,每个学生的信息包含学号(char num[10]),姓名(char name[20]),成绩(int)
1、请用顺序表存储这些学生的信息;
2、在不改变原顺序表中元素顺序的情况下:(提示:传值调用,排序后结果在自定义函数中输出)
(1)请用熟悉的排序算法将这些学生的信息按成绩降序排序(减排序),输出排序结果。
< 提示:按数据项进行比较: if(L->data[j].scoredata[j+1].score) ……>
(2)请用另外一种排序算法(不能与第(1)题用同一种排序算法)将这些学生的信息按学号升序排序(增排序,注意学号为字符串),输出排序结果;
<提示: #include <string.h>
strcmp(a,b)==0 表示a,b两个字符串相等;
strcmp(a,b)<0 表示字符串a小于字符串b …… >
排序算法的练习及应用…
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 技术专家团-小桥流水 2024-05-25 21:53关注
按成绩降序排序采用冒泡排序,按学号排序使用选择排序。
两个排序都单独封装了函数,代码运行示例如下:代码:
#include <stdio.h> #include <string.h> //顺序表最大容量 #define MAXNMB 100 //定义学生结构体 typedef struct _student { char num[10]; char name[20]; int score; }Student; //定义顺序表 typedef struct _linklist { Student data[MAXNMB]; //保存所有学生信息 int nmb; //实际人数 }LinkList; //按成绩降序 void SortByScore(LinkList lst) { int i, j; Student t; //冒泡排序 for (i = 0; i < lst.nmb - 1; i++) { for (j = 0; j < lst.nmb - i - 1; j++) { if (lst.data[j].score < lst.data[j + 1].score) //前边的成绩比后面的成绩低,就交换位置 { t = lst.data[j]; lst.data[j] = lst.data[j + 1]; lst.data[j + 1] = t; } } } //输出结果 printf("\n按成绩降序排序后:\n"); printf("学号 姓名 成绩\n"); for (i = 0; i < lst.nmb; i++) { printf("%s %s %d\n", lst.data[i].num, lst.data[i].name, lst.data[i].score); } } //按学号升序排序 void SortByNum(LinkList lst) { int i = 0, j = 0, minindex = 0; Student t; //选择排序 for (i = 0; i < lst.nmb -1; i++) { minindex = i; for (j = i + 1; j < lst.nmb; j++) //遍历i后面的,找到学号最小的 { if (strcmp(lst.data[j].num, lst.data[minindex].num) < 0) //j比minindex的学号小 minindex = j; //更新索引 } if (minindex != i) { //交换i和minindex对应的学生 t = lst.data[i]; lst.data[i] = lst.data[minindex]; lst.data[minindex] = t; } } //输出结果 printf("\n按学号升序排序后:\n"); printf("学号 姓名 成绩\n"); for (i = 0; i < lst.nmb; i++) { printf("%s %s %d\n", lst.data[i].num, lst.data[i].name, lst.data[i].score); } } int main() { LinkList lst; int i = 0; //初始化学生信息 printf("请输入学生个数:"); scanf("%d", &lst.nmb); for (i = 0; i < lst.nmb; i++) { printf("请输入第%d个学生的学号、姓名和成绩:", i + 1); scanf("%s %s %d", lst.data[i].num, lst.data[i].name, &lst.data[i].score); } //按成绩降序排序 SortByScore(lst); //按学号升序排序 SortByNum(lst); return 0; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图
- ¥15 UE5.1局部变量对蓝图不可见
- ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
- ¥20 sentry如何捕获上传Android ndk 崩溃
- ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
- ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?