用c语言编写程序完成学生成绩记录的查询。 要求:按学号进行顺序查找;按学号排序后对学号进行折半查找; 随机输入以学号为关键字的学生信息并构建二叉排序树,对学号进行二叉排序树查找。
时间: 2024-03-16 07:43:57 浏览: 112
好的,我可以为您提供一些参考代码,供您参考。
首先,让我们看一下按学号进行顺序查找的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
struct Student {
int id;
char name[20];
float score;
};
void sortById(struct Student arr[], int n);
void searchById(struct Student arr[], int n, int id);
void binarySearchById(struct Student arr[], int n, int id);
void insertToBST(struct Student* root, struct Student* node);
void searchInBST(struct Student* root, int id);
int main() {
struct Student arr[MAX_SIZE];
int n;
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入学生信息:\n");
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名、成绩:", i + 1);
scanf("%d %s %f", &arr[i].id, arr[i].name, &arr[i].score);
}
// 按学号排序
sortById(arr, n);
// 按学号进行顺序查找
int id;
printf("请输入要查询的学生学号:");
scanf("%d", &id);
searchById(arr, n, id);
// 按学号排序后进行折半查找
printf("请输入要查询的学生学号:");
scanf("%d", &id);
binarySearchById(arr, n, id);
// 构建二叉排序树
struct Student* root = NULL;
for (int i = 0; i < n; i++) {
struct Student* node = (struct Student*)malloc(sizeof(struct Student));
node->id = arr[i].id;
node->score = arr[i].score;
strcpy(node->name, arr[i].name);
insertToBST(root, node);
}
// 在二叉排序树中查找
printf("请输入要查询的学生学号:");
scanf("%d", &id);
searchInBST(root, id);
return 0;
}
void sortById(struct Student arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].id > arr[j + 1].id) {
struct Student temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void searchById(struct Student arr[], int n, int id) {
for (int i = 0; i < n; i++) {
if (arr[i].id == id) {
printf("学号:%d,姓名:%s,成绩:%f\n", arr[i].id, arr[i].name, arr[i].score);
return;
}
}
printf("没有找到对应学生的信息!\n");
}
void binarySearchById(struct Student arr[], int n, int id) {
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid].id == id) {
printf("学号:%d,姓名:%s,成绩:%f\n", arr[mid].id, arr[mid].name, arr[mid].score);
return;
} else if (arr[mid].id > id) {
high = mid - 1;
} else {
low = mid + 1;
}
}
printf("没有找到对应学生的信息!\n");
}
void insertToBST(struct Student* root, struct Student* node) {
if (root == NULL) {
root = node;
return;
}
if (node->id < root->id) {
if (root->left == NULL) {
root->left = node;
} else {
insertToBST(root->left, node);
}
} else {
if (root->right == NULL) {
root->right = node;
} else {
insertToBST(root->right, node);
}
}
}
void searchInBST(struct Student* root, int id) {
if (root == NULL) {
printf("没有找到对应学生的信息!\n");
return;
}
if (root->id == id) {
printf("学号:%d,姓名:%s,成绩:%f\n", root->id, root->name, root->score);
} else if (root->id > id) {
searchInBST(root->left, id);
} else {
searchInBST(root->right, id);
}
}
```
以上代码实现了按学号进行顺序查找、按学号排序后进行折半查找以及构建二叉排序树并在其中进行查找。其中,sortById 函数用于按学号排序,searchById 函数用于按学号进行顺序查找,binarySearchById 函数用于按学号排序后进行折半查找,insertToBST 函数用于向二叉排序树中插入节点,searchInBST 函数用于在二叉排序树中进行查找。
需要注意的是,以上代码仅供参考,实际应用中还需要进行错误处理等完善工作。
阅读全文