用c语言:键盘输入学习信息,学号为0作为结束标志,建立其对应的线性表并输出新数据,实现增,删,改,查的基本功能。用线性表顺序存储结果实现
时间: 2023-10-29 15:06:53 浏览: 133
以下是用C语言实现键盘输入学习信息,建立线性表并实现增删改查功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 线性表最大长度
typedef struct {
int id; // 学号
char name[20]; // 姓名
int score; // 成绩
} Student;
typedef struct {
Student data[MAX_SIZE]; // 存储学生信息的数组
int length; // 线性表长度
} SeqList;
// 初始化线性表
void initList(SeqList *list) {
list->length = 0;
}
// 增加元素
void addElement(SeqList *list, Student student) {
if (list->length == MAX_SIZE) {
printf("Error: the list is full\n");
return;
}
list->data[list->length++] = student;
}
// 删除元素
void deleteElement(SeqList *list, int id) {
int i, j;
for (i = 0; i < list->length; i++) {
if (list->data[i].id == id) {
for (j = i + 1; j < list->length; j++) {
list->data[j - 1] = list->data[j];
}
list->length--;
printf("Delete student with id %d successfully.\n", id);
return;
}
}
printf("Error: cannot find student with id %d\n", id);
}
// 修改元素
void modifyElement(SeqList *list, int id, Student newStudent) {
int i;
for (i = 0; i < list->length; i++) {
if (list->data[i].id == id) {
list->data[i] = newStudent;
printf("Modify student with id %d successfully.\n", id);
return;
}
}
printf("Error: cannot find student with id %d\n", id);
}
// 查找元素
void findElement(SeqList *list, int id) {
int i;
for (i = 0; i < list->length; i++) {
if (list->data[i].id == id) {
printf("Student with id %d:\n", id);
printf("Name: %s\n", list->data[i].name);
printf("Score: %d\n", list->data[i].score);
return;
}
}
printf("Error: cannot find student with id %d\n", id);
}
// 打印所有元素
void printList(SeqList *list) {
int i;
printf("All students:\n");
for (i = 0; i < list->length; i++) {
printf("ID: %d, Name: %s, Score: %d\n", list->data[i].id, list->data[i].name, list->data[i].score);
}
}
int main() {
SeqList list;
initList(&list);
Student student;
printf("Please input the student information (id, name, score): \n");
scanf("%d", &student.id);
while (student.id != 0) {
scanf("%s %d", student.name, &student.score);
addElement(&list, student);
printf("Add student with id %d successfully.\n", student.id);
printf("Please input the student information (id, name, score): \n");
scanf("%d", &student.id);
}
printList(&list);
int choice, id;
Student newStudent;
while (1) {
printf("Please choose the operation (1: add, 2: delete, 3: modify, 4: find, 5: print, 0: exit): ");
scanf("%d", &choice);
if (choice == 0) {
break;
}
switch (choice) {
case 1:
printf("Please input the student information (id, name, score): ");
scanf("%d %s %d", &newStudent.id, newStudent.name, &newStudent.score);
addElement(&list, newStudent);
break;
case 2:
printf("Please input the student id: ");
scanf("%d", &id);
deleteElement(&list, id);
break;
case 3:
printf("Please input the student id and new information (name, score): ");
scanf("%d %s %d", &id, newStudent.name, &newStudent.score);
modifyElement(&list, id, newStudent);
break;
case 4:
printf("Please input the student id: ");
scanf("%d", &id);
findElement(&list, id);
break;
case 5:
printList(&list);
break;
default:
printf("Error: invalid choice\n");
break;
}
}
return 0;
}
```
在上面的代码中,我们定义了一个包含学号、姓名和成绩的结构体 `Student`,并使用结构体数组 `data` 存储学生信息。使用 `SeqList` 结构体表示线性表,其中 `length` 记录线性表的长度。
在 `main` 函数中,我们首先通过键盘输入学生信息,并调用 `addElement` 函数将其添加到线性表中。然后,我们进入一个循环,让用户选择需要进行的操作,包括增加元素、删除元素、修改元素、查找元素和打印所有元素。最后,当用户选择退出时,程序结束。
在代码实现中,我们使用了 `switch` 语句来根据用户选择调用不同的函数实现不同的功能。例如,当用户选择增加元素时,我们调用 `addElement` 函数将输入的学生信息添加到线性表中。当用户选择删除元素时,我们调用 `deleteElement` 函数根据学号查找要删除的元素并删除它。当用户选择修改元素时,我们调用 `modifyElement` 函数根据学号查找要修改的元素并修改它的姓名和成绩。当用户选择查找元素时,我们调用 `findElement` 函数根据学号查找要查找的元素并输出它的信息。当用户选择打印所有元素时,我们调用 `printList` 函数输出所有学生信息。
注意,在代码实现中,我们使用 `scanf` 函数从键盘读取用户输入,使用 `printf` 函数输出结果。此外,我们还需要注意一些边界条件,例如线性表已满时不能再添加元素,删除一个不存在的元素时需要输出错误信息等等。
阅读全文