结构体实验-参考答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验九结构体1.有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学号、姓名、3门课成绩),计算出每个学生的总成绩,并将总成绩最高的学生信息(包括学号、姓名、3门课成绩、总成绩)输出。#includestdio.hstructSTU{charnumber[7];charname[10];intscore[3];inttotal;}student[5];intmain(){inti,j,n;printf(请输入5个学生的学号、姓名、3门课成绩:\n);for(i=0;i5;i++){student[i].total=0;scanf(%s%s,student[i].number,student[i].name);for(j=0;j3;j++){scanf(%d,&student[i].score[j]);student[i].total+=student[i].score[j];}}printf(\n--------------------成绩表-----------------------\n);printf(学号姓名数学语文英语总分\n);for(i=0;i5;i++){printf(%8s%8s,student[i].number,student[i].name);for(j=0;j3;j++)printf(%8d,student[i].score[j]);printf(%8d\n,student[i].total);}printf(\n----------------成绩最高的学生信息----------------\n);printf(学号姓名数学语文英语总分\n);n=0;for(i=1;i5;i++)if(student[i].totalstudent[n].total)n=i;printf(%8s%8s,student[n].number,student[n].name);for(j=0;j3;j++)printf(%8d,student[n].score[j]);printf(%8d\n,student[n].total);return0;}2.某单位进行先进个人选举,有5位候选人:zhang、wang、li、zhao、liu,20人参与投票。编写一个统计每位候选人得票数的程序,输出每位候选人的得票数以及得票数最高的候选人姓名。#includestdio.h#includestring.hstructPIAO{charname[10];inttotal;}people[5]={zhang,0,wang,0,li,0,zhao,0,liu,0};intmain(){inti,j,n=0;charxuan[10];printf(请输入20个选票(zhang,wang,li,zhao,liu):\n);for(i=0;i20;i++){scanf(%s,xuan);for(j=0;j5;j++){if(strcmp(xuan,people[j].name)==0)people[j].total++;}}printf(\n-------候选人得票统计表--------\n);printf(姓名得票数\n);for(i=0;i5;i++)printf(%8s%8d\n,people[i].name,people[i].total);for(i=1;i5;i++)if(people[i].totalpeople[n].total)n=i;printf(得票数最高的候选人是:%s\n,people[n].name);return0;}3.将如表21.1所示的学生信息建立成一个按学号升序有序的链表,每个结点包括:学号、姓名、性别、年龄。统计链表中年龄小于20的学生个数并将对应的学生信息(包括学号、姓名、性别、年龄)输出。表21.1学生信息表学号姓名性别年龄305001ZhangM18305002WangF20305004LiF19305005ZhaoM21#includestdio.h#includemalloc.htypedefstructSTU{charno[7];charname[10];charsex[7];intage;structSTU*next;}NODE;NODE*create(intnum);NODE*create(intnum)//创建包含num个节点的链表{NODE*head=NULL,*p,*tail;/*定义当前指针、头指针和尾指针*/inti;for(i=0;inum;i++){p=(NODE*)malloc(sizeof(NODE));/*创建第一个结点*/printf(请输入第%d个学生的学号、姓名、性别、年龄:\n,i+1);scanf(%s%s%s%d,p-no,&p-name,p-sex,&p-age);p-next=NULL;if(i==0)head=tail=p;else{tail-next=p;tail=p;}}returnhead;}intmain(){intn=0;NODE*head,*p;head=create(4);p=head;while(p!=NULL)/*判断是否是尾结点*/{if(p-age20){printf(%s\t%s\t%s\t%d\n,p-no,p-name,p-sex,p-age);n++;}p=p-next;/*p指向下一个结点*/}printf(年龄小于20的学生共有%d个。\n,n);return0;}4.在第3题建立的链表中插入表21.2所示的结点,要求生成的新链表按照学号升序排列,并将生成的新链表输出。表21.2结点信息学号姓名性别年龄305003LiuMale19#includestdio.h#includemalloc.h#includestring.hNODE*create(intnum);voidprint(NODE*head);NODE*insert(NODE*head,NODE*s);typedefstructSTU{charno[7];charname[10];charsex[7];intage;structSTU*next;}NODE;NODE*create(intnum)//创建包含num个节点的链表{NODE*head=NULL,*p,*tail;/*定义当前指针、头指针和尾指针*/inti;for(i=0;inum;i++){p=(NODE*)malloc(sizeof(NODE));/*创建第一个结点*/printf(请输入第%d个学生的学号、姓名、性别、年龄:\n,i+1);scanf(%s%s%s%d,p-no,p-name,p-sex,&p-age);p-next=NULL;if(i==0)head=tail=p;else{tail-next=p;tail=p;}}returnhead;}voidprint(NODE*head){NODE*p;p=head;/*p指向表头*/if(head==NULL)printf(Listisempty!\n);printf(学号\t姓名\t性别\t年龄\n);while(p!=NULL)/*判断是否是尾结点*/{printf(%s\t%s\t%s\t%d\n,p-no,p-name,p-sex,p-age);p=p-next;/*p指向下一个结点*/}}NODE*insert(NODE*head,NODE*s){NODE*p=head,*p1=head;if(p==NULL){head=s;s-next=NULL;}/*链表为空的情况*/else{/*查找插入位置*/while(strcmp(p-no,s-no)0&&p-next!=NULL){p1=p;p=p-next;}if(strcmp(p-no,s-no)=0){if(p==head)head=s;/*插入结点作为表头的情况*/elsep1-next=s;/*插入结点在链表中间的情况*/s-next=p;}else{/*插入结点作为表尾的情况*/p-next=s;s-next=NULL;}}returnhead;}intmain(){NODE*head,*s;head=create(4);s=(NODE*)malloc(sizeof(NODE));/*创建插入的结点*/printf(请输入要插入学生的学号、姓名、性别、年龄:\n);scanf(%s%s%s%d,s-no,s-name,s-sex,&s-age);s-next=NULL;head=insert(head,s);print(head);return0;}5.在第4题建立的链表中删除姓名为“Wang”的结点,并将生成的新链表输出。#includestdio.h#includemalloc.h#includestring.hNODE*create(intnum);voidprint(NODE*head);NODE*insert(NODE*head,NODE*s);NODE*del(NODE*head,char*del_name);typedefstructSTU{charno[7];charname[10];charsex[7];intage;structSTU*next;}NODE;NODE*create(intnum)//创建包含num个节点的链表{NODE*head=NULL,*p,*tail;/*定义当前指针、头指针和尾指针*/inti;for(i=0;inum;i++){p=(NODE*)malloc(sizeof(NODE));/*创建第一个结点*/printf(请输入第%d个学生的学号、姓名、性别、年龄:\n,i+1);scanf(%s%s%s%d,p-no,p-name,p-sex,&p-age);p-next=NULL;if(i==0)head=tail=p;else{tail-next=p;tail=p;}}returnhead;}voidprint(NODE*head){NODE*p;p=head;/*p指向表头*/if(head==NULL)printf(Listisempty!\n);printf(学号\t姓名\t性别\t年龄\n);while(p!=NULL)/*判断是否是尾结点*/{printf(%s\t%s\t%s\t%d\n,p-no,p-name,p-sex,p-age);p=p-next;/*p指向下一个结点*/}}NODE*insert(NODE*head,NODE*s){NODE*p=head,*p1=head;if(p==NULL){head=s;s-next=NULL;}/*链表为空的情况*/else{/*查找插入位置*/while(strcmp(p-no,s-no)0&&p-next!=NULL){p1=p;p=p-next;}if(strcmp(p-no,s-no)=0){if(p==head)head=s;/*插入结点作为表头的情况*/elsep1-next=s;/*插入结点在链表中间的情况*/s-next=p;}else{/*插入结点作为表尾的情况*/p-next=s;s-next=NULL;}}returnhead;}NODE*del(NODE*head,char*del_name){NODE*p,*p1;if(head==NULL)printf(链表为空,不能进行删除结点操作!);else{p=head;while(strcmp(p-name,del_name)!=0&&p-next!=NULL){/*查找删除位置*/p1=p;p=p-next;}if(strcmp(p-name,del_name)==0){if(p==head)head=p-next;/*删除表头结

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功