已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结构体与共用体【程序1】题目:编写input()和output()函数输入,输出5个学生的数据记录。(用结构体设计,学生记录中包括学号、姓名、四门课程成绩)程序源代码:#include #define N 5struct student char num6;char name8;int score4; stuN;void input(struct student stu);void print(struct student stu);void main()input(stu);print(stu);void input(struct student stu) int i,j;for(i=0;iN;i+) printf(nplease input %d of %dn,i+1,N);printf(num: );scanf(%s,stui.num);printf(name: );scanf(%s,);for(j=0;j3;j+) printf(score %d.,j+1);scanf(%d,&stui.scorej);printf(n);void print(struct student stu) int i,j;printf(nNo. Name Score1 Score2 Score3n);for(i=0;iN;i+) printf(%-5s%-9s,stui.num,);for(j=0;j3;j+)printf(%-8d,stui.scorej);printf(n);【程序2】建立100名学生的信息表,每个学生的数据包括学号、姓名、及一门课的成绩,要求从键盘输入这100名学生的信息,并按照每一行显示一名学生信息的格式将他们的信息显示出来。#include #define N 3 struct student int num; char name20; int score; ; void main() int i; struct student sN; /*定义结构体类型数组,长度100*/ for(i=0;iN;i+) printf(input number:); scanf(%d,&si.num); printf(input name:); scanf(%s,); printf(input score:); scanf(%d,&si.score); printf(Number: Name: score:n); for(i=0;iN;i+) printf(%-8d%-10s%dn,si.num,,si.score); 【程序3】题目:创建一个链表。程序源代码:/*creat a list*/#include stdlib.h#include #define N 3struct list int data;struct list *next;typedef struct list node;typedef node *link;void main() link ptr,head;int num,i;int j;printf(please input numbers=);scanf(%d,&j);ptr=(link)malloc(sizeof(node);head=ptr;printf(please enter numbers:);for(i=0;idata=num;ptr-next=(link) malloc(sizeof(node);if(i=j-1) ptr-next=NULL;elseptr=ptr-next;ptr=head;while(ptr!=NULL) printf(The value is =%dn,ptr-data);ptr=ptr-next;=【程序4】题目:反向输出一个链表。1.程序分析:2.程序源代码:/*reverse output a list*/#include stdlib.h#include struct list int data;struct list *next;typedef struct list node;typedef node *link;void main()link ptr,head,tail;int num,i;int j;printf(please input numbers=);scanf(%d,&j);tail=(link)malloc(sizeof(node);tail-next=NULL;ptr=tail;printf(nplease input data=);for(i=0;idata=num;head=(link)malloc(sizeof(node);head-next=ptr;ptr=head;ptr=ptr-next;while(ptr!=NULL) printf(The value is =%dn,ptr-data);ptr=ptr-next;【程序5】已有a,b两个链表,每个链表中的的结点包括学号、成绩。要求把两个链表合并,按学号升序排列#include#includetypedefstructstudentintnum;floatscore;structstudent*next;STU;STU*create() STU*p,*head=NULL,*tail=head;while (1)p=(STU*)malloc(sizeof(STU);scanf(%d%f,&p-num,&p-score);p-next=NULL;if(p-numnext=p;tail=p;returnhead;voidoutput(STU*p)while(p!=NULL)printf(%dt%.2fn,p-num,p-score);p=p-next;STU*link(STU*p1,STU*p2)STU*p,*head;if(p1-numnum)head=p=p1;p1=p1-next;elsehead=p=p2;p2=p2-next;while(p1!=NULL&p2!=NULL)if(p1-numnum)p-next=p1;p=p1;p1=p1-next;elsep-next=p2;p=p2;p2=p2-next;if(p1!=NULL)p-next=p1;elsep-next=p2;returnhead;intmain(intargc,char*argv)STU*a,*b,*c;printf(n请输入链表a的信息,学号小于零时结束输入:格式(学号成绩)n);a=create();printf(n请输入链表b的信息,学号小于零时结束输入:格式(学号成绩)n);b=create();printf(n链表a的信息为:n);output(a);printf(n链表b的信息为:n);output(b);c=link(a,b);printf(n合并后的链表信息为:n);output(c);return0;【程序6】13个人转成一圈,从第一个人开始报数,报到3的退出,问最后退出的人原来的序号。(用链表实现)#include #include #define LEN sizeof(struct student)struct studentint num;struct student *next;int main()int i;struct student *head,*p1,*p2;/p1指前,p2指后head=p1=p2=(struct student *)malloc(LEN);p2-num=1;for(i=2;inum=i;p2-next=p1;p2=p1;p1=(struct student *)malloc(LEN);p1-num=13;p1-next=head;p2-next=p1;/建立链表完成p2=p1;p1=head;while(p1-next!=p1)for(i=0;inext;p2=p2-next;printf(No.%2d has been deleted!n,p1-num);p2-next=p1-next;p1=p1-next;printf(nThe last one is No.%d.n,p1-num);return 1;【程序7】有两个链表a和b,设结点中包含学号、姓名。从a链表中删去与b链表中有相同学号的那些结点。#include#includetypedefstructstudentintnum;floatscore;structstudent*next;STU;STU*create()inti;STU*p,*head=NULL,*tail=head;while (1)p=(STU*)malloc(sizeof(STU);scanf(%d%f,&p-num,&p-score);p-next=NULL;if(p-numnext=p;tail=p;returnhead;voidoutput(STU*p)while(p!=NULL)printf(%dt%.2fn,p-num,p-score);p=p-next;STU*del(STU*a,STU*b)STU*head,*p1,*p2;p1=p2=head=a;/让p1、p2、head结点指向链表a的头部while(b!=NULL)p1=p2=head;/每次循环前让p1、p2始终指向删除后链表的头部while(p1!=NULL)if(b-num=p1-num)/学号相同,删除结点信息if(p1=head)/如果删除的是头结点,则头结点位置要后移head=p1-next;free(p1);p1=p2=head;else/如果删除的是中间结点p2-next=p1-next;free(p1);p1=p2-next;else/学号不同,则p1,p2指针依次后移p2=p1;p1=p1-next;b=b-next;returnhead;intmain(intargc,char*argv)STU*a,*b,*c;printf(n请输入链表a的信息,学号小于零时结束输入:格式(学号成绩)n);a=create();printf(n请输入链表b的信息,学号小于零时结束输入:格式(学号成绩)n);b=create();system(cls);printf(n链表a的信息为:n);output(a);printf(n链表b的信息为:n);output(b);c=del(a,b);printf(n删除后的链表信息为:n);output(c);return0;【程序8】建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。#include #include#define LEN sizeof(struct student) struct student char num6; char name8; char sex6; int age; struct student *next; stu10; void main() struct student *p,*pt,*head; int i,length,iage,flag=1; int find=0; /* 若找到待删除元素,find=1,否则find=0 */while(flag=1) printf(input length of list(10):); scanf(%d,&length); if(length10) flag=0; for(i=0;inext=p; pt=p; printf(NO:); scanf(%s,p-num); printf(name:); scanf(%s,p-name); printf(sex:); scanf(%s,p-sex); printf(age:); scanf(%d,&p-age); p-next=NULL; p=head; printf(n NO. name sex agen); while(p!=NULL) printf(%4s%8s%6s%6dn,p-num, p-name, p-sex, p-age); p=p-next; printf(input age:); scanf(%d,&iage); /* 输入待删除年龄 */pt=head; p=pt; if (pt-age=iage) /* 链头是待删除元素 */p=pt-next; head=pt=p; find=1; els
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于系统动力学的客运专线定价方法:模型构建与策略优化
- 2025年旅游线路开发合作协议合同
- 2025年虚拟主播服务合同协议
- 采购2025年服装批发合同协议合同
- 2025年绩效考核协议合同
- 2025年数字营销策划咨询合同协议合同
- 2025年工业机器人维护合同协议
- 2025年考研全程规划合同协议合同
- 2025年员工休假协议合同
- 2025年翻译服务合同协议
- 015《煤矿安全规程》修改条款学习辅导:第十五讲 电气
- 水电站消防安全培训课件
- 北京中医药大学《中医基础理论》期中考试试卷(含答案)
- 道路建筑材料知识培训内容课件
- 2025-2030中国中医诊所连锁化发展模式与投资可行性报告
- 光伏发电与储能一体化方案
- 跨境犯罪打击-洞察及研究
- 2026秋季中国东方航空股份有限公司综合管理部卫生保健岗位招聘考试模拟试题及答案解析
- 人防指挥所信息化建设方案
- 政务服务业务培训课件
- 全国大学生职业规划大赛《工业互联网技术》专业生涯发展展示【高职(专科)】
评论
0/150
提交评论