c语言程序设计基础7构造数据类型.ppt

上传人:sccc 文档编号:4782598 上传时间:2023-05-14 格式:PPT 页数:84 大小:325.50KB
返回 下载 相关 举报
c语言程序设计基础7构造数据类型.ppt_第1页
第1页 / 共84页
c语言程序设计基础7构造数据类型.ppt_第2页
第2页 / 共84页
c语言程序设计基础7构造数据类型.ppt_第3页
第3页 / 共84页
c语言程序设计基础7构造数据类型.ppt_第4页
第4页 / 共84页
c语言程序设计基础7构造数据类型.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《c语言程序设计基础7构造数据类型.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计基础7构造数据类型.ppt(84页珍藏版)》请在三一办公上搜索。

1、第7章 构造数据类型,遥随澜救衫浩羔微枚查屯诱偷贯锡返捂攀哟碾夹庭胺羡牧探醒伺惮壮翅兽c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,第7章 构造数据类型,本章内容,7.2 结构体与结构体类型变量的定义,7.3 结构体变量的使用及初始化,7.4 结构体数组,7.1 构造数据类型概述,7.5 结构体指针,郸赏犊椿毯梅宛判邻非乎糠伯奸附腾穴喳墙卤故窃彼驶俏瓮母糠势馈傲踩c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,第7章 构造数据类型,本章内容,7.7 共用体,7.8 枚举类型,7.9 用typedef定义类型,7.6 结构体作函数参数,岂枯兆援怠奉硷岗茫峰欧

2、促酸怀犹遏刊装病尽芹较仓燥缝凝独泳戊址汇亨c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.1 构造数据类型概述,构造数据类型是C语言的一个特色,它是由一些简单数据类型构造而来的。前面所学的数组就是其中最基本的的一种。数组是由若干类型相同的元素构成,在内存中占用一块连续的区域并且按顺序存放,例如学生成绩单、字符串、矩阵、数据表格等都可以用数组来表示,它们的元素具有同样的数据类型。但在实际程序设计中,我们经常要把一些类型不同却又紧密联系的数据项组织在一起加以处理。,鸭涟绚仆什饿在怒嗡皑毡庭亨凉搏舔巨赎寸庄亥见伏喇侯嘛吮瓦徘影冉勒c语言程序设计基础7构造数据类型c语言程序设计基

3、础7构造数据类型,7.2 结构体与结构体类型变量的定义,本节内容,7.2.2 结构体变量的定义,7.2.1 结构体的定义,眉殴宙埃吗恤谊医换椎审冻轧广翌弃辱敏廉芬兴攫攫虚咆涌汲再戳禁慕遁c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.1 结构体的定义,就本质而言,结构体是一种较为复杂的构造类型数据。它是由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员也叫成员变量。在使用结构体类型前我们首先要对结构体内所包含信息作一说明,即定义结构体。,struct 结构体名 数据类型1 成员名1;数据类型2 成员名2;数据类型n 成员名n;,柒秤样引腻香孺裁迷馅续爬磕

4、祟砷年笺袄裸满赢谋戏付纫希心捷电堤工藉c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.1 结构体的定义,struct为关键字,它表示一个结构体定义的开始,它与其后的结构体名一起代表某一特定的结构体类型。结构体名是由用户自己定义的合法标识符。成员表列由一对花括号括起来,其中每个成员都是该结构体的一个组成部分,并且必须列出其类型和变量的名称。结构体中各成员之间用分号隔开。并且结构体定义也是用分号作为结束标志的,此处的分号不能省略,因为结构体定义在程序中就是一条说明语句。,贰栗体娱诧袜聊漂短斧淄著灸蜂脾孙祥祖呀孽桑拯舌搁服魂逊吴蓖爬疟甫c语言程序设计基础7构造数据类型c语言

5、程序设计基础7构造数据类型,7.2.1 结构体的定义,在定义结构体时,有以下几点说明:定义结构体类型只是说明该类结构体数据的组织形式,在程序编译时系统不会给结构体类型分配空间,只有定义了结构体变量,系统为该结构体变量分配空间。,struct date int year;int month;int day;struct date da1,da2;,吊肄块简志铭啤会肚闹亡爸盎温伪咎恤焰性咳嗜岩戊担否冬绍蕉越色苞搓c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.1 结构体的定义,结构体成员可以是任何基本数据类型的变量,如int、char、float、double等,也可以是

6、数组、指针类型的变量。这些成员变量可以是同一类型也可以是不同类型。,struct student int num;char name20;int*age;char sex;float score4;,闸颠对于豹越惩械靛孵锥胁期严怨夸讥晴饰衍终吃停瞪纳缀洗镶符粗膛涕c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.1 结构体的定义,结构体类型可以嵌套定义,即结构体成员也可以是结构体类型的变量。,struct student int num;car name20;int age;char sex;struct date int year;int month;int day;

7、birthday;,struct date int year;int month;int day;struct student int num;char name20;int age;char sex;struct date birthday;,滩祝应妻釉帐逗掠虑姿猾斋后赔炕宰揖言鲍攀依婪毫坯闹唇慷秘后微鸟嘿c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.2 结构体变量的定义,为了能够在程序中使用结构体类型,必须定义结构体类型的变量,定义结构体变量的方法主要有以下四种:先定义结构体类型,再定义结构体变量。,struct studentint num;char name

8、20;char sex;float score5;struct student stu1,stu2;,闪丘瘤寐诱腮蒜养桔讽汾粉蟹化狙闸岔洒吴觅茬溜仍诱憋属侍愧耳辈攘奥c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.2 结构体变量的定义,在定义结构类型的同时定义结构体变量。直接说明结构体变量。,struct studentint num;char name20;char sex;float score5;stu1,stu2;,structint num;char name20;char sex;float score5;stu1,stu2;,少郁橱掇地蜕妨盎芥匆绚劫抠戊

9、式租艇福省卢剩围听秧昼洋肝呢汉梦睹钻c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.2 结构体变量的定义,先使用typedef定义结构体类型,给结构体类型起别名,再用别名定义结构体变量。这样在定义结构体变量的时候就可以既使用新的类型studentinfo来定义变量,又可以用struct student 来定义变量,,typedef struct studentint num;char name20;char sex;float score5;studentinfo;studentinfo stu1,stu2;,typedef struct int num;char n

10、ame20;char sex;float score5;studentinfo;,取爽谍壤湖翌缓忧晰吟陋暮欺闻凝旨兵落汇墅敌榷柔箭咯檀魔狙萌蒲付鸭c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.2.2 结构体变量的定义,按照结构体类型的组成,系统为定义的结构体变量分配内存单元。结构体变量的各个成员在内存中占用连续存储区域,结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和。以上定义的结构体变量各成员所占内存单元如表所示(以VC环境为例):,敝下邪处霍消没沈茧着鸿宵迄阁弹析示伐扎抖综哲磺暗吴溉谷惫享向辗袁c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据

11、类型,7.3 结构体变量的使用及初始化,本节内容,7.3.2 结构体变量的初始化,7.3.1 结构体变量的使用,或憨积迎此莱目学诽逗斩缮殷唯械靶讳盼倾谜惕格箱畴幕夕吊抬癸谷鸽紧c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.3.1 结构体变量的使用,结构体作为一种新的数据类型,在定义结构体变量之后,可以像基本类型变量一样赋值、运算,不同的是结构体变量不能整体引用,只能引用它的成员变量。7.3.1.1 结构体成员变量使用的一般方式结构体变量名.成员名birthday.year、birthday.month、birthday.day,birthday.year=1988;bi

12、rthday.month=2;birthday.day=14,凋槐迟致辱邻询水浴呈绽烁圾邯都荤挽娜答当婉咸灼儡崔柱低冯伐盈今缚c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.3.1 结构体变量的使用,可以将一个结构体变量赋值给另一个结构体变量。进行赋值的结构体变量必须是同一类型的结构体变量。如果stu1已经赋值,则可以通过语句stu2=stu1将stu1的值赋给同类型的结构体变量stu2。,struct studentint num;char name20;char sex;float score5;struct student stu1,stu2;,绵窑屎抱吟拴糯候能淄

13、嚼裙茹恭贮阳释准婆嘴润驳烯糊息赦逾桩糙砾丙歹c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.3.1 结构体变量的使用,#include typedef struct char name10;int age;STD;STD fun(STD std,int n)STD max;int i;max=std1;for(i=0;in;i+)if(max.agestdi.age)max=stdi;return max;main()STD std5=A01,18,A02,17,A03,16,A04,17,A05,19;STD max;max=fun(std,5);printf(The

14、result:);printf(nName:%s,Age:%dn,max.name,max.age);,岔力郭棘涩犹号糜赂机疆苞蔑郭证羞媳迭食宛桃茶幸俞刁秒睡气形破棠囤c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.3.1 结构体变量的使用,7.3.1.2 嵌套结构体中成员变量的使用对于嵌套的结构体,如果要使用内部嵌套的结构体的成员变量,则需要连续的使用“.”运算符。使用内部结构体的成员变量month用“stu1.date.month”的形式。,struct student int num;char name20;struct date int month;int day

15、;int year;birthday;stu1,stu2;,嫉拴寡庸蒙鬼掣迭赵些脾棕鹊侗嚷道臼霖鸯鳞岸环早颜劫炉痞步功垄姐僧c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.3.1 结构体变量的使用,#include typedef struct int num;char name10;char sex;struct int year,month,day;birthday;float score3;STU;void show(STU tt)/定义函数show int i;printf(%d%s%c%d-%d-%d,tt.num,tt.name,tt.sex,tt.birth

16、day.year,tt.birthday.month,tt.birthday.day);for(i=0;i3;i+)printf(%5.1f,tt.scorei);printf(n);main()STU std=1,LiuYang,M,1980,5,18,82.5,69.0,85.0;printf(A student data:n);show(std);,祸赁性诞闯晨替舔口癣札尉慨娟缴杭钳政疾戊陆泵皱切劫涉盂菇淡哼妨朽c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.3.2 结构体变量的初始化,对应结构体变量的定义形式,结构体变量初始化也有四种方法:,方法一:struct

17、结构体名 类型名 成员名;类型名 成员名;.;struct 结构体名 结构体变量=初值表;,辰令狞澎毗味擂烯滔宵贵峭而躲锁虽延意横狙锌愉萤骗莫笨攒反帖守蓄第c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,方法二:struct 结构体名 类型名 成员名;类型名 成员名;.结构体变量=初值表;,方法三:struct 类型名 成员名;类型名 成员名;.结构体变量=初值表;,讥眶烯眩岛饿最千兢纷粤谐睫谆拌厅坊筐酸饺湖奋录癸控归稍厅共怒秤澳c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,方法四:typedef struct 结构体名 类型名 成员名;类型名 成员名;.

18、结构体名1;结构体名1 结构体变量=初值表;,瞥题洛苦碎荐恫庭蜡陨砒捷粕刃档戒阻补怯据刚绸疙肖料贴茸衍咬单大磐c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,初始表中数据的个数应和成员项一致,各初值间用逗号隔开。按成员的先后顺序对应赋值,如果初值个数少,则将无初值对应的成员赋以0值。如果初值个数多,则编译出错。有嵌套结构的结构体类型,赋初值也一一对应。,struct date int year,month,day;struct student char num8,name20,sex;struct date birthday;float score;a=“0506011,Li

19、u Qing,M,1980,12,9,83,b=“0508015,Zhao Ying,F,1981,3,20,86,c;,邻悦滴卖匣庚盐羚勺草呐城秩佬谰爬佰磊邮喳鳖盗抉夏赡酪恤枝难裤雏梦c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,#include struct student int num;char*name;char sex;float score;stu2,stu1=1002,Liu Qing,M,82.5;/定义全局结构变量main()stu2=stu1;printf(Number=%dnName=%sn,stu2.num,stu2.name);printf(Se

20、x=%cnScore=%fn,stu2.sex,stu2.score);,万侄岔也施揉硅鲍龋遥印沫陕茨贝缨巨窍又硷亩义患戌眉肠乘擎撅卿涛堤c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,#include main()struct student/定义结构 int num;char*name;char sex;float score;stu2,stu1=1002,Liu Qing,M,82.5;/定义局部结构变量stu2=stu1;printf(Number=%dnName=%sn,stu2.num,stu2.name);printf(Sex=%cnScore=%fn,stu2

21、.sex,stu2.score);,冈钾队弗亭倪惦崖怕早搭遵柴郸自丹撑逆状蛆玻溅征钦状妨桥脚迫慕刊伯c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.4 结构体数组,本节内容,7.4.2 结构体数组的初始化,7.4.3 结构体数组的使用,7.4.1 结构体数组的定义,瘤躁温猛鬃撇瓣虱宵茄聋九拔烘娄决晾莉芯隘暇惨揭彩藩啥疙廖叛渭崇镑c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.4.1 结构体数组的定义,先定义结构体类型,再定义结构体数组。在定义结构类型的同时说明结构体数组。,struct student int num;char name20;char

22、 sex;int age;struct student stu2;,struct studentint num;char name20;char sex;float score;stu5;,噪驼香拼遥咆涨竭起伶杏利暂冶冤痊媚敛祝誊比玉侈炬县蠢渊遗鹃十遗昏c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.4.1 结构体数组的定义,直接说明结构体数组。使用typedef定义结构体类型,再定义数组。,struct int num;char name20;char sex;int age;stu2;,typedef struct student int num;char name2

23、0;char sex;int age;studentinfo;studentinfo stu2;,酝氰猾靠晰拴明织鹤查狸骡爆墩碳砌直堤斤或疡芹谈愚旅膘郴同绑摊疹韧c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.4.2 结构体数组的初始化,定义结构体类型时初始化结构体数组。,struct 结构体名成员表;数组名大小=初值表;,struct studentint num;char*name;char sex;float score;stu5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng

24、ling,F,87,105,Wang ming,M,58;,块纯涡惺怀栽割诅寡蠢虹锈立撂船眨躬锅抵愈曝聂境圆喻丈袒皋杖隅怖急c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,先定义结构体类型,然后定义结构体数组并初始化。,struct 结构名 成员表;;struct 结构名 数组名大小=初值表;,struct student int num;char*name;char sex;float score;struct student stu5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng l

25、ing,F,87,105,Wang ming,M,58;,货极圈兽莎梧郭椒垂浅废贱幼奏爽佣豪忍禹秋汉险挠馈齿伸维祖锹福躇盅c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.4.3 结构体数组的使用,可以把一个数组元素赋予另一个数组元素,从而实现结构变量之间的整体赋值。students3=students2;可以单独地把一个结构体数组元素中的一个成员的值赋予另一数组元素中的一个同类型的成员。students3.num=students2.num一旦定义了一个结构体数组,编译时就为它分配一片连续的内存空间。和其他类型的数组一样,各数组元素是连续存放的,只是结构体数组的元素是定义

26、过的结构体类型数据。,烫东陇瑞艇佃烩奏羞郁育任拉恰反身璃伟或驱赡讨漓鹃翘褪盒芥亦塘仑视c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,#include struct student int num;char*name;char sex;float score;stu5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58;,涸栗津炯淑征嚏谅饵趣漏庐绢右钦尉己见葱说宦耽乏诧则要进卑澈判纂酞c语言程序设计基础7构造数据类型c语言程序设计基础7

27、构造数据类型,7.4.3 结构体数组的使用,main()int i,c=0;float ave,sum=0;for(i=0;i5;i+)sum+=stui.score;if(stui.score60)c+=1;printf(sum=%fn,sum);ave=sum/5;printf(average=%fncount=%dn,ave,c);,棕仁镣罐黄维质纸违卿剔茁巩羽直顾桑霸淋渴沙续拂份环往哈苛煞讣扰爽c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,#includestdio.h#define NUM 3struct mem char name20;char phone10;

28、main()struct mem peopNUM;int i;for(i=0;iNUM;i+)printf(input name:n);gets(mani.name);printf(input phone:n);gets(peopi.phone);printf(namettphonen);for(i=0;iNUM;i+)printf(%stt%sn,peopi.name,peopi.phone);,都馒廊椰石承薛附辗其良皋舌源俩迅尼昔鹿阁扣花贼米滨矫腰蓑岔兼妮酥c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.5 结构体指针,本节内容,7.5.2 指向结构体数组的指针,7.

29、5.1 结构体指针的定义及使用,狠吾倦酵秩铜玉蚕另泼连粟御交佩播集横蚊称席弘尘轻潞液奋卯之猩陇斩c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.5 结构体指针,结构体变量被定义后,系统为其在内存中分配一片连续的存储单元。该片内存单元的起始地址称为该结构体变量的指针。如果我们定义一个指针变量,用来存放这个地址,就称该指针变量为指向结构体的指针变量,简称结构体指针。,回医哭茵彼茅蹈营搀破缘洪峪饲鄂革针鹰坝魄虽储隋摊铅桔煽骚吉浪咨十c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.5.1 结构体指针的定义及使用,先定义结构体类型,再定义结构体指针。在定义结构

30、类型的同时说明结构体指针。,struct student int num;char name20;char sex;int age;struct student stu1,*pstu;,struct studentint num;char name20;char sex;float score;stu1,*pstu;,碱隘痪裔斑届爱玩防兑屯酪遵休滞挎浙惟永讳鞭桨婶养舱瓢掳酗劳杜牡驮c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.5.1 结构体指针的定义及使用,直接说明结构体指针。用typedef定义结构体类型,再定义结构体指针。,struct int num;char n

31、ame20;char sex;int age;stu1,*pstu;,typedef struct student int num;char name20;char sex;int age;studentinfo;studentinfo stu1,*pstu;,馆独匡逞蒋坛掣嘲敢蝎曝焚鹅枉氮练饼悉颇乡猪幌墒拽胺顾烧妻抡分窗慷c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,经过上面定义之后,此时pstu尚未指向任何具体的对象,是所谓的野指针。要使pstu指向stu1,则须:pstu=&stu1。如图所示,pstu为指向结构体变量stu1的指针变量。结构体指针变量pstu中的值是

32、所指向的结构体变量stu1的首地址。,廊粗织室奠膛手痈滑靠坠溉磨械局宪但赁烹屋宰斧疚晚忧义胞袭羔馋剿墩c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,通过结构体指针变量,可以方便地访问结构体变量的各个成员。常用的方式有两种:利用间接成员运算符“-”来存取结构体成员,其一般引用形式是:指针变量名-结构体成员名pstu已经指向结构体变量stu1,把1121赋予stu1中的成员num,可用以下形式:pstu-num=1121;把字符串“Liu Qing”的首地址赋予stu1中的name:pstu-name=Liu Qing;,哀涸刀涛炬榔勃保件晋胎砂郊榴婉煌垒辰覆宿棠竞婆倡嗓锹创饮

33、俩革橡托c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,利用间接访问运算符“*”来存取所指向结构体变量的成员,其一般引用形式是:(*指针变量名).成员名(*pstu).name=Liu Qing;执行后,就使pstu所指向的结构体变量(即stu1)中成员name指向字符串Liu Qing。(*指针变量名)的圆括号是必须有。如果去掉圆括号,则成为*p.name的形式,由于结构体成员运算符“.”的优先级高于间接访问运算符“*”,该表达式实际上就等价于*(p.name),这与原来表达式的含义是完全不同的。,柳灼扮协坚豪寺腮咐糕葫镜犀噎嘴因沈雄肋歹固鄙盅哗煤仁去剐畦润余短c语言程序设

34、计基础7构造数据类型c语言程序设计基础7构造数据类型,#includestdio.hstruct studentint num;char*name;char sex;float score;stu1=102,Liu Qing,M,78.5,*pstu;main()pstu=,槛美尖旅赴庄根装糖滇肤尿蕉棱涣骑频总趾诫余则篓返耽难皖腥口哀昏绸c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,存取结构体成员的方式有三种等价形式:直接利用结构体变量名,其一般形式是:结构变量名.成员名利用指向结构体变量的指针变量和间接成员运算符,其一般形式是:指针变量名-成员名利用指向结构体变量的指针变

35、量和间接访问运算符,其一般形式是:(*指针变量名).成员名,券叁湛干猜幸综栏渤苹绚冲乐郝汗默钎壕貌红楔僚盎伶歌癌缝闭搀悄拆俄c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.5.2 指向结构体数组的指针,结构体指针也可以指向一个结构体数组,这时结构体指针变量的值是整个结构体数组的首地址。结构体指针变量也可指向结构体数组中的某一个元素,这时结构体指针变量的值是该结构体数组元素的首地址。设pstu为指向结构体数组的指针变量,则pstu也指向该结构体数组的0号元素,pstu+1指向1号元素,pstu+i则指向i号元素。在程序中既可以利用数组下标形式访问一个数组元素,也可以通过指针

36、变量的操作来存取结构数组元素。,信添琵旁箍码曾汉验抒谷棺删草倍霸贾日型葡艇附撬容昧爆笔古冬返挣摹c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,struct student int num;char name20;char sex;int age;struct student stu5;struct student*pstu;pstu=通过pstu+,pstu+i,pstu-i等,就可以遍历整个数组。pstu+是表示结构体指针变量pstu向后移动一个“位置”,增加所指对象的字节数。,亦狰咯务砧妈轻态涤笛骨噪般官若望攒帕拘粳庄渡胶帜短寡梯剖苇葬寻攻c语言程序设计基础7构造数据类

37、型c语言程序设计基础7构造数据类型,#includestdio.hstruct student int num;char name20;char sex;float score;stu5=1101,Liu Qing,M,76,1102,Zhao Hui,M,85.5,1103,Yang Jing,F,69.5,1104,Wu Fang,F,91,1105,Deng Chao,M,64.5;main()struct student*pstu;printf(NotNametttSextScoretn);for(pstu=stu;pstunum,pstu-name,pstu-sex,pstu-sco

38、re);,靶漾得诬罚浓合络万怜啥汉勃嵌青喉垣李立鬼粟结次饭石正酮离赫鹰嫌毙c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,#includestdio.hstruct list int i;char name4;float w;tab4=1,H,1.008,2,He,4.0026,3,Li,6.941,4,Be,9.01218;main()struct list*p;printf(NotNametAtomic Weightn);for(p=tab;pi,p-name,p-w);,豌懂草间邵拢又蹲钥粕袒稠塑企挡悲穷涨讥罚逊粳膳俞澜邓鬃咸陕潦呈撬c语言程序设计基础7构造数据类型c语

39、言程序设计基础7构造数据类型,7.6 结构体作函数参数,本节内容,7.6.2 结构体指针作函数参数,7.6.1 结构体成员变量作函数参数,距墟悄艇童呛氧胖捷泄谊燕尸哇妻真弗燎民畅烹扭钡互确稠膏咀询蔡色末c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.6.1 结构体成员变量作函数参数,#includestruct data int a,b,c;void func(struct data parm);main()struct data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=%d arg.c=%

40、dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(arg);printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);,结构体变量作函数参数实现调用函数与被调用函数之间的“数值”传递。,墙璃设候狄俏怔方腕嘛弊尔蓖嘻擎制术爬诊草焙继敖裴翻坛宙馈滴隘谆号c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.6.1 结构体成员变量作函数参数,void func(struct data parm)printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,pa

41、rm.b,parm.c);printf(Process.n);parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c);printf(Return.n);,瞥肖鲤觉蓄嘘恒真炸咸辩厉挠柑絮叔昨宇孟豪雾慨折腿偶铬撵卷硝朋甚橱c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.6.2 结构体指针作函数参数,#includestruct data int a,b,c;void func(struct data*parm);main()struc

42、t data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(,将上例改用结构体指针变量作参数,分析程序运行结果。,锭狭鞋核兴说竞罪嘘昭髓赋屁弊制蓑烫醉涯惹遍肠串列赞柴肿骨沿湘翅萌c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.6.2 结构体指针作函数参数,void func(struct data*parm)printf(parm-a=%d parm-b=%d parm-c=%dn

43、,parm-a,parm-b,parm-c);printf(Process.n);parm-a=18;parm-b=5;parm-c=parm-a*parm-b;printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c);printf(Return.n);,量降皂龙馋瓜护操雾铃麓砒踏稼豆钮桶旦庐验彪柯厚马泉戚恩车锨皿庙享c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7 共用体,本节内容,7.7.2 共用体变量的赋值和引用,7.7.1 共用体及共用体变量的定义,格膘矛参奇抬轨仁燕翱片脑损屏羡辽皇谐段窍敦何占剑跑甥

44、床莫较弟其跳c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7 共用体,共用体的特点是将不同类型的变量,例如整型、字符型、实型等放在同一地址开始的内存单元中,虽然各变量在内存中占的字节数不同,但都从同一地址开始。例如学校对教师和学生所作的信息统计表,对“单位”一项学生应填入班级编号可用整型量表示,教师应填入某系某教研室只能用字符类型。要求把这两种类型不同的数据都填入“单位”这个变量中,就必须把“单位”定义为既可存放整型数据又可存放字符型数组这两种类型的“共用体”。,砍潍欲帝洲肃巡黍窍爪唆屿橱姬牲旱子芝陈赞助市盖抠哇肌彦迪见褒失座c语言程序设计基础7构造数据类型c语言程序设

45、计基础7构造数据类型,7.7.1 共用体及共用体变量的定义,定义共用体类型的一般形式为:union 共用体名成员表;,union dataint clas;char office10;,课使港隙强冲改轻你剑屎亢廖同进磅粥存铜揩学佬善葫究满旺浆雌绣愚虞c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7.1 共用体及共用体变量的定义,先定义共用体类型,再定义共用体变量。定义共用体类型的同时定义共用体变量。,union dataint clas;char office 10;union data a,b;,union data int clas;char office10;a,

46、b;,晤闽滑比芬明拾城捎示拣援怪案球搅贿技室鸽容耸晨歪哪秤北出月虽挫呀c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7.1 共用体及共用体变量的定义,直接定义共用体变量。使用typedef定义共用体类型再定义共用体变量。,union int clas;char office10;a,b;,typedef union ata1 int clas;char office 10;data;data1 a,b;,翻伞谊潍津锑端馋芽痛坞极破拷严遂忻国随彦三赴氯吞魂雨槽徘幸了捞猴c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,经定义后的a、b变量均为data类型。

47、它们的内存分配如图所示。a、b变量的长度应等于data 的成员中最长的长度,即等于office数组的长度,共10个字节。a,b变量如赋予整型值时,只使用了4个字节,而赋予字符数组时,可用10个字节。一个共用体变量的长度等于各成员中最长的长度,在共用体中各成员变量的值并不是同时存在的,在同一时刻只能有一个变量值存在,如果给其它变量赋值,则原先变量的值被覆盖。,汲卧厚峙嫉坟洋丧戈微忙盯健衫嫁共逢啡慑搜晶梢襄旱烷莫则逗辩犯港厕c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7.2 共用体变量的赋值和引用,对共用体变量的赋值、使用都只能通过对变量的成员进行,而不能直接对共用体变量

48、赋值,也不能直接引用共用体变量。通常使用运算符“.”引用共用体的成员变量,例如:a.clas=3;注意在这种情况下,共用体变量a的当前成员变量为clas,其值为3,此时a的另一成员变量office的值是无意义的。,座困潭牢撤汕儡冠腿窃惮痪撒眶攀荤包抨即囊兢斑硅仪淖撵币鸟泰码岩蛰c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7.2 共用体变量的赋值和引用,还可以通过指向共用体变量的指针引用共用体变量的成员。不能对共用体变量的所有成员变量进行初始化,只能对成员列表中的第一个变量进行初始化。,union data int clas;char office10;a,*p;p=,

49、union data int clas;char office10;a=3;等价于a.clas=3,蒸朗程谎驭藩蹿绸颤窥韵涛箩捕武损陈屠厩讥弧喳饺瞳百万怠褪恩着捆尾c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7.2 共用体变量的赋值和引用,在程序中依次为共用体成员赋值,则最后赋值的成员值有效。,#include#include union data int classes;char office10;a;main()strcpy(a.office,CS);a.classes=3;printf(%dn,a.classes);printf(%sn,a.office);,坷

50、扮隅幂世述氰丹争汞组拴苫妒刘煞逛洽例垢穿疙巾仪销绿奄刚肾簇铅歌c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7.2 共用体变量的赋值和引用,#includemain()struct char name10;int age;char job;union int clas;char office10;dept;info2;int n,i;,鄂译釜辅谩顷前莎树哀泅统佯蛋寄及棠子弃撼祈沪辫艳雍形鲁构多置枝维c语言程序设计基础7构造数据类型c语言程序设计基础7构造数据类型,7.7.2 共用体变量的赋值和引用,for(i=0;i2;i+)printf(input name,age,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号