有一学生成绩表,包括学号、姓名、3门课程成绩。已知该成绩表按学号升序排序。请编程实现,添加一个新的学生信息,且使成绩表仍按学号有序;若待添加的学号与已有学号重复,则输出错误信息,拒绝添加。
首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
最后一行输入一个待添加的学生信息,包括学号、姓名和3门课成绩
若待添加的学号与已有学号重复,则输出只有一行“error!”;否则,输出n+1行,即添加后的成绩单信息。
在这里给出一组输入。例如:
3
202016040201 Zhangling 78 95 55
202016040202 Wangli 87 99 88
202016040204 Fangfang 68 76 75
202016040203 Lilei 68 79 82
在这里给出相应的输出。例如:
202016040201 Zhangling 78 95 55
202016040202 Wangli 87 99 88
202016040203 Lilei 68 79 82
202016040204 Fangfang 68 76 75
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
struct STU{
char num[13];
char name[20];
int a,b,c;
struct STU *next;
};
struct STU *head,*tail;
void input(int n)
{
int x;
struct STU *p;
p=(struct STU *)malloc(sizeof(struct STU));
tail=p;
for(x=0;x<n;x++)
{
scanf("%s %s %d %d %d",p->num,p->name,&p->a,&p->b,&p->c);
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
p=(struct STU *)malloc(sizeof(struct STU));
}
tail->next=NULL;
}
void addandput(struct STU adt)
{
struct STU *p,*p1=head,*p2=head;
int flag=0;
p=(struct STU *)malloc(sizeof(struct STU));
strcpy(p->num,adt.num);
strcpy(p->name,adt.name);
p->a=adt.a,p->b=adt.b,p->c=adt.c,p->next=NULL;
while(p1!=NULL)
{
if(strcmp(p->num,p1->num)==0)
{
flag=1;
break;
}
p1=p1->next;
}
if(flag==0)
{
p1=head;
while(p1!=NULL&&(strcmp(p->num,p1->num)>0))
{
p2=p1;
p1=p1->next;
}
if(p1==NULL)//此时p1指向空,p2指向链表末尾
p2->next=p;
else if(strcmp(p->num,p1->num)<0)
{
if(head==p1)//如果p->num小于head->num
{
head=p;
p->next=p1;
}
else//插在中间
{
p2->next=p;
p->next=p1;
}
}
}
if(flag==0)
for(p=head;p!=NULL;p=p->next)
printf("%s %s %d %d %d\n",p->num,p->name,p->a,p->b,p->c);
else
printf("error!");
}
int main()
{
struct STU *p,adt;
int n;
scanf("%d",&n);
head=NULL,tail=NULL;
input(n);
scanf("%s %s %d %d %d",adt.num,adt.name,&adt.a,&adt.b,&adt.c);
addandput(adt);
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务