键盘输入学生信息(包括学号和成绩),学号为0作为结束标志,建立其对应的线性表并输出数据,实现增、删、改、查的基本功能。C语言
时间: 2024-02-15 09:05:36 浏览: 77
以下是一个简单的C语言程序,实现了您要求的学生信息的输入、建立线性表、输出、增、删、改、查等基本功能。具体实现方式可能有所不同,但基本思路是相似的。
```c
#include <stdio.h>
#include <stdlib.h>
struct student {
int id;
float score;
struct student *next;
};
typedef struct student Student;
typedef struct student *StudentList;
// 创建一个空的链表
StudentList createList() {
StudentList head = (StudentList) malloc(sizeof(Student));
head->next = NULL;
return head;
}
// 在链表的末尾插入一个新的学生信息
void insert(StudentList list, int id, float score) {
StudentList p = list;
while (p->next != NULL) {
p = p->next;
}
StudentList newStudent = (StudentList) malloc(sizeof(Student));
newStudent->id = id;
newStudent->score = score;
newStudent->next = NULL;
p->next = newStudent;
}
// 根据学号查找学生信息
StudentList find(StudentList list, int id) {
StudentList p = list->next;
while (p != NULL && p->id != id) {
p = p->next;
}
return p;
}
// 删除指定学号的学生信息
void delete(StudentList list, int id) {
StudentList p = list;
while (p->next != NULL && p->next->id != id) {
p = p->next;
}
if (p->next == NULL) {
printf("没有找到学号为%d的学生信息\n", id);
return;
}
StudentList q = p->next;
p->next = q->next;
free(q);
}
// 修改指定学号的学生信息
void update(StudentList list, int id, float score) {
StudentList p = find(list, id);
if (p == NULL) {
printf("没有找到学号为%d的学生信息\n", id);
return;
}
p->score = score;
}
// 输出所有学生信息
void print(StudentList list) {
StudentList p = list->next;
while (p != NULL) {
printf("学号:%d\t 成绩:%.2f\n", p->id, p->score);
p = p->next;
}
}
int main() {
StudentList list = createList();
int id;
float score;
printf("请输入学生信息,学号为0时结束输入:\n");
while (1) {
printf("请输入学号:");
scanf("%d", &id);
if (id == 0) {
break;
}
printf("请输入成绩:");
scanf("%f", &score);
insert(list, id, score);
}
printf("\n学生信息如下:\n");
print(list);
int choice;
while (1) {
printf("\n请选择操作:\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 查找学生信息\n");
printf("5. 输出所有学生信息\n");
printf("6. 退出程序\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("\n请输入新的学生信息:\n");
printf("请输入学号:");
scanf("%d", &id);
printf("请输入成绩:");
scanf("%f", &score);
insert(list, id, score);
break;
case 2:
printf("\n请输入要删除的学生学号:");
scanf("%d", &id);
delete(list, id);
break;
case 3:
printf("\n请输入要修改的学生学号和新的成绩:");
scanf("%d%f", &id, &score);
update(list, id, score);
break;
case 4:
printf("\n请输入要查找的学生学号:");
scanf("%d", &id);
StudentList p = find(list, id);
if (p == NULL) {
printf("没有找到学号为%d的学生信息\n", id);
} else {
printf("学号:%d\t 成绩:%.2f\n", p->id, p->score);
}
break;
case 5:
printf("\n所有学生信息如下:\n");
print(list);
break;
case 6:
printf("\n退出程序\n");
exit(0);
default:
printf("\n输入的操作编号无效,请重新输入\n");
break;
}
}
return 0;
}
```
注意:在实际开发中,需要考虑更多的错误处理和边界情况,以确保程序的正确性和健壮性。
阅读全文