利用c语言完成 给出n个学生的考试成绩表,每条记录由学号、姓名和分数和名次组成,设计算法完成下列操作: (1)设计一个显示对学生信息操作的菜单函数如下所示: 1、录入学生基本信息 2、直接插入排序 3、冒泡排序 4、快速排序 5、输出学生信息 6、退出 算法设计要求:按分数从高到低的顺序进行排序,分数相同的为同一名次。输入的学生信息存入文件中,每选择一种排序方法,必须从文件中取出数据。

时间: 2024-02-20 17:00:05 浏览: 19
好的,我会尽力回答。这是一个需要涉及文件操作和排序算法的问题,需要一定的编程基础。以下是我的设计思路: 1. 定义一个结构体,表示学生的基本信息,包括学号、姓名、分数和名次。 2. 实现菜单函数,根据用户选择的操作,执行相应的函数。 3. 实现录入学生基本信息的函数,将学生信息写入文件中。 4. 实现从文件中读取学生信息的函数,用于排序和输出学生信息。 5. 实现直接插入排序、冒泡排序和快速排序三个排序算法函数,按分数从高到低的顺序进行排序,分数相同的为同一名次。 6. 实现输出学生信息的函数,将排序后的学生信息输出到屏幕上。 7. 实现主函数,调用菜单函数,根据用户选择执行相应操作。 下面是大概的代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生信息结构体 struct Student { char id[20]; char name[20]; int score; int rank; }; // 菜单函数,根据用户选择执行相应操作 void menu() { printf("1. 录入学生基本信息\n"); printf("2. 直接插入排序\n"); printf("3. 冒泡排序\n"); printf("4. 快速排序\n"); printf("5. 输出学生信息\n"); printf("6. 退出\n"); } // 录入学生基本信息,将学生信息写入文件中 void input(struct Student *students, int n) { FILE *fp = fopen("students.txt", "w"); for (int i = 0; i < n; i++) { printf("请输入第%d个学生的学号、姓名和分数(用空格隔开):", i+1); scanf("%s %s %d", students[i].id, students[i].name, &students[i].score); students[i].rank = 0; fwrite(&students[i], sizeof(struct Student), 1, fp); } fclose(fp); } // 从文件中读取学生信息 void read(struct Student *students, int n) { FILE *fp = fopen("students.txt", "r"); for (int i = 0; i < n; i++) { fread(&students[i], sizeof(struct Student), 1, fp); } fclose(fp); } // 直接插入排序 void insertSort(struct Student *students, int n) { for (int i = 1; i < n; i++) { struct Student temp = students[i]; int j; for (j = i - 1; j >= 0 && temp.score > students[j].score; j--) { students[j+1] = students[j]; } students[j+1] = temp; } // 计算名次 int rank = 1; students[0].rank = 1; for (int i = 1; i < n; i++) { if (students[i].score == students[i-1].score) { students[i].rank = students[i-1].rank; } else { students[i].rank = i + 1; } } } // 冒泡排序 void bubbleSort(struct Student *students, int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (students[j].score < students[j+1].score) { struct Student temp = students[j]; students[j] = students[j+1]; students[j+1] = temp; } } } // 计算名次 int rank = 1; students[0].rank = 1; for (int i = 1; i < n; i++) { if (students[i].score == students[i-1].score) { students[i].rank = students[i-1].rank; } else { students[i].rank = i + 1; } } } // 快速排序 void quickSort(struct Student *students, int left, int right) { if (left >= right) { return; } int i = left, j = right; struct Student pivot = students[left]; while (i < j) { while (i < j && students[j].score <= pivot.score) { j--; } students[i] = students[j]; while (i < j && students[i].score >= pivot.score) { i++; } students[j] = students[i]; } students[i] = pivot; quickSort(students, left, i - 1); quickSort(students, i + 1, right); // 计算名次 int rank = 1; students[left].rank = 1; for (int k = left + 1; k <= right; k++) { if (students[k].score == students[k-1].score) { students[k].rank = students[k-1].rank; } else { students[k].rank = k - left + 1; } } } // 输出学生信息 void output(struct Student *students, int n) { printf("学号\t姓名\t分数\t名次\n"); for (int i = 0; i < n; i++) { printf("%s\t%s\t%d\t%d\n", students[i].id, students[i].name, students[i].score, students[i].rank); } } int main() { int n; printf("请输入学生人数:"); scanf("%d", &n); struct Student *students = (struct Student*)malloc(sizeof(struct Student) * n); while (1) { menu(); int choice; printf("请输入操作编号:"); scanf("%d", &choice); switch (choice) { case 1: input(students, n); break; case 2: read(students, n); insertSort(students, n); output(students, n); break; case 3: read(students, n); bubbleSort(students, n); output(students, n); break; case 4: read(students, n); quickSort(students, 0, n-1); output(students, n); break; case 5: read(students, n); output(students, n); break; case 6: free(students); exit(0); default: printf("请输入正确的操作编号!\n"); } } return 0; } ```

相关推荐

最新推荐

recommend-type

C语言程序设计实现学生成绩记录簿

通过编写c语言《学生成绩记录簿系统》让我知道所学的编程语言是需要多练多编写代码锻炼出来的。 1)C语言课程设计的主要目的是培养学生综合运用C语言程序设计课程所学到的知识,编写C程序解决实际问题的能力,以及...
recommend-type

基于EasyX的贪吃蛇小游戏 - C语言

基于EasyX的贪吃蛇小游戏 - C语言
recommend-type

Energy Core ECP5705-V01.pdf

Energy Core ECP5705-V01.pdf
recommend-type

matlabGUI学生成绩管理系统pdf

建立基于图形用户界面GUI的学生成绩管理系统,该系统能够实现学生成绩信息的增加、删除、查询(查询某门课所有学生的成绩并显示排名,查询某个学生的各科成绩并显示排名)、课程成绩统计最高分、最低分、平均分、方差、并显示相应的排名;绘制柱状图、条形图、饼状图、正太分布曲线等功能。 通过本实验使学生掌握图形用户界面GUI的操作和设计流程,并通过编写回调函数巩固前期的知识。
recommend-type

高职教育品牌专业申报汇总表.doc

高职教育品牌专业申报汇总表.doc
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB遗传算法自动优化指南:解放算法调优,提升效率

![MATLAB遗传算法自动优化指南:解放算法调优,提升效率](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/8487939061/p208348.png) # 1. MATLAB遗传算法概述** 遗传算法是一种受生物进化启发的优化算法,它模拟了自然选择和遗传的过程。在MATLAB中,遗传算法工具箱提供了丰富的函数和类,用于创建和运行遗传算法。 **1.1 遗传算法的基本原理** 遗传算法的工作原理如下: - **初始化:**创建由随机个体组成的初始种群。 - **评估:**根据目标函数计算每个个体的适应度。 -
recommend-type

failed to register layer: ApplyLayer exit status 1 stdout: stderr: archive/tar: invalid tar header

很抱歉听到这个问题。这个错误通常是由于Docker镜像损坏或Docker存储库中缺少所需的图层引起的。您可以尝试以下几种方法来解决这个问题: 1. 清理Docker镜像和容器:使用命令“docker system prune”清理不再使用的Docker对象。 2. 检查Docker存储库:确保您正在使用可靠的Docker存储库,并检查是否存在所有必需的图层。 3. 重新下载Docker镜像:如果您确定问题是由于损坏的Docker镜像引起的,则可以尝试重新下载Docker镜像。 4. 更新Docker版本:如果您使用的是旧版Docker,则可能会出现此问题。尝试更新到最新版本的Docke
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。