c语言用结构体和指针实现学生信息输入和查找
时间: 2023-05-02 17:02:58 浏览: 73
这个问题不是很清楚,如果你想要实现学生信息的输入和查找功能,可以考虑使用结构体和指针来实现。结构体可以定义学生信息的各项属性,例如姓名、学号、年龄、成绩等,而指针可以帮助你快速访问和处理这些信息。实现输入和查找功能的具体方法则需要具体问题具体分析。
相关问题
用C语言结构体编写程序实现二叉排序树查找
下面是一个用C语言结构体编写的二叉排序树查找程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉排序树的结构体
struct BSTNode {
int data;
struct BSTNode *left;
struct BSTNode *right;
};
// 插入节点
struct BSTNode* insert(struct BSTNode *node, int data) {
// 如果当前节点为空,创建一个新节点
if (node == NULL) {
struct BSTNode *temp = (struct BSTNode*) malloc(sizeof(struct BSTNode));
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
// 如果当前节点不为空,比较插入值和当前节点的值
if (data <= node->data) {
node->left = insert(node->left, data);
} else {
node->right = insert(node->right, data);
}
return node;
}
// 查找节点
struct BSTNode* search(struct BSTNode *node, int data) {
// 如果当前节点为空或者当前节点的值就是要查找的值,返回当前节点
if (node == NULL || node->data == data) {
return node;
}
// 如果要查找的值小于当前节点的值,递归查找左子树
if (data < node->data) {
return search(node->left, data);
}
// 如果要查找的值大于当前节点的值,递归查找右子树
return search(node->right, data);
}
int main() {
struct BSTNode *root = NULL;
int n, i, x;
printf("请输入节点个数:");
scanf("%d", &n);
printf("请输入节点值:");
for (i = 0; i < n; ++i) {
scanf("%d", &x);
root = insert(root, x);
}
printf("请输入要查找的值:");
scanf("%d", &x);
struct BSTNode *result = search(root, x);
if (result == NULL) {
printf("未找到该节点\n");
} else {
printf("找到该节点,值为 %d\n", result->data);
}
return 0;
}
```
程序中定义了一个`BSTNode`结构体,其中包含了节点的值、左子树指针和右子树指针。`insert`函数实现了插入节点的功能,`search`函数实现了查找节点的功能。在`main`函数中,首先输入节点个数和节点值,然后输入要查找的值,最后调用`search`函数查找节点并输出结果。
用c语言写用结构体和指针实现一个学生信息输入和查找操作的程序,要求: 1)定义一个学生信息结构体,包括学号、姓名、班级、年级等信息。 2)编写一个输入函数,传入参数为一个学生结构体数组的指针、当前存放位置、数组总长度等参数,要求接收输入的学生信息存入对应位置的结构体钟; 3)编写一个查找函数,传入参数为一个学生结构体数组的指针、要查找的学生姓名,要求跟进输入的姓名查找盖学生的其它信息,返回结构体位序; 4)编写一个主函数,先建立学生信息的结构体数组,然后用该数组调用以上函数,实现函数功能的调用,并将返回信息输出到命令行窗口。
以下是使用结构体和指针实现学生信息输入和查找操作的程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
struct Student {
int id;
char name[20];
int grade;
int class;
};
int input(struct Student *stu, int pos, int len) {
if (pos >= len) {
printf("Sorry, the array is full.\n");
return pos;
}
printf("Please enter the student's ID: ");
scanf("%d", &(stu + pos)->id);
printf("Please enter the student's name: ");
scanf("%s", &(stu + pos)->name);
printf("Please enter the student's grade: ");
scanf("%d", &(stu + pos)->grade);
printf("Please enter the student's class: ");
scanf("%d", &(stu + pos)->class);
return pos + 1;
}
int search(struct Student *stu, char *name, int len) {
for (int i = 0; i < len; i++) {
if (strcmp((stu + i)->name, name) == 0) {
printf("ID: %d Name: %s Grade: %d Class: %d\n", (stu + i)->id, (stu + i)->name, (stu + i)->grade, (stu + i)->class);
return i;
}
}
printf("Sorry, the student is not found.\n");
return -1;
}
int main() {
struct Student stu[MAX_SIZE];
int n = 0, pos;
char name[20];
printf("Please enter 'i' to input a student information, 's' to search a student information, and 'q' to quit.\n");
while (1) {
char c;
printf("> ");
scanf(" %c", &c);
if (c == 'i') {
pos = input(stu, n, MAX_SIZE);
if (pos > n) {
n = pos;
}
} else if (c == 's') {
printf("Please enter the student's name: ");
scanf("%s", name);
search(stu, name, n);
} else if (c == 'q') {
break;
}
}
return 0;
}
```
程序中,首先定义了一个结构体 `Student`,其中包含了学生的信息,包括学号、姓名、年级、班级。接着定义了 `input` 和 `search` 两个函数,分别用于输入学生信息和查找学生信息。在 `main` 函数中,我们首先建立一个学生信息的结构体数组,然后进入循环,等待用户输入操作指令。如果用户输入了 'i',则进入到输入学生信息的分支,调用 `input` 函数;如果用户输入了 's',则进入到查找学生信息的分支,调用 `search` 函数;如果用户输入了 'q',则退出程序。注意,在输入操作指令时,需要加上空格,否则会出现意外的错误。
程序中的 `input` 函数接收一个学生结构体数组的指针、当前存放位置、数组总长度等参数,用于接收用户输入的学生信息,并将学生信息存入对应位置的结构体中。在函数中,我们首先检查当前存放位置是否超出了数组的长度,如果超出了,则提示数组已满,否则接收用户输入的学生信息,存入对应位置的结构体中,并返回下一个存放位置。
程序中的 `search` 函数接收一个学生结构体数组的指针、要查找的学生姓名、数组总长度等参数,用于跟进输入的姓名查找该学生的其它信息,并返回结构体位序。在函数中,我们使用 `strcmp` 函数逐一比较学生姓名,如果找到了匹配的学生,则输出该学生的信息,并返回该学生在数组中的位置;如果遍历整个数组都没有找到匹配的学生,则提示该学生未找到,并返回 -1。
在 `main` 函数中,我们使用一个变量 `n` 记录当前数组中已经存储的学生信息数量,同时也记录了数组中下一个可存储学生信息的位置。在输入学生信息时,我们将 `n` 作为当前存放位置传递给 `input` 函数,并将返回值赋值给 `pos` 变量,如果返回值大于 `n`,则说明新的学生信息已经存储到了数组中,因此需要更新 `n` 的值。在查找学生信息时,我们将 `n` 作为数组总长度传递给 `search` 函数。
最后,我们在程序开始时打印了操作指令的提示信息,等待用户输入。