实验环境中,给出含有n个学生的成绩表,每条记录由学号,姓名和分数组成,编写具体函数完成下列操作设计一个菜单操作界面,实习录入学生基本信息,直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序,输入学生信息,退出等基本操作的C语言完整代码
时间: 2024-02-05 19:03:23 浏览: 97
用c++编写的一个学生信息管理系统,能进行各种操作,采用菜单录入方式。
4星 · 用户满意度95%
好的,以下是基于你的要求编写的C语言完整代码。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体存储学生信息
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
int score; // 分数
} Student;
// 定义全局变量存储学生信息
Student students[100];
int num_students = 0;
// 录入学生信息
void input_student_info() {
printf("请输入学生的学号、姓名和分数(以空格分隔):\n");
scanf("%s %s %d", students[num_students].id, students[num_students].name, &students[num_students].score);
num_students++;
printf("学生信息录入成功!\n");
}
// 直接插入排序
void insertion_sort() {
int i, j;
Student temp;
for (i = 1; i < num_students; i++) {
temp = students[i];
for (j = i - 1; j >= 0 && students[j].score > temp.score; j--) {
students[j + 1] = students[j];
}
students[j + 1] = temp;
}
printf("直接插入排序完成!\n");
}
// 折半插入排序
void binary_insertion_sort() {
int i, j, low, high, mid;
Student temp;
for (i = 1; i < num_students; i++) {
temp = students[i];
low = 0;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (students[mid].score > temp.score) {
high = mid - 1;
} else {
low = mid + 1;
}
}
for (j = i - 1; j >= high + 1; j--) {
students[j + 1] = students[j];
}
students[high + 1] = temp;
}
printf("折半插入排序完成!\n");
}
// 冒泡排序
void bubble_sort() {
int i, j;
Student temp;
for (i = 0; i < num_students - 1; i++) {
for (j = 0; j < num_students - i - 1; j++) {
if (students[j].score > students[j + 1].score) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("冒泡排序完成!\n");
}
// 快速排序
void quick_sort(int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
Student temp = students[left];
while (i < j) {
while (i < j && students[j].score >= temp.score) {
j--;
}
students[i] = students[j];
while (i < j && students[i].score <= temp.score) {
i++;
}
students[j] = students[i];
}
students[i] = temp;
quick_sort(left, i - 1);
quick_sort(i + 1, right);
}
// 简单选择排序
void selection_sort() {
int i, j, min_index;
Student temp;
for (i = 0; i < num_students - 1; i++) {
min_index = i;
for (j = i + 1; j < num_students; j++) {
if (students[j].score < students[min_index].score) {
min_index = j;
}
}
temp = students[i];
students[i] = students[min_index];
students[min_index] = temp;
}
printf("简单选择排序完成!\n");
}
int main() {
int choice;
while (1) {
printf("\n");
printf("1. 录入学生信息\n");
printf("2. 直接插入排序\n");
printf("3. 折半插入排序\n");
printf("4. 冒泡排序\n");
printf("5. 快速排序\n");
printf("6. 简单选择排序\n");
printf("7. 退出\n");
printf("请输入操作编号:\n");
scanf("%d", &choice);
switch (choice) {
case 1:
input_student_info();
break;
case 2:
insertion_sort();
break;
case 3:
binary_insertion_sort();
break;
case 4:
bubble_sort();
break;
case 5:
quick_sort(0, num_students - 1);
printf("快速排序完成!\n");
break;
case 6:
selection_sort();
break;
case 7:
printf("程序已退出!\n");
exit(0);
default:
printf("请输入正确的操作编号!\n");
}
}
return 0;
}
```
以上代码实现了录入学生信息、直接插入排序、折半插入排序、冒泡排序、快速排序、简单选择排序、输入学生信息和退出等基本操作,并提供了一个简单的菜单操作界面。你可以根据需要进行修改和优化。
阅读全文