用c语言编写一个程序,要求是1.用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。 2.具体要求:建立一个N个学生的信息登记表,每个学生的信息包括:学号,姓名,2 门课程的成绩(DataStructure,C,)和总分(SUM)。 3.程序运行时显示一个简单的菜单,例如: ****(1):信息输入(INPUT)*************************** ****(2):总分统计(COUNT)************************** ****(3):按DataStructure项排序(SortDataStructure)****** ****(4):按C项排序(SortC)************************** ****(5):按SUM项排序(SortSUM)******************** ****(6):输入C成绩,查找该成绩位置******************** ****请选择输入(1-6): *************************** 4.根据菜单项从键盘输入数字(1-6)选择执行不同的功能,三个排序应采用不同的排序方法(直接插入排序、希尔排序、快速排序),在菜单中显式说明,并在执行对应的算法后,输出排序结果。 5.输入数字6调用折半查找函数查找某一C成绩的记录并输出。 参考结构类型定义: #define N 4 typedef struct { int no; char name[20]; int DataStructure; int C; int SUM; }student; typedef structure{ student STU[N]; int length; }STUDENT;
时间: 2023-07-01 16:20:54 浏览: 146
以下是一个简单的学生信息管理程序的代码实现,具体要求已经在题目中给出:
```c
#include <stdio.h>
#include <string.h>
#define N 4
typedef struct {
int no;
char name[20];
int DataStructure;
int C;
int SUM;
} student;
typedef struct {
student STU[N];
int length;
} STUDENT;
void input(STUDENT *stu) {
printf("请输入学生信息:\n");
for (int i = 0; i < N; i++) {
printf("请输入第%d个学生的学号,姓名,DataStructure成绩和C成绩:\n", i + 1);
scanf("%d %s %d %d", &(stu -> STU[i].no), stu -> STU[i].name, &(stu -> STU[i].DataStructure), &(stu -> STU[i].C));
stu -> STU[i].SUM = stu -> STU[i].DataStructure + stu -> STU[i].C;
}
stu -> length = N;
}
void print(STUDENT *stu) {
printf("学号\t姓名\tDataStructure\tC\tSUM\n");
for (int i = 0; i < stu -> length; i++) {
printf("%d\t%s\t%d\t\t%d\t%d\n", stu -> STU[i].no, stu -> STU[i].name, stu -> STU[i].DataStructure, stu -> STU[i].C, stu -> STU[i].SUM);
}
}
void sortDataStructure(STUDENT *stu) {
int i, j;
student temp;
for (i = 1; i < stu -> length; i++) {
temp = stu -> STU[i];
for (j = i; j > 0 && stu -> STU[j - 1].DataStructure > temp.DataStructure; j--) {
stu -> STU[j] = stu -> STU[j - 1];
}
stu -> STU[j] = temp;
}
}
void sortC(STUDENT *stu) {
int i, j;
student temp;
for (i = 1; i < stu -> length; i++) {
temp = stu -> STU[i];
for (j = i; j > 0 && stu -> STU[j - 1].C > temp.C; j--) {
stu -> STU[j] = stu -> STU[j - 1];
}
stu -> STU[j] = temp;
}
}
void sortSUM(STUDENT *stu) {
int i, j;
student temp;
for (i = 1; i < stu -> length; i++) {
temp = stu -> STU[i];
for (j = i; j > 0 && stu -> STU[j - 1].SUM > temp.SUM; j--) {
stu -> STU[j] = stu -> STU[j - 1];
}
stu -> STU[j] = temp;
}
}
int binarySearch(STUDENT *stu, int target) {
int left = 0, right = stu -> length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (stu -> STU[mid].C == target) {
return mid;
} else if (stu -> STU[mid].C < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
STUDENT stu;
int choice = 0;
do {
printf("****(1):信息输入(INPUT)***************************\n");
printf("****(2):总分统计(COUNT)**************************\n");
printf("****(3):按DataStructure项排序(SortDataStructure)******\n");
printf("****(4):按C项排序(SortC)**************************\n");
printf("****(5):按SUM项排序(SortSUM)********************\n");
printf("****(6):输入C成绩,查找该成绩位置********************\n");
printf("****请选择输入(1-6): ***************************\n");
scanf("%d", &choice);
switch (choice) {
case 1:
input(&stu);
break;
case 2:
print(&stu);
break;
case 3:
sortDataStructure(&stu);
printf("按DataStructure项排序后的结果为:\n");
print(&stu);
break;
case 4:
sortC(&stu);
printf("按C项排序后的结果为:\n");
print(&stu);
break;
case 5:
sortSUM(&stu);
printf("按SUM项排序后的结果为:\n");
print(&stu);
break;
case 6:
int target;
printf("请输入要查找的C成绩:\n");
scanf("%d", &target);
int index = binarySearch(&stu, target);
if (index == -1) {
printf("没有找到C成绩为%d的学生\n", target);
} else {
printf("C成绩为%d的学生位置为:%d\n", target, index + 1);
}
break;
default:
printf("输入有误,请重新输入\n");
break;
}
} while (choice != 0);
return 0;
}
```
注意,上述代码中只是简单地实现了三种排序方法,如果需要使用更高效的排序算法,可以自行替换。
阅读全文