第八部分结构和联合类型

上传人:壹****1 文档编号:568426250 上传时间:2024-07-24 格式:PPT 页数:109 大小:964KB
返回 下载 相关 举报
第八部分结构和联合类型_第1页
第1页 / 共109页
第八部分结构和联合类型_第2页
第2页 / 共109页
第八部分结构和联合类型_第3页
第3页 / 共109页
第八部分结构和联合类型_第4页
第4页 / 共109页
第八部分结构和联合类型_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《第八部分结构和联合类型》由会员分享,可在线阅读,更多相关《第八部分结构和联合类型(109页珍藏版)》请在金锄头文库上搜索。

1、第八章第八章第八章第八章 结构和联合类型结构和联合类型结构和联合类型结构和联合类型武汉大学计算机学院武汉大学计算机学院武汉大学计算机学院武汉大学计算机学院主讲:谭成予主讲:谭成予教教 材材: C程序设计导论程序设计导论帮腹明稍讶闲渭匀趴随监盘建辕生耪睹脉凳漫铭贼忻竞纺滋振怖肩涨拔贼第八部分结构和联合类型第八部分结构和联合类型结构类型定义与引用结构类型和指针结构数组链表联合类型本讲重点本讲重点本讲重点本讲重点浸静舵倔漆旨舟剑荫绦辗效芽虑忱您帛加蘑佣圆膘洗巳啼恋粳药方撅机隙第八部分结构和联合类型第八部分结构和联合类型&结构类型是一种结构类型是一种构造数据类型构造数据类型&用途:把用途:把不同类型不

2、同类型的数据组合成一个整体的数据组合成一个整体-自定义自定义数据类型数据类型struct 结构名结构名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;成员类型可以是基本型或构造型(数组、指针或其他结构类型)struct是关键字,不能省略合法标识符可省:无名结构类型结构类型结构类型臃九小酣亦好屋墅梯趾芝燃画瞧膜座并爸包虏傣群肉寝滁寺跑诊丧翅荔骑第八部分结构和联合类型第八部分结构和联合类型例structstudentlongintorder;charname20;charsex;shortintage;intscore10;charaddr30;结构类型定义描

3、述结构的组织形式,不分配内存结构类型定义的作用域nameordersexagescoreaddr4字节2字节20字节1字节20字节30字节.结构类型结构类型斯兼嫂真烽顶晾速迄挥杰氯潮拯娱系疥抢筐啊丙惰卖澜鞠低牵氓恤赏饵仪第八部分结构和联合类型第八部分结构和联合类型例structid_card charname30;charsex;charnationality20;structdateintyear,month,day;birthday;char*p_addr;structdatesigned_date;longnumber;char*office;同一结构类型各成员不能同名,不同结构类型成员

4、可以同名结构类型可以嵌套定义结构类型结构类型柞宿吐搞约哪骡执污扰删煽挥畔吩薛磋涡风掐喝偶墨仟帐淘咎梧寄敬彦哪第八部分结构和联合类型第八部分结构和联合类型例structwrong charname30;intcount;structwronga; 结构类型不能递归定义结构类型结构类型潦汇账阿糙炊瘟胁稚歧呀梯砖缝苛对影学洋吠玲面接喳瓢号堕女蛙田捍蠕第八部分结构和联合类型第八部分结构和联合类型一般形式:一般形式:struct 结构名结构名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;struct 结构名结构名 变量名表列变量名表列;结构变量的定义结构变量的定义

5、先定义先定义结构类型结构类型,再定义,再定义结构变量结构变量林劫腻晶憨蒋宣凰贩苟酬凯摄匠读傅茶魂缚嘛胁掸聊缄焦盛酌蛇烦朱腊增第八部分结构和联合类型第八部分结构和联合类型例structstudentlongintorder;charname20;charsex;shortintage;intscore10;charaddr30;structstudentstu1,stu2;/*struct coord表示屏幕上一个点的坐标表示屏幕上一个点的坐标*/例structcoordfloatx;floaty;structcoordfirst,second;结构变量的定义结构变量的定义罚胳浑酿滞氰贰痕嗓嗣蛹

6、曲欢敬师贮款乳罪戴坟呼弄员卞贩荷襟梁魔辆孵第八部分结构和联合类型第八部分结构和联合类型例#defineSTUDENTstructstudentSTUDENTlongintorder;charname20;charsex;shortintage;intscore10;charaddr30;STUDENTstu1,stu2;结构变量的定义结构变量的定义内棵课设躁督扁啦奖儿忆铁苗姐睛敏缆绝逃显成纪海焰铱秃捣膘尤虞跌狂第八部分结构和联合类型第八部分结构和联合类型struct 结构名结构名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .变量名表列变量名表列;一般形式:

7、定义结构类型的定义结构类型的同时同时定义定义结构变量结构变量结构变量的定义结构变量的定义荧厂市厚掀栗删斯坑仰顺灌窜恰具凛欢房还碉半棺宙彬你莉件膏忧眨愿默第八部分结构和联合类型第八部分结构和联合类型例structstudentlongintorder;charname20;charsex;shortintage;intscore10;charaddr30;stu1,stu2;例structcoordfloatx;floaty;first,second;/*struct coord表示屏幕上一个点的坐标表示屏幕上一个点的坐标*/结构变量的定义结构变量的定义蓟余轿码扣疑扛颂再靴即桶秸奔石慨蓖洱蛋滥寅

8、右抠垒颓驮陈农佩疥涟档第八部分结构和联合类型第八部分结构和联合类型struct 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .变量名表列变量名表列;用用无名结构类型无名结构类型直接定义直接定义变量变量只能一次只能一次一般形式:一般形式:直接定义结构类型变量直接定义结构类型变量结构变量的定义结构变量的定义株惹得撰馈怎洲棠儒棉怪技把买吉早滑炔第彤徒辆尘潭陶辣勿优戮口垣芯第八部分结构和联合类型第八部分结构和联合类型例structlongintorder;charname20;charsex;shortintage;intscore10;charaddr30;stu

9、1,stu2;例structfloatx;floaty;first,second;/*struct coord表示屏幕上一个点的坐标表示屏幕上一个点的坐标*/结构变量的定义结构变量的定义镐厉测芥竿访嫉襄蹬聘礼册炸燎雄蔗朽歼废匹楚节栋慰遮搔润厦输座锅兆第八部分结构和联合类型第八部分结构和联合类型说明说明结构类型与结构类型变量概念不同结构类型与结构类型变量概念不同类型类型:不分配内存;不分配内存; 变量变量:分配内存分配内存类型类型:不能赋值、存取、运算不能赋值、存取、运算; 变量变量:可以可以结构类型结构类型可嵌套可嵌套结构类型成员名与程序中变量名可相同,不会混淆结构类型成员名与程序中变量名可相

10、同,不会混淆结构类型及变量的结构类型及变量的作用域与生存期作用域与生存期结构变量的定义结构变量的定义朝瑞币湖桌争储搞隙剁随兹苟挽脯观铆各蓑繁既非曾菏粹嗅榨闪栋入纤向第八部分结构和联合类型第八部分结构和联合类型例structdateintmonth;intday;intyear;structstudentintnum;charname20;structdatebirthday;stu;numnamebirthdaymonthdayyear结构变量的定义结构变量的定义判泡袁泡行渡氖蔫棘鲁最铲峪巴淖携查策森理楚公搪掖付爽洛青临锡揣捣第八部分结构和联合类型第八部分结构和联合类型例structstude

11、ntintnum;charname20;structdateintmonth;intday;intyear;birthday;stu;numnamebirthdaymonthdayyear结构变量的定义结构变量的定义挞炬狂挡剔逮甥寡察夯脏丝菲梗救挞摇泪撰蚜诚理荣碧痉越像剑渐讫全屑第八部分结构和联合类型第八部分结构和联合类型结构类型变量的引用结构类型变量的引用引用规则引用规则 结构类型变量结构类型变量不能整体引用不能整体引用,只能引用变量成员只能引用变量成员 引用方式:结构类型变量名引用方式:结构类型变量名.成员名成员名可以将一个结构类型变量赋值给另一个结构类型变量可以将一个结构类型变量赋值给另

12、一个结构类型变量结构类型嵌套时结构类型嵌套时逐级引用逐级引用淳窿霞傍剥凉曝沤只桃荚耸敏我呵狂煽悔没薯唆竖饶险杉蜒凸普伞闽磐售第八部分结构和联合类型第八部分结构和联合类型例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;成员成员(分量分量)运算符运算符优先级优先级: 1结合性结合性:从左向右从左向右结构类型变量结构类型变量不能整体引用不能整体引用,只能引用变量成员只能引

13、用变量成员引用方式:引用方式: 结构类型变量名结构类型变量名.成员名成员名结构类型变量的引用结构类型变量的引用斋帝朴批著非后套介尸那羹拭均篷妄尸蚁氯灶铁简束嗡件绅骡弦迎殖坟垃第八部分结构和联合类型第八部分结构和联合类型例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;printf(“%d,%s,%c,%d,%f,%sn”,stu1);( )stu1=101,“WanLin”,M,19,87.5,“DaLian”;( )结构类型变量的引用结构类型变量的引用不能整体引用不能整体引用反彤岸带翌

14、勒陈芥撒日阁狞搅壤裸涩懦释粉联鱼踪坏劣械呛竹钥髓线砷掳第八部分结构和联合类型第八部分结构和联合类型例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;if(stu1=stu2).( )结构类型变量的引用不能整体引用不能整体引用都棒笋琵醚恃芋爽鸳鸥茨碘剂仙虚芦诡漫冈漾寿纤放理侧驼勾彪稻橇倡躲第八部分结构和联合类型第八部分结构和联合类型结构类型嵌套时结构类型嵌套时逐级引用逐级引用例structstudentintnum;charname20;charsex;intage;floatscore;

15、charaddr30;stu1,stu2;stu2=stu1;()结构类型变量的引用结构类型变量的引用闭酣泪悦缸茄氢镊拯井宾谣相阴中艺俩儡戳磕文竭纫甘朽廓廷水硕绘眩楞第八部分结构和联合类型第八部分结构和联合类型例structstudentintnum;charname20;structdateintmonth;intday;intyear;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;结构类型嵌套时结构类型嵌套时逐级引用逐级引用结构类型变量的引用结构类型变量的引用蹋承惑献渠哭频拦氯郴抽星拦蒸鞭佩周重菱调

16、绎喷桑铺啸呵窄萨膏常睁坯第八部分结构和联合类型第八部分结构和联合类型/*L8-1.C: 计算某个同学计算某个同学5门课程成绩的平均分。门课程成绩的平均分。*/#include int main(void) struct studentchar *name; /*姓名姓名*/long order; /*学号学号*/int score5; /*成绩成绩*/float average; /*平均分平均分*/who;int sum=0,n;printf(“input name,order and 5 scoresn”);scanf(“%s%ld”,who.name,&who.order);char n

17、ame20;蓉榷槛嗅婶讶渝熏吵狱乞磁五姿乡淮攻舰卧轰炉玉拉缩睹锌氢辩露轮樟郁第八部分结构和联合类型第八部分结构和联合类型for(n=0;n5;n+)scanf(“%d”,&who.scoren);who.average=0.0;for(n=0;n5;n+)sum+=who.scoren;who.average=(float)sum/5; printf(“nname=%storder=%ldn”,who.name.who.order); printf(“average=%fn”,who.average); return 0;推研去嘘蒙抬蛋疡挎蹋刨福咙装刃纶硒长气荔男软钻迎讨把饶漠奉曹厕饵第八部分

18、结构和联合类型第八部分结构和联合类型/*L8-2.C: 输入矩形左上角和右下角坐标,计算该矩形长和宽及面积。输入矩形左上角和右下角坐标,计算该矩形长和宽及面积。*/#include #include int main(void) float length,width,area; struct coordfloat x,y; ; struct rectangle struct coord topleft,bottomrt;mybox; printf(“enter the top left x,y coordinate:n”); scanf(“%f%f”,&mybox.topleft.x,&myb

19、ox.topleft.y); printf(“enter the bottom right x,y coordinate:n”); scanf(“%f%f”,&mybox.bottomrt.x,&mybox.bottomrt.y); length=fabs(double)(mybox.bottomrt.x-bybox.topleft.x); width=fabs(double)(mybox.topleft.y-mybox.bottomrt.y); area=length*width; printf(“nlength=%ftwidth=%fn”,length,width); printf(“ar

20、ea=%fn”,area); return 0; 专汲踌凰金磨着辟瞅娄镍澳历益谊佯杰氧尼馋涸烽姨堕咸挪帆楼厨苇照窃第八部分结构和联合类型第八部分结构和联合类型struct 结构类型名结构类型名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;struct 结构类型名结构类型名 结构类型变量结构类型变量=初始数据初始数据;形式一:形式一:结构变量的初始化结构变量的初始化溶佛宽驹毡萌赘周钵既怔扔自乓翅檄湖闺诊穆肮壳奋蔚猴尿蓖辙稗秧猴鹿第八部分结构和联合类型第八部分结构和联合类型例structstudentintnum;charname20;charsex;int

21、age;charaddr30;structstudentstu1=112,“WangLin”,M,19,“200BeijingRoad”;结构变量的初始化结构变量的初始化吝锁猴虚喊栏功夏宋场凯巷埃捐乾作毁见捷耕赶佃棠睡愉剿杏沤荫辗娄樊第八部分结构和联合类型第八部分结构和联合类型例structstudentcharname20;longorder;intscore5;floataverage;structstudentwho=“WangLin”,031112,92,91,89,87,94,0.0;结构变量的初始化结构变量的初始化肥州皖饱含萧祝窜降殷嫌佃病聪厅寞件腔坤困嘶封无碱图臃方据徊晴淘浇第八

22、部分结构和联合类型第八部分结构和联合类型例structcoordfloatx,y;structrectanglestructcoordtopleft;structcoordbottomrt;structrectanglemybox=1.8,8.3,12.4,1.29;结构变量的初始化结构变量的初始化熔啤溜讣徐沸舅扒撕稳彻症生椎逻疆阵超尘况迟僚打火凡彩削沽收鞠引旬第八部分结构和联合类型第八部分结构和联合类型struct 结构类型名结构类型名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .结构类型变量结构类型变量=初始数据初始数据;形式二:形式二:结构变量的初始

23、化结构变量的初始化棵二鞍说汽类拼矫欣焊饿搓必霞走嘲协帮麻藩到姬埠踌嘉左拼澄耗杖颗柜第八部分结构和联合类型第八部分结构和联合类型例structstudentintnum;charname20;charsex;intage;charaddr30;stu1=112,“WangLin”,M,19,“200BeijingRoad”;初值表中初值的个数初值表中初值的个数成员名成员名结构类型变量名结构类型变量名.成员名成员名使用结构类型指针变量引用成员形式指向运算符优先级: 1结合方向:从左向右例intn;int*p=&n;*p=10;n=10结构类型和指针结构类型和指针粹祟痪塘昏倪李抹蜜坞巳瘸揉标酿滨怕迷

24、裙肇娶垣废跳溪屹扇轴澄纲击咽第八部分结构和联合类型第八部分结构和联合类型intmain(void)structstudentlongintnum;charname20;charsex;floatscore;stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,LiLin);p-sex=M;p-score=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p-score);return0;例例8.3 指向结构类型的指针变量指向结构类型的指针变量挖单禁露吮粪

25、男艾知着灼韩快颅怖坚肺咀具穷邵仗讣纷篓刹郧两舰视美独第八部分结构和联合类型第八部分结构和联合类型structstudentintnum;charname20;charsex;intage;stu3=10101,LiLin,M,18,10102,ZhangFun,M,19,10104,WangMin,F,20;intmain(void)structstudent*p;for(p=stu;pnum,p-name,p-sex,p-age);return0;例指向结构类型数组的指针numnamesexagestu0pstu1stu2p+1话左硅岿宙禹缉捏粹巨准看震旺眩砸磊州郎浮筏溶梳削政供渣咙坞酌笔殆

26、第八部分结构和联合类型第八部分结构和联合类型/*L8-3.C:分析下面程序的运行结果*/#includeintmain(void)structintx;inty;a2=1,2,3,4,*p=a;printf(“%d,”,+p-x);printf(%dn”,(+p)-x);return0;pa0a1p123422,3结构类型和指针结构类型和指针新裤刁骡铝蛮惕鸥岔梆项仁俘于溜足者芯哗惜旁戎奈骸虹降凉二旺漠榜很第八部分结构和联合类型第八部分结构和联合类型结构类型定义与引用结构类型和指针结构数组链表联合类型本讲重点本讲重点本讲重点本讲重点迁蔼美庚永矮湖赃名东仟寸侥痘扰简晌哺贸鲸嚷止凡矗埔济侥嘉趾为恩鞠

27、第八部分结构和联合类型第八部分结构和联合类型形式一:structstudentintnum;charname20;charsex;intage;structstudentstu2;numnamesexagenumnamesexagestu0stu125B结构数组的定义结构数组的定义三种形式:三种形式:俱挨盏蛀傍挤弗遭舔踞蔫监捻抢戚侧箕讽枚菠厦沸睁厢鳖镰米促靠怒哨颗第八部分结构和联合类型第八部分结构和联合类型形式二:structstudentintnum;charname20;charsex;intage;stu2;numnamesexagenumnamesexagestu0stu125B结构数

28、组的定义结构数组的定义已茫瞪渭陌厦渺萤若庶双伍抱孤唉郊仑倾邪沥搅绥扫性粗在食设武爪概凰第八部分结构和联合类型第八部分结构和联合类型形式三:structintnum;charname20;charsex;intage;stu2;numnamesexagenumnamesexagestu0stu125B结构数组的定义结构数组的定义严增副惶淋事痢碟横故靛裙诛蜘赌养卜原鄂靳凰顶呕界皮醒恶极肄帜赋户第八部分结构和联合类型第八部分结构和联合类型分行初始化:structstudentintnum;charname20;charsex;intage;structstudentstu=100,“WangLin”

29、,M,20,101,“LiGang”,M,19,110,“LiuYan”,F,19;全部初始化时维数可省全部初始化时维数可省结构数组初始化结构数组初始化箱怀场下郊夺谱踢拇默凭洗侦貉怔泰订诡赚收核恶僳萍栈英税奈诈杭秃琅第八部分结构和联合类型第八部分结构和联合类型顺序初始化:structstudentintnum;charname20;charsex;intage;structstudentstu=100,“WangLin”,M,20,101,“LiGang”,M,19,110,“LiuYan”,F,19;结构数组初始化结构数组初始化千耐紧四弃耀调木果七炽馈情郁颐玄标卉川芝刃落慌舰曲标绥简恃诱办牟

30、第八部分结构和联合类型第八部分结构和联合类型例structintnum;charname20;charsex;intage;stu=,;例structstudentintnum;charname20;charsex;intage;stu=,;结构数组初始化结构数组初始化凋裁审赴仔仓贯坛硫祸迹冀虑自盖膘昂巧近裤腕习绥塞嗅串秘椰畦佣咱肿第八部分结构和联合类型第八部分结构和联合类型结构数组引用结构数组引用引用方式:引用方式: 结构数组名结构数组名下标下标.成员名成员名structstudentintnum;charname20;charsex;intage;str3;stu1.age+;strcpy

31、(stu0.name,”ZhaoDa”);霉讫春姨秘渡巩蠕稀窝货记克抑朝鞋缘噬遁言羞肾潦由侗留沂毁职寝澜苛第八部分结构和联合类型第八部分结构和联合类型例例8.4 统计后选人选票统计后选人选票structpersoncharname20;intcount;leader3=“Li”,0,“Zhang”,0,”Wang“,0;intmain(void)inti,j;charleader_name20;for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.cou

32、nt+;for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);return0;namecountLiZhangWang000逸执耀肝芯赢旗唾滨兼给蜂邑蜡跳辣猪杉肿痒腮奖它必区存嫁幅路焦甩象第八部分结构和联合类型第八部分结构和联合类型应用举例应用举例碑秒赃痘签枚瘩漂寒酞铲殴纷欢梁遭姿工叹歹茎细缨惊腾选饭俩鹊壤均芽第八部分结构和联合类型第八部分结构和联合类型例例8.5 8.5 编程,输入编程,输入1010个学生的姓名和数学、英语和语文三门功个学生的姓名和数学、英语和语文三门功课的成绩,计算每个学生的平均成绩,并输出学生姓名和平均课的成绩,

33、计算每个学生的平均成绩,并输出学生姓名和平均成绩。成绩。#include #define N 30struct studentchar name20; /*学生姓名学生姓名*/float math; /*数学成绩数学成绩*/float eng; /*英语成绩英语成绩*/float cuit; /*语文成绩语文成绩*/float aver; /*平均成绩平均成绩*/;凿风短墒才倒取滨祁情堰医赦袖棺乖端狐霞垃晦树坯教干腆芒狈洋赐肾赶第八部分结构和联合类型第八部分结构和联合类型int main( void) struct student sN;int i;for(i=0;iN;i+)printf(“

34、请输入第请输入第%d学生的数据学生的数据n”,i+1); printf(“姓名:姓名:”);gets(si.name);printf(“数学、英语、语文成绩:数学、英语、语文成绩:”);scanf(“%f,%f,%f ”,&si.math,&si.eng,&si.cuit); si.aver=(si.math+si.eng+si.cuit)/3.0;printf(“姓名姓名 平均成绩平均成绩n”);for(i=0;iN;i+)printf(“%s%6.1fn”,si.name,si.aver); return 0;蹲串挺垂捞卤柞箱韭捻衣伯溃戴儿门虏矽胁童际垄企辊称椿琅褥柠豌粘程第八部分结构和联

35、合类型第八部分结构和联合类型例例8.6 8.6 输输入入N N个个整整数数,记记录录输输入入的的数数和和序序号号,按按从从小小到到大大的的顺顺序序排排列列(如如果果两两个个整整数数相相同同,按按输输入入的的先先后后次次序序排排列列)。输输出出排序以后的每个整数和它原来的序号。排序以后的每个整数和它原来的序号。#include #define N 10struct dataint no;int num;int main(void )struct data xN,temp;int i,j;/*输入输入10个整数个整数*/printf(“输入输入10个整数:个整数:”);for(i=0;iN;i+)

36、scanf(“%d”,&xi.num);xi.no=i+1;专添凤员陕蒙鹰且系虚谐爪汽榴粒腑健蓖渡坦铭圣圆蕴敬凿坷申齿旱昆藤第八部分结构和联合类型第八部分结构和联合类型int main( void) struct student sN;int i;for(i=0;iN;i+)printf(“请输入第请输入第%d学生的数据学生的数据n”,i+1); printf(“姓名:姓名:”);gets(si.name);printf(“数学、英语、语文成绩:数学、英语、语文成绩:”);scanf(“%f,%f,%f ”,&si.math,&si.eng,&si.cuit); si.aver=(si.mat

37、h+si.eng+si.cuit)/3.0;printf(“姓名姓名 平均成绩平均成绩n”);for(i=0;i=s,则第,则第k个人出列,转(个人出列,转(5),否则转(),否则转(4) (4) k更新为下一个小孩编号更新为下一个小孩编号 klinkk.next, 转(转(2) (5)输出第)输出第k个小孩编号个小孩编号linkk.ino (6)linkk.ino0表示已经出列表示已经出列 (7)已经出列人数加)已经出列人数加1count (8) 如果如果count等于总人数等于总人数n,则转(,则转(9) ,否则转(,否则转(2) (9)算法结束)算法结束约瑟夫问题约瑟夫问题违蘑虏暖兜誊古

38、做粕栗眺和炸芒膊敌唤的阵蛀珊洼娃街奋除游锐悉撑逃袋第八部分结构和联合类型第八部分结构和联合类型#include #define N 100 /*程序能够处理的人数上限程序能够处理的人数上限*/int main()struct child int ino,next;linkN+1; int I,n_child,which,com_out,k,count;/*输入已知数据:小孩实际人数、初始报数小孩编号、出列的编号输入已知数据:小孩实际人数、初始报数小孩编号、出列的编号*/ scanf(“%d%d%d”,&n_child,&which,&come_out);if(n_childN) printf(

39、“too many to holdn”);else /*初始化队列初始化队列*/ for(I=1;I=come_out) break;k=linkk.next;printf(“%dt”,linkk.ino);/*输出出队小孩编号输出出队小孩编号*/linkk.ino=0;/*第第k个小孩出队个小孩出队*/count+; /*出队人数加出队人数加1*/if(count%10=0)printf(“n”); printf(“bye!n”); return 0;至牧苞腺肯敢男极昌陨陵邦奸镰续蔼粥损炙伎墙瘪山荤灸忧骏匠结备霓鲜第八部分结构和联合类型第八部分结构和联合类型例例8.8 编程实现两个复数的乘法

40、运算。编程实现两个复数的乘法运算。分析:分析:一个复数由实部和虚部组成,可以用含有两个浮点数类型的成员的结构类型一个复数由实部和虚部组成,可以用含有两个浮点数类型的成员的结构类型来表示:来表示:struct complex float re; /*实部实部*/ float im; /*虚部虚部*/ ; struct complex x,y; x*y的结果的实部为的结果的实部为x.re*y.re-x.im*y.im x*y的结果的虚部为的结果的虚部为x.re*y.im +x.im*y.re卢骑兴顿首椰童服冕紊壁迢轿暮困续呢啃褪征讣晚返虏氓晤用礼擂每蒸焚第八部分结构和联合类型第八部分结构和联合类型

41、#include struct complex float re; float im;int main( void) struct complex x, y, z; printf(“请输入第请输入第1个复数个复数n”);printf(“实部:实部:”);scanf(“%f”,&x.re);printf(“虚部虚部”);scanf(“%f”,&x.im);printf(“请输入第请输入第2个复数个复数n”);printf(“实部:实部:”);scanf(“%f”,&y.re);printf(“虚部虚部”);scanf(“%f”,&y.im);z.re=x.re*y.re - x.im*y.im;

42、z.im=x.re*y.im + x.im*y.re;printf(“两个复数相乘,结果:两个复数相乘,结果:”);if (z.im0)printf(“%8.2f%8.2fin”,z.re,z.im);else printf(“%8.2f+%8.2fin”,z.re,z.im);return 0; 硒券吾攻勿哥音态笨下箭碑芬唱召捉钞焙羌漓锈菠掇仔漳悔达魂油椎钳疮第八部分结构和联合类型第八部分结构和联合类型例例8.9 编程计算当前时间的下一秒的时间。编程计算当前时间的下一秒的时间。分析:分析:时间由时、分、秒构成,采用一个结构类型来表示时间:时间由时、分、秒构成,采用一个结构类型来表示时间:st

43、ruct time int hour; /*时时*/ int minutes; /*分分*/ int second; /*秒秒*/;音射咽溺渣炮浴紫耪吨济腹夜楷疾皋趋饭肮讼延汰秽音盟摔仔严伺易财零第八部分结构和联合类型第八部分结构和联合类型#include struct time int hour; int minutes; int second;int main(void ) struct time now,ntime; printf(“请输入当前时间,时间格式:时:分:秒请输入当前时间,时间格式:时:分:秒n”); scanf(“%d:%d:%d”,&now.hour,&now.minut

44、es,&now.second); ntime=now; ntime.second+; if (ntime.second=60) ntime.second=0; ntime.minutes+; if (ntime.minutes=60) ntime.minutes=0; ntime.hour+; if (ntime.hour=24) ntime.hour=0; printf(“下一秒时间:下一秒时间:%d:%d:%dn”,ntime.hour, ntime.minutes, ntime.second);return 0;昔剥唁幕疫涕失殖啃沈谋师翅芹垃了逮酒黍茶涨房效奄肋氛沃肛果援吊益第八部分结构

45、和联合类型第八部分结构和联合类型结构类型定义与引用结构类型和指针结构数组链表联合类型本讲重点本讲重点本讲重点本讲重点鹅罐裳龙表停痘精赋念流面碑料惕湃匪敞唁虏遏峙那绽严幢立痈嘉任锄够第八部分结构和联合类型第八部分结构和联合类型引用自身的结构引用自身的结构例如,例如, struct tnodechar word20;int count;struct tnode*left;struct tnode*right;结构成员:指向自身所属的结结构成员:指向自身所属的结构类型的对象构类型的对象常用于构造各种数据结构:队列、链表、树、图等。常用于构造各种数据结构:队列、链表、树、图等。购蔬酥乓硫诈卓耿引告阵擞

46、详垛嘱嗓攀秤腊责缔呆涩润条化谁辛乾喻筐埔第八部分结构和联合类型第八部分结构和联合类型链接方式存接方式存储的的线性表性表简称称为链表(表(Linked List),是常,是常见的数据结构。见的数据结构。链表的具体存表的具体存储表示表示为: 用一用一组任意的存任意的存储单元来存放元来存放线性表的性表的结点(点(这组存存储单元既可以是元既可以是连续的,也可以是不的,也可以是不连续的)的) 链表中表中结点的点的逻辑次序和物理次序不一定相同。次序和物理次序不一定相同。为了能正确表示了能正确表示结点点间的的逻辑关系,在存关系,在存储每个每个结点点值的同的同时,还必必须存存储指示其后指示其后继结点的地址(或

47、位置)信息点的地址(或位置)信息(称(称为指指针(pointer)或)或链(link))什么是链表?什么是链表?辊圃恒肉擦然坞赃芳抓韧狡涉只积禄匙舒匹伞毁沉叛请傅酮已蚤飘孕卫括第八部分结构和联合类型第八部分结构和联合类型datanext data域域-存放结点值的数据域存放结点值的数据域next域域-存放结点的直接后继的地址(位置)的指针域存放结点的直接后继的地址(位置)的指针域(链域)(链域)例如:例如:struct node int data; struct node *next;链表的结点结构链表的结点结构吵靳嘿扁滤菏粉突亡讶朝褥思囚现邯惰旁记甲绕氖副拾混孰肃淫圃蝴碍怎第八部分结构和联合

48、类型第八部分结构和联合类型单链表:单链表:每个每个结点只有一个点只有一个链域的域的链表表。NULLheadhead:链表的头指针:链表的头指针链表分类链表分类涌凡蛋抄数危傀蝇动钵沽雷鼠啡惮国服链狡圣蹿馏昔恐弘劫涣言于墓纵籽第八部分结构和联合类型第八部分结构和联合类型headhead循环链表循环链表链表分类链表分类繁簧渤志枪锈杀切扇驱蕴课淤骤盗铺泌氦远唱蚜肥冶黄骤劫碰揍想盘沟陡第八部分结构和联合类型第八部分结构和联合类型双向链表:双向链表:每个每个结点有点有两个两个链域的域的链表表。headNULLheadNULL链表分类链表分类晚雅胚翔谩周杂央蜜读宪署鄂间悠彩弱爹炳百柏春砍陕箱蚊霓为叠皋晶要第

49、八部分结构和联合类型第八部分结构和联合类型NULLhead123链表中结点都在程序中定义,不是临时开辟的,链表中结点都在程序中定义,不是临时开辟的,用完后用完后不能释放不能释放,并且,链表中可以创建的,并且,链表中可以创建的结点数有限制结点数有限制。称。称为为“静态链表静态链表”静态链表静态链表昭啊眶托仍讲徘蔓胡瞻赦喳单膝蚊锅挞俭份瞩追吸甲棋殴咳点路铅伊斥投第八部分结构和联合类型第八部分结构和联合类型#include #include struct nodeint data;struct node *next;int main()struct node a,b,c,*head;*p;a.dat

50、a=1;b.data=2;c.data=3;head=&a;a.next=&b;b.next=&c;c.next=NULL;p=head;doprintf(“%dt”,p-data);p=p-next;while(p!=NULL);return 0;寺袱哉绕枷墩蝴射贾信胞兆扔韩塑盂耳托止屡而亥紊马讹掇狸规鳞僚枷外第八部分结构和联合类型第八部分结构和联合类型建立链表建立链表遍历链表遍历链表删除链表中的结点删除链表中的结点插入结点插入结点 以单链表为例进行说明。以单链表为例进行说明。对链表的操作对链表的操作计醚匙馅祝放争收莽男诸稀屁滑污谢挠述肠甥玛联魔嫁澜遥范何韧帧贿衙第八部分结构和联合类型第八部

51、分结构和联合类型结点类型:结点类型: struct child char name20;struct child *next; *new,*head,*tail;headnewNULL先进先出链表先进先出链表(1)头指针置空头指针置空head=NULL;(2)创建新结点创建新结点new=(struct child*)malloc(sizeof(struct child);new-next=NULL; (3)新结点连入链表新结点连入链表 if(head=NULL) head=new; tail=new; else tail-next=new;重复(重复(2)、()、(3)步直到链表创建完成。)步

52、直到链表创建完成。建立链表建立链表(尾插法建表)尾插法建表)扔靠腑庭城龚唆驯呈逐碌概獭擦雪尺缸赖箔牵倡掐女庇细捡朋钙浸鹊睬涪第八部分结构和联合类型第八部分结构和联合类型建立链表建立链表(尾插法建表)尾插法建表)#include #include struct nodeint data;struct node *next;struct node * creatrightlink-_1()struct node *head,*new,*tail; int n;head=NULL; scanf(“%d”,&n);while(n!=-1)new=(struct node *)malloc(sizeof

53、(struct node);new-data=n;new-next=NULL;if(head=NULL)head=new;elsetail-next=new;tail=new;scanf(“%d”,&n); return (head);故曰挨颤吱祝贼械咆钞酞在北养抽簿搞喻立返跃钡壁八仰婿泄爆募癸翻页第八部分结构和联合类型第八部分结构和联合类型建立链表建立链表(尾插法建表)尾插法建表)#include #include struct nodeint data;struct node *next;int creatrightlink_2(struct node *phead)struct node

54、 *new,*tail; int n,k=0;*phead=NULL; scanf(“%d”,&n);while(n!=-1)new=(struct node *)malloc(sizeof(struct node);new-data=n;new-next=NULL;if(*phead=NULL)*phead=new;elsetail-next=new;tail=new;scanf(“%d”,&n); k+; return (k);椭荡撩谨忽卫爵待残绊恃恒蓖椅船峦缉处陇刚第示拨喉翅翟檀炊既尔鸟协第八部分结构和联合类型第八部分结构和联合类型(1)头指针置空头指针置空head=NULL;(2)创建

55、新结点创建新结点new=(struct child*)malloc(sizeof(struct child); (3)新结点连入链表新结点连入链表 new-next=head; head=new;重复(重复(2)、()、(3)步直到链表创建完成。)步直到链表创建完成。headnewNULLhead后进先出链表后进先出链表建立链表建立链表(头插法建表)头插法建表)个移绘氯烙辈库孟污烫完臣罕价齿熟支于扶窟咽容法出资惯彰仁胸氮溜介第八部分结构和联合类型第八部分结构和联合类型建立链表建立链表(头插法建表)头插法建表)#include #include struct nodeint data;struc

56、t node *next;struct node * creatleftlink_1()struct node *head,*new; int n;head=NULL; scanf(“%d”,&n);while(n!=-1)new=(struct node *)malloc(sizeof(struct node);new-data=n;new-next=head;head=new;scanf(“%d”,&n); return (head);良焙围膜皇衰样庶弗郎昨为尊亭夜不幸诣炳雹丢汉纽棵纬翁旅狄砒或嘉盯第八部分结构和联合类型第八部分结构和联合类型建立链表建立链表(头插法建表)头插法建表)#in

57、clude #include struct nodeint data;struct node *next;int creatleftlink_2(struct node *phead)struct node *new; int n,k=0;*phead=NULL; scanf(“%d”,&n);while(n!=-1)new=(struct node *)malloc(sizeof(struct node);new-data=n;new-next=head;*phead=new;scanf(“%d”,&n);k+; return (k);科咕掺盏酌呼氏气呐贿呢惺苛躬瘫肃辗赢学惑河搂掣遥玖绝感撵

58、齐斟曙念第八部分结构和联合类型第八部分结构和联合类型(1)head=NULL;(2)创建新结点创建新结点new=(struct child*)malloc(sizeof(struct child);(3)找到标记结点找到标记结点marker(新结点插入在标记结点的后面)(新结点插入在标记结点的后面)(4)新结点连入链表新结点连入链表 new-next=marker-next; marker-next=new;重复(重复(2)、()、(3)、()、(4)步直到链表创建完成。)步直到链表创建完成。headnewNULLmarker在链表中间插入结点,一般用于建立有序链表在链表中间插入结点,一般用于

59、建立有序链表建立链表建立链表曳箍畜获攻冉匪闯称绍馈易潦匈匣埂达销验传睹栗途郝螟挨糕抉哭颐测雏第八部分结构和联合类型第八部分结构和联合类型 p=head; while(p!=NULL) puts(p-name);/*输出当前结点数据输出当前结点数据*/p=p-next;/*p更新为下一个结点地址更新为下一个结点地址*/ 功能:将整个链表的数据从头到尾扫描一遍功能:将整个链表的数据从头到尾扫描一遍遍历链表遍历链表#include #include struct nodeint data;struct node *next;void printlink(struct node *head)struc

60、t node *p;p=head;while(p!=NULL)printf(“%dn”,p-data;p=p-next; 雄妨睡浇灰楼躯循匪瘩撼腥明瞥枣蓖凰超调世倾袜菇喝墟汾贫僳需诣钳勒第八部分结构和联合类型第八部分结构和联合类型(1)找到要删除的结点,)找到要删除的结点,current指向该结点,指向该结点,p指向要删指向要删除结点的前趋结点。除结点的前趋结点。(2)如果要删除的结点为头结点,则)如果要删除的结点为头结点,则 head=current-next;(3)如果要删除的结点不是头结点,则)如果要删除的结点不是头结点,则 p-next=current-next(4)释放已经删除的结点

61、)释放已经删除的结点 free(current);NULLheadcurrent从链表中删除结点从链表中删除结点谬苇鱼肮详赫卢繁莎景粕鸳翁济馋紊疾父怒奴枉央汁垛漆瓷戏哎翅咳儡蛤第八部分结构和联合类型第八部分结构和联合类型从链表中删除结点从链表中删除结点#include #include struct nodeint data;struct node *next;struct node * deletelink_1(struct node *head,int n)struct node *p,*q;p=head;while(p-data!=n&p-next!=NULL)q=p;p=p-next;

62、if(p-data=n) /*找到找到*/if(p=head) /*被删除的结点是链头被删除的结点是链头*/head=p-next;else /*被删除的结点不是链头被删除的结点不是链头*/q-next=p-next;free(p);return (head);编谐磅弦荔古斥粕杜床债名疏慨瘟瓣令仿项柳导您拜鳖填熟贬呼否母幂围第八部分结构和联合类型第八部分结构和联合类型从链表中删除结点从链表中删除结点#include #include struct nodeint data;struct node *next;int deletelink_2(struct node *phead,int n)s

63、truct node *p,*q;p=*phead;while(p-data!=n&p-next!=NULL)q=p;p=p-next;if(p-data=n) /*找到找到*/if(p=*phead) /*被删除的结点是链头被删除的结点是链头*/*phead=p-next;else /*被删除的结点不是链头被删除的结点不是链头*/q-next=p-next;free(p);return (1);elsereturn (0);阉指牡衫瞻厕捎眨套砾实顽蔷而疾廖派粗穗夹防荫韶罐瘴坯鬼寇檀食便辫第八部分结构和联合类型第八部分结构和联合类型向一个有序链表中插入新结点(向一个有序链表中插入新结点(new

64、)。(1)找到要插入结点的位置,插入在)找到要插入结点的位置,插入在r指向的结点前面,指向的结点前面, p指向的结点后面。指向的结点后面。(2)如果要插入在头结点前面,则)如果要插入在头结点前面,则new-next=head;head=new;(3)如果要插入的位置不是头结点前面,则)如果要插入的位置不是头结点前面,则 new-next=r;p-next=new;将一个结点插入一个已经存在的链表中,例如插入在链将一个结点插入一个已经存在的链表中,例如插入在链表尾部、头部或者插入在一个有序链表中。表尾部、头部或者插入在一个有序链表中。插入结点插入结点别汉赠妊裙淋谦篡稼忻峡搔矾恶维太帖潍芋羡操醒忻

65、曼氰措佯层反宠祥蜗第八部分结构和联合类型第八部分结构和联合类型插入结点插入结点#include #include struct nodeint data;struct node *next;struct node * insertsort(struct node *head, int n)struct node *new,*p,*q; new=(struct node *)malloc(sizeof(struct node);new-data=n; p=head;while(p!=NULL &p-datanext;if(p=head)new-next=head;head=new; elseq-

66、next=new;new-next=p;return (head);素智热此称利寸江麓兔需律通疲抵溉陛肯惶历辊鸯吃暑领菏喘左从擞舀家第八部分结构和联合类型第八部分结构和联合类型插入结点插入结点struct node * creatsortlink(struct node *head)int n;head=NULL; scanf(“%d”, &n); while(n!=-1)head=insertsort(head,n);scanf(“%d”, &n);return head;服瘴攫选详带赃讲犁抢缄减商捐象嘲强泉瘸沦止煽哀八赶氮摸钙耍仰篓给第八部分结构和联合类型第八部分结构和联合类型结构类型定义

67、与引用结构类型和指针结构数组链表联合类型本讲重点本讲重点本讲重点本讲重点豢砚坊盒炭试肢馆釜傻陕装骑下待车舌床欠嫡冠陋玖徊蝴箕迹慎捷得镊挎第八部分结构和联合类型第八部分结构和联合类型&构造数据类型构造数据类型,也叫共用体也叫共用体&用途:使几个不同类型的变量用途:使几个不同类型的变量共占一段内存共占一段内存(相互覆盖)相互覆盖)union 联合名联合名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;例uniondatainti;charch;floatf;fchi类型定义不分配内存联合的定义联合的定义联合类型定义联合类型定义定义形式:定义形式:贾荧纶爹养温蚀

68、阎钟咆隙悼荆应拍粥栽它葫巢疵百打同丹阂役供琳紊艇捞第八部分结构和联合类型第八部分结构和联合类型形式一:uniondatainti;charch;floatf;a,b;形式二:uniondatainti;charch;floatf;uniondataa,b,c,*p,d3;形式三:unioninti;charch;floatf;a,b,c;联合变量的定义联合变量的定义蜘卢膨虎旅虑敢肝艰韵瓷谢钾陪份娄赵桑蕾呛透诚额姻竞蝶恩接罕轩截鸯第八部分结构和联合类型第八部分结构和联合类型fchifchiab联合变量定义分配内存,长度=最长成员所占字节数联合变量任何时刻只有一个成员存在联合变量的定义联合变量的定

69、义郧逻员测奋悟纠聪疼诀南樱珐畏陷寨篮氰敬鞍飞弦锻幅部广滚磺氖马里砸第八部分结构和联合类型第八部分结构和联合类型引用方式:引用方式:联合指针名联合指针名-成员名成员名联合变量名联合变量名.成员名成员名(*联合指针名联合指针名).成员名成员名uniondatainti;charch;floatf;uniondataa,b,c,*p,d3;a.ia.cha.fp-ip-chp-f(*p).i(*p).ch(*p).fd0.id0.chd0.f联合变量引用联合变量引用间戎珍眶追什瓷罐爆避蔬中阶惰堡耍炸蹬昔私试钾构诅涎曳买据惟孤期寅第八部分结构和联合类型第八部分结构和联合类型例unioninti;cha

70、rch;floatf;a;a=1;()引用规则引用规则不能引用联合变量,只能不能引用联合变量,只能引用其成员引用其成员联合变量引用联合变量引用栖工火盈伶脂久害敲紫妒屁滔舌煽庭寺壁柄镍肉香臃慌驯铣壤维帛检傅默第八部分结构和联合类型第八部分结构和联合类型例a.i=1;a.ch=a;a.f=1.5;printf(“%d”,a.i);(编译通过,运行结果不对)联合变量引用联合变量引用引用规则引用规则联合变量中起作用的成员是联合变量中起作用的成员是最后一次存放的成员最后一次存放的成员镑俐睫臂姚油蜀吠阜烟庞谅泅膨摄糖粪厅谢北弹秸两麓逐驱茎铺忙朗窗桩第八部分结构和联合类型第八部分结构和联合类型例unioni

71、nti;charch;floatf;a=1,a,1.5;()联合变量引用联合变量引用引用规则引用规则不能不能在定义联合变量时在定义联合变量时初始化初始化鞠积档束愤计蛤曰亮躁翠碑锤妈亿昌侗氟拔茬愤秀捅痕淡拌捍陛庐吁王仓第八部分结构和联合类型第八部分结构和联合类型例floatx;unioninti;charch;floatf;a,b;a.i=1;a.ch=a;a.f=1.5;b=a;()x=a.f;()引用规则引用规则可以用一个联合变量为另一个变量赋值可以用一个联合变量为另一个变量赋值联合变量引用联合变量引用速漏吐敌炔泰棠唁灶锻婪招装忽统兔鸥炎癌枫蜂长烦谁晴淤噬此竖匙车稳第八部分结构和联合类型第八

72、部分结构和联合类型例例 将一个整数按字节输出将一个整数按字节输出0110000101000001低字节高字节0100000101100001ch0ch1i=60501ch0=101,ch1=141ch0=A,ch1=aintmain()unionint_charinti;charch2;x;x.i=24897;printf(i=%on,x.i);printf(ch0=%o,ch1=%onch0=%c,ch1=%cn,x.ch0,x.ch1,x.ch0,x.ch1);return0;运行结果:运行结果:谅铺藕填商烩掉茧卢件划酞的鸳鬃塞者秋煞蔷报殖登缄山袋躁醇商及拒癣第八部分结构和联合类型第八部分

73、结构和联合类型structnodecharch2;intk;a;unionnodecharch2;intk;b;achkbch k变量的各成员同时存在任一时刻只有一个成员存在区别区别:存储方式不同:存储方式不同联系联系:两者可相互嵌套:两者可相互嵌套结构类型与联合结构类型与联合芽屯煌斗毗盏堆皱铂玲妮脖沤繁郧涨果筋曙冒凋丽氧喘呢锤府某鹤政积辑第八部分结构和联合类型第八部分结构和联合类型例例 结构类型中嵌套联合结构类型中嵌套联合 name numsexjobclasspositionLiWang10112086FMST501prof循环循环n次次读入姓名、号码、性别、职务读入姓名、号码、性别、职务

74、job=s真真真真假假假假读入读入class读入读入position输出输出“输入错输入错”循环循环n次次job=s真真假假输出输出:姓名姓名,号码号码,性别性别,职业职业,班级班级输出输出:姓名姓名,号码号码,性别性别,职业职业,职务职务job=tstructintnum;charname10;charsex;charjob;unionintclass;charposition10;category;person2;灿值冬卜晒呸腐捷乏世尖釜庐譬酉影偶医挣峙膨鳃瑞转辜械烬新襟微泣江第八部分结构和联合类型第八部分结构和联合类型例联合中嵌套结构类型,机器字数据与字节数据的处理例联合中嵌套结构类型,

75、机器字数据与字节数据的处理0001001000110100低字节高字节0011010000010010lowhigh0x12340001001011111111低字节高字节1111111100010010lowhigh0x12ffstructw_tagcharlow;charhigh;unionu_tagstructw_tagbyte_acc;intword_acc;u_acc;word_accbyte_acc.lowbyte_acc.highu_acc磕带激袒澈惺掣泌端奄诉颜孪枝爹性盼品庭谐怯郸放花刊耀靛落旁蚂厕弹第八部分结构和联合类型第八部分结构和联合类型例例 编程,输入一个长整型的整数,

76、分别取出该数的各字节的值。分析:分析:定义一个联合类型如下所示:uniondatachars5;longn;凉载烁耀赊悲砰卡隔漱充漓瘪舜恰戴傈洒冕凯荤峦探烽赌遣篆插勋祁妻妮第八部分结构和联合类型第八部分结构和联合类型例编程,输入一个长整型的整数,分别取出该数的各字节的值。#includeuniondatachars5;longn;intmain(void)uniondatax;inti;printf(“输入一个长整数:”);scanf(“%x”,&x.n);printf(“各字节取值如下:n”);for(i=0;isizeof(long);i+)printf(“第%d个字节:%x”,i,x.s

77、i);printf(“n”);return0;抢梗庶胡划撬岳励嘴孺染铁嫡皿券凹榷磁辗直谣卢茸同旺贼痪只然荧屡江第八部分结构和联合类型第八部分结构和联合类型例例 编程存放学生的下述信息:姓名、学号和当前住址,其中学生当前编程存放学生的下述信息:姓名、学号和当前住址,其中学生当前住址有两种情况:在校住宿学生用学校地址(楼房名和房间号),非在校住址有两种情况:在校住宿学生用学校地址(楼房名和房间号),非在校学生用家庭住址(街道号、街道名和城市名)。并输出指定姓名学生的当学生用家庭住址(街道号、街道名和城市名)。并输出指定姓名学生的当前住址。前住址。structoff_schoolintstrnum;

78、/*街道号*/charstrname20;/*街道名*/charcity20;/*城市名*/;structin_schoolintroomnum;/*房间号*/chardorm20;/*楼房名*/;unionaddressstructoff_schooltown;structin_schoolgown;structstudentintnum;/*学号*/charname20;/*姓名*/charoff_in;/*是否在学校住*/unionaddressad;/*当前住址*/;弄驼邓纫糜汤国冲索钡砾展贼趁底擒诡召欺摄桅耸铃敏帮弟冉肛段矢径亏第八部分结构和联合类型第八部分结构和联合类型#inclu

79、deinclude#defineN3structoff_schoolintstrnum;charstrname20;charcity20;structin_schoolintroomnum;chardorm20;unionaddressstructoff_schooltown;structin_schoolgown;structstudentintnum;charname20;charoff_in;unionaddressad;吱慈拔鼎豢谅合驯来炯龙镑嚷璃帜接书昧颧右施郊因睫氏寻营谩渤休鲍戴第八部分结构和联合类型第八部分结构和联合类型intmain(void)structstudentsN;c

80、harname20;inti;for(i=0;iN;i+)printf(“请输入第%d个学生数据n”,i+1);printf(“学号:”);scanf(“%d”,&si.num);printf(“姓名:”);gets(si.name);getchar(); 到裔福卒邮艺奄菊涯缔宫凹猴无撅送汤谆庭鱼职纂燎粒湛哗贯浴徽琅豪捆第八部分结构和联合类型第八部分结构和联合类型printf(“是否在校住宿学生(n在校住宿、其他表示非在校住宿):”);si.off_in=getchar();printf(“请输入当前地址n”);if(si.off_in=n)printf(“请输入房间名和房间号:”);scan

81、f(“%d%s”,&si.ad.gown.roomnum,si.ad.gown.dorm);elseprintf(“请输入街道号、街道名和城市名:”);scanf(“%d%s%s”,&si.ad.town.strnum,si.ad.town.strname,si.ad.town.city); 遵送拔屏硷闪蠕叉彪捞挪手晃蝗悍迷灼见否砂招靴颅柯掸雀塑快宫芬腑厂第八部分结构和联合类型第八部分结构和联合类型 printf(“输入姓名”);gets(name);for(i=0;iN;i+)if(!strcmp(si.name,name)if(si.off_in=n)printf(“姓名:%s是在校住宿学

82、生n”,si.name);printf(“楼房名:%s房间号%dn”,si.ad.gown.dorm,si.ad.gown.roomnum);elseprintf(“姓名:%s非在校住宿学生n”,si.name);printf(“城市名:%s楼房名:%s房间号:%dn”,si.ad.town.city,si.ad.town.strname,si.ad.town.strnum);elseprintf(“没有这个学生”);return0; 建境扩瓢蹈牛桔疮橱槐啥伊毙挺诗朱篱四铣栅乃词疵纶挨良仰连涪饿鞠模第八部分结构和联合类型第八部分结构和联合类型THE END凭攒峻腿驯怀沫鬼滩箕昨惑应脏息呀芽中骂韶般洲膨阀只操瞄密饱图钵身第八部分结构和联合类型第八部分结构和联合类型

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号