高级语言综合课程设计:用C语言 编程实现学生信息管理系统设计: 某班级共有50名学生,本学期共有5门课程,分别是高等数学、大学物理、计算机基础、C语言程序设计和马克思主义原理。请定义结构体存储学生的姓名、性别、学号和5门课程的期末考试成绩。 要求: 1)学号格式为220101~220150,有序生成;姓名和性别请在主程序中给定。 2)请利用随机数生成5门课的期末考试成绩;各门课的成绩最大值不能超过100分,最小值高于40分。 3)查找功能1:用二分(折半)查找算法实现根据学号查找该学生的各个科目成绩,输出该学生的姓名、学号、各科目成绩以及平均成绩。 4)查找功能2:用线性查找算法实现查找各个科目大于90分和小于60分的成绩,并输出相应的学生的姓名、学号和该科目成绩。 5)排序功能:根据总成绩对学生成绩进行从高到低排序,并依次输出姓名、学号、各科目成绩以及总成绩。请指明用什么排序方法。
时间: 2024-04-02 13:36:14 浏览: 90
好的,我已经记录下了您的问题。针对您的问题,我可以为您进行解答。
这个学生信息管理系统设计需要用到结构体来存储学生的姓名、性别、学号和5门课程的期末考试成绩。具体实现过程如下:
1. 定义结构体Student,包括姓名、性别、学号和5门课程的期末考试成绩。
```
struct Student {
char name[20];
char gender;
int id;
int score[5];
};
```
2. 生成50名学生的学号,并使用随机数生成每个学生的5门课程的期末考试成绩。
```
for (int i = 0; i < 50; i++) {
students[i].id = 220101 + i;
for (int j = 0; j < 5; j++) {
students[i].score[j] = rand() % 61 + 40; // 随机数生成40-100之间的整数
}
}
```
3. 实现二分查找算法和线性查找算法,分别用于查找学生的成绩和查找各个科目大于90分和小于60分的成绩。
```
// 二分查找算法
int binarySearch(Student students[], int n, int id) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (students[mid].id == id) {
return mid;
} else if (students[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 没有找到
}
// 线性查找算法
void linearSearch(Student students[], int n, int minScore, int maxScore) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < 5; j++) {
if (students[i].score[j] >= minScore && students[i].score[j] <= maxScore) {
printf("姓名:%s 学号:%d 科目%d成绩:%d\n", students[i].name, students[i].id, j + 1, students[i].score[j]);
}
}
}
}
```
4. 实现按照总成绩从高到低排序的功能,并输出学生的姓名、学号、各科目成绩和总成绩。这里可以使用快速排序算法实现。
```
// 快速排序算法
void quickSort(Student students[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
int pivot = students[left].score[0] + students[left].score[1] + students[left].score[2] + students[left].score[3] + students[left].score[4];
while (i < j) {
while (i < j && (students[j].score[0] + students[j].score[1] + students[j].score[2] + students[j].score[3] + students[j].score[4]) <= pivot) {
j--;
}
students[i] = students[j];
while (i < j && (students[i].score[0] + students[i].score[1] + students[i].score[2] + students[i].score[3] + students[i].score[4]) >= pivot) {
i++;
}
students[j] = students[i];
}
students[i].score[0] = pivot - students[i].score[0] - students[i].score[1] - students[i].score[2] - students[i].score[3] - students[i].score[4];
quickSort(students, left, i - 1);
quickSort(students, i + 1, right);
}
// 按总成绩从高到低排序并输出
void sortByTotalScore(Student students[], int n) {
quickSort(students, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("姓名:%s 学号:%d 科目1成绩:%d 科目2成绩:%d 科目3成绩:%d 科目4成绩:%d 科目5成绩:%d 总成绩:%d\n",
students[i].name, students[i].id, students[i].score[0], students[i].score[1], students[i].score[2], students[i].score[3], students[i].score[4],
students[i].score[0] + students[i].score[1] + students[i].score[2] + students[i].score[3] + students[i].score[4]);
}
}
```
以上就是学生信息管理系统设计的具体实现过程。
阅读全文