计算机某班有若干学生,每个学生的信息包括班级、学号、姓名、程序设计成绩、高数成绩、电路成绩,以及3门课总分。学生信息可用如下结构体定义: struct stud { char clas[20];//班级 double num; //学号 char name[10];//姓名 float program; //程序设计成绩 float math; //高数成绩 float circuit; //电路成绩 float sum; //3门总分 struct stud *next; }; (1)编程创建动态链表,由键盘输入学生的信息(输入已默认按3门总分降序排列),当班级为x表示输入结束; (2)当输入姓名:“张己”时,删除学籍系统中同名的学生信息。
时间: 2023-06-09 14:08:28 浏览: 163
1_lower7y7_定义一个包含学生信息(学号_成绩)的顺序表和链表(二选一)_姓名_使其具有如下功能_
5星 · 资源好评率100%
1. 首先,声明一个指向 stud 结构体的指针,命名为 head,并初始化为 NULL。这是链表的头部。
```
struct stud *head = NULL;
```
2. 定义一个临时的指向 stud 结构体的指针 p,用于输入学生信息并且将它们保存到链表中。同时,定义变量 clas、num、name、program、math、circuit 和 sum,用于存储从键盘输入的学生信息。
```
struct stud *p;
char clas[20], name[10];
double num;
float program, math, circuit, sum;
```
3. 使用 while 循环,不断地从键盘输入学生信息,直到输入的班级为 x,表示输入结束。
```
while (1) {
printf("请输入班级:");
scanf("%s", clas);
if (strcmp(clas, "x") == 0) {
break;
}
printf("请输入学号:");
scanf("%lf", &num);
printf("请输入姓名:");
scanf("%s", name);
printf("请输入程序设计成绩:");
scanf("%f", &program);
printf("请输入高数成绩:");
scanf("%f", &math);
printf("请输入电路成绩:");
scanf("%f", &circuit);
sum = program + math + ciruit;
// 创建新的节点并保存学生信息
p = (struct stud *) malloc(sizeof(struct stud));
strcpy(p->clas, clas);
p->num = num;
strcpy(p->name, name);
p->program = program;
p->math = math;
p->circuit = circuit;
p->sum = sum;
p->next = NULL;
// 插入节点到链表中
if (head == NULL) {
head = p;
} else {
struct stud *temp, *prev = NULL;
for (temp = head; temp != NULL && temp->sum > sum; prev = temp, temp = temp->next);
if (prev == NULL) {
// 新节点应该成为链表的第一个节点
p->next = head;
head = p;
} else {
// 新节点在链表中的中间位置
p->next = prev->next;
prev->next = p;
}
}
}
```
4. 当需要删除某个学生信息时,首先在链表中查找与该姓名相同的学生节点,并删除它。
```
void delete_stud_info(char *name)
{
if (head == NULL) {
printf("链表为空");
return ;
}
struct stud *temp, *prev = NULL;
for (temp = head; temp != NULL && strcmp(temp->name, name) != 0; prev = temp, temp = temp->next);
if (temp != NULL) {
if (prev == NULL) {
// 删除的节点是第一个节点
head = head->next;
} else {
// 删除的节点在链表中的中间位置
prev->next = temp->next;
}
free(temp);
}
}
```
5. 在主函数中,调用 delete_stud_info 函数来删除学生信息。
```
char target_name[] = "张己";
delete_stud_info(target_name);
```
阅读全文