一个链表问题包含了节点的 插入 删除 自定义函数的输出 有点问题 大家帮帮忙啊 3q了
1. 创建一个复杂数据(结构体)类型,该类型的变量能够存放一个学生的信息,包括:学号、姓名、性别以及三门课程的成绩(C程序设计、计算机科学导论和大学英语),要求性别用中文“男/女”表示。2. 新建链表存放以下三个学生的信息(链表的每一个节点存放一个学生的信息,各节点以学号递增的顺序排列):
0764181057 林婷婷 女 87 90 78
0764181058 刘俊伟 男 99 65 56
0764181060 卢京京 女 80 90 96
3. 列出平均分高于80分的学生姓名,学号和平均成绩,如:
林婷婷 0764181057 85.0
4. 向链表中插入一个学生,插入完成后链表保持学号递增顺序不变,该生信息为:
0764181059 戴国锋 男 81 92 89
5. 从链表中删除“计算机科学导论”课程成绩低于70分的学生。
6.编写一个遍历输出该链表全体数据的函数,并在新建、插入、删除等操作后调用以验证程序的正确性。
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student {
char num[15];
char name[20];
char sex[6];
float score1;
float score2;
float score3;
struct student*next;
};
int main() {
void print(struct student*head);
int n = 1;
struct student *head, *p1, *p2,*p0;// 1 1到2 应该是在for 里面有问题 因为我输入一组数的时候有结果,输入两组的时候
head = p1 = p2 = (struct student*) malloc(LEN);//就出现一个对话框了***。exe停止工作了
p1->next = NULL;
scanf("%s", p1->num);
scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
&p1->score3);
for (;;) {
if (n > 1)
p2->next = p1;
p2 = p1;
n++;
p1 = (struct student*) malloc(LEN);
scanf("%s", p1->num);
int n;
n = atoi(p1->num);
if (n == 0)
break;
scanf("%s %s %f %f %f", p1->name, p1->sex, &p1->score1, &p1->score2,
&p1->score3);
}
print(head);//(输出开始时的信息) 2 2到3貌似也有问题
p0=(struct student*) malloc(LEN);
p0->next=NULL;
printf("输入插入的学生信息\n");
scanf("%s %s %s %f %f %f",p0->num, p0->name, p0->sex, &p0->score1, &p0->score2,
&p0->score3);
p1=head;
for(;;p0=p0->next)
{if(p1->next!=NULL&&p1->num<p0->num&&p1->next->num>p0->num)
{p0->next=p1->next;
p1->next=p0;
break;}
if(p1->next==NULL&&p1->num<p0->num)
{ p0=p1->next;
p0->next=NULL;
break;}
if(head->num>p0->num)
{p0->next=head;
p0=head;
break;}
}
print(head);//输出插入后的信息 3 3到4也是
for(p2=head,p1=head->next;;p1=p1->next,p2=p2->next)
{if(head->score2<70)
head=head->next;
if(p1->score2<70&&p1->next!=NULL)
p2->next=p1->next;
if(p1->score2<70&&p1->next==NULL)
p2->next=NULL;
}
print(head);//(输出删除后的信息) 4
return 0;
}
void print(struct student*head)//(这个是书上看的 没问题)
{ struct student*p1;
p1 = head;
if (p1 != NULL)
do {
printf("%s %s %s %.1f %.1f %.1f\n", p1->num, p1->name, p1->sex,
p1->score1, p1->score2, p1->score3);
p1 = p1->next;
} while (p1 != NULL);
}