计算机C语言教程第10章结构体和共同体.ppt
《计算机C语言教程第10章结构体和共同体.ppt》由会员分享,可在线阅读,更多相关《计算机C语言教程第10章结构体和共同体.ppt(168页珍藏版)》请在三一办公上搜索。
1、C语言程序设计第10章 结构体与共同体,椎明燎芥亢乞姐歹苍庶高壤售典岔湛逝崇钡畅炬因缴健梧疥龋纯劝鬼毁酥计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,结构体与共用体,第十章,嘻切赚译群庆话兵屈保前彬湾凶畸蛔篮书嘿舔贴驰柳瀑陨彰伙抠斟瞎技霓计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,10.1 结构体类型的定义,结构体由若干成员组成,各成员可有不同的类型。在程序中要使用结构体类型,必须先对结构体的组成进行描述。例如,学生信息可用结构体描述为:,struct studentint num;/*学号*/char name20;/*姓名*
2、/char sex;/*性别*/int age;/*年龄*/float score;/*成绩*/char addr40;/*家庭住址*/;,媚笔候封涝揣作署交浙棒苗瓢犯嘛删仔侧矛户虞草由砂萄痴戊奄踊莹束拐计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,需要特别指出的是“struct student”是程序设计者自己定义的类型,它与系统预定义的标准类型(如int、char等)一样,可以用来定义变量,使变量具有struct student类型。例如:struct student st1,st220;分别定义了struct student结构体类型的变量st1和stru
3、ct student结构体类型的数组变量st2。,其中,关键字struct引入结构体类型的定义。struct之后任选的标识符是结构体类型的名字。用花括号括起来的是结构体成员说明。上例说明结构体类型struct student有6个成员,分别命名为num、name、sex、age、score和addr。这6个成员分别表示学生的学号、姓名、性别、年龄、成绩和家庭住址,显然它们的类型是不同的。,造菜渣敬最忻佯椰模霹桐懦烫洗沟利肯桐静虹鄂酋资韦黎栖拷许后退矾骤计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,结构体类型的定义形式为:struct 结构体类型名成员说明表列;,
4、其中,花括号内的内容是该结构体类型的成员说明,每个成员说明的形式为:类型名 成员名;,埋至撮卫侮橡妮阜髓贤书譬树盐领掐枕镰萌蛰暗亿凝稼市紊鞠粹惑吮蘸欲计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,实际上,凡是相关的若干数据对象都可组合成一个结构体,在一个结构体名下进行管理。例如,由日、月、年组成的结构体类型为:,struct dateint day;int month;int year;,级耕嚷荫轮忍戌锥画帜掳梯鸿凋只需奔奴改壳形讥擂鸟贰漠示朝闹蓑浮硬计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,又如,某职工信息结构体类型为:st
5、ruct personchar name20;/*姓名*/char address40;/*地址*/float salary;/*工资*/float cost;/*扣款*/struct date hiredate;/*聘任日期*/;,住竣幕漱喊驾睬离返蜀镑贾鹰延兴魄潦缮庞齿矽传逆叛箭敞赊骚填堤镰讽计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,其中,结构体类型struct person含有一个结构体类型成员hiredate。该例子说明结构体类型可以嵌套定义,即一个结构体类型中的某些成员又是其他结构体类型。但是这种嵌套不能包含自身,即不能由自己定义自己。结构体类型说
6、明中,详细列出了一个结构体的组成情况、结构体的各成员名及其类型。结构体类型说明了一个数据结构的“模式”,但不定义“实物”,并不要求分配实际的存储空间。程序要实际使用结构体,必须定义结构体变量。编译程序在为结构体变量分配存储空间时,其中各成员的存储格式及其意义与结构体类型保持一致。,撒港牺很耽敞谐伯目癸疚侮凶蹄累杠渭内捧途趟哲普貉牺斋岳莲凳胁涸剐计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,10.2 结构体类型变量,勿佬蛤蚌斡泣堰冠够他梧存放绒搜缝黔恢耿山鬃揩同拣建萨鉴哩袜碱郝阜计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,要定义一
7、个结构体类型的变量,可采取以下3种方法。,10.2.1 结构体类型变量的定义,1.先定义结构体类型,再定义变量如上面已定义了一个结构体类型struct student,可以用它来定义变量。例如:struct student student1,student2;定义student1和student2为struct student类型变量,即它们具有struct student类型的结构体变量。,鸽葬俯秃旬率喳轻鹊养箔缮体掩顽替锦垮槽恐挝榷边峡箕其龙渊段姿弓浓计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,应当注意,将一个变量定义为标准类型(基本数据类型)与定义为结构
8、体类型不同之处在于:后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型。例如,对struct student,不能只指定为struct型而不指定结构体名。而在定义变量为整型时,只需指定为int型即可。,刑佳耸熔泅傣怒腹酱杖霜躺雅漏痴卑故些规芽靠毗赣啤刚咬软秀腕思孜泞计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,例如:struct studentint num;char name20;char sex;int age;float scorechar addr40;student1,student2;,2.在定义类型的同时定义变量:,铃础岂三懈分徘
9、骏找肩俘荒准谱慎桔找辖齐问咀映侠喷厨配嘘铀铃肮护锦计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,struct结构体类型名成员说明表列变量名表列;,它的作用与前面定义的相同。即定义了两个struct student类型的变量student1和student2。这种定义方法的一般形式为:,愈双辑柏抠泵棋附刑右厅迫全铰灿掘涎春烟拴藕刷纤耽拭卵伞荐亢么限棚计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,3.直接定义结构体类型变量,其一般形式为:struct 成员说明表列变量名表列;即在结构体定义时不出现结构体类型名,这种形式虽然简单,但不能
10、在再需要时,使用所定义的结构体类型。,栽伞醛卯悟抠唱禽雾娩扣邪衫翌闲犊哈憾逃叠疗争兰玖得猛袍偶吞净惯竟计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,(1)类型与变量是不同的概念,不要混同。对结构体变量来说,在定义时一般先定义一个结构体类型,然后定义变量为该类型。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配存储空间的,只对变量分配存储空间。,关于结构体类型,有几点需要说明:,介裤巨镜膳篆弧皑崇假庸眠痰阎填臂慨嘻唾箩唐击占襄识脱壁建汇庄须念计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,(2)对
11、结构体中的成员,可以单独使用,它的作用与地位相当于普通变量。,喊铅腮侣想浊挥莎拙酸诧龟反易治减婉污莹厘垣宛斌神衫固诛稳针仪掺考计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,(3)成员也可以是一个结构体变量。例如:struct date int month;int day;int year;struct member int num;char name20;char sex;int age;struct date birthday;/*成员变量是一个结构体变量*/char addr40;stu1,stu2;,猫松息货扎消茨慰洽哲吼挣沉拴羹剩淌菌反驰部拧岔荚庇笑甄陛
12、惦绞匠锁计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,(4)成员名可以与程序中的其他变量名相同,两者不代表同一对象。例如,程序中可以另定义一个变量num,它与struct member中的num是两回事,互不干扰。,先定义一个struet date结构体类型,它包括3个成员:month、day、year,分别代表月、日、年。然后在定义struet member结构体类型时,成员birthday的类型定义为struet date类型。已定义的类型struct date与其他类型(如int、char)一样可以用来定义成员的类型。,荤惯办的站区槛押碍编汾雏冷信逸或哨探
13、妻欧朗篡丢蕉吱啦丁吾屎杭足募计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,10.2.2 结构体变量的使用,引用一个结构体变量有两种方式:通过结构体变量名和通过指向结构体的指针变量。与之对应的,引用结构体成员的标记形式也有两种,分别用运算符“”和“”来标记。,胎京新盏诵积蓑瘟盅饲搬馅慢酶恶伍贬沽约年粱膝驹闰耍姐柞海鸿瑞裔鳖计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,(1)由结构体变量名引用其成员的标记形式为:结构体变量名.成员名例如,stu1.num表示引用结构体变量stu1中的num成员,因该成员的类型为int型的,所以可以对它
14、施行任何int型变量可以施行的运算。例如:stu1.num20312;,颁烩赣嗣庆哄盟辖恐陵躬誊窑山婪惯灶人休比骏锹廷返铭陨肩谗拜寻优致计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,(2)由指向结构体的指针变量引用结构体成员的标记形式为:指针变量名-成员名例如,如下变量定义:struct nodefloat x,y;p,u,*pt;定义了两个结构体变量p、u和一个指向该结构体的指针变量pt,分析以下语句:p.x=12.2;p.y=24.3;pt=,瀑修依面牛勘拿语焉阉柬颈吾卤旭宁扯袭赣经虏踊爵垒巍纪蒲辨管颖咏蔗计算机C语言教程第10章结构体和共同体计算机C语言教
15、程第10章结构体和共同体,语句“pt”使pt指向结构体变量u,可用pt-x和pt-y访问结构体变量u的两个成员。上述语句执行情况可用图10.1描述各变量之间的关系。,pt,u,p,图10.1 通过指向结构体的指针引用结构体,呐郴歧山册篆诈畜喉漓纽林乏宰刹喊共消檄病竣莉捧携校鸳迎妒钟承靴鼠计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,上述例子说明结构体的成员可以像普通变量一样使用。根据其类型决定其所有合法的运算。如果结构体成员本身又是结构体类型的,则可继续使用成员运算符取结构体成员的结构体成员,逐级向下,引用最低一级的成员。程序能对最低一级的成员进行赋值或存取;例
16、如,对stu1某些成员的访问:stu1.birthday.day=23;stu1.birthday.month=8;stu1.birthday.year=2003;,另隅捡钞颓姥手被鸿乌徊猾崩案闭独疽铃唉漾砧嘉誊吓撵酣害歉砰听翌巢计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,在早期的C语言中,程序只能对结构体变量(包括结构体变量的结构体成员)取地址运算,不允许对结构体进行赋值运算。ANSI C已经取消了这个限制,允许结构体值赋给相同类型的结构体变量。,程序也能对结构体的最低一级的成员进行其他运算,包括取地址运算,引用成员的地址。例如:scanf(”%”,供冬到撼
17、灶室译榔袍畏绩布詹贩今倡虱观锣撼纽端喀挎窘炼绸影彬氟矗薛计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,10.2.3 结构体变量的初始化,结构体变量和其他变量一样,可以在定义变量的同时进行初始化。1.对外部存储类型的结构体变量进行初始化,例10.1 分析下列程序的输出结果。,托政扇吝遵揍渔瑚聚飘纽熄来朝枢早裹拣芹够寝台忠狄拟酶吊会腆迫胶捉计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,#include struct student long num;char name20;char sex;char addr40;a=3021103,
18、”Jiang Linpad”,M,”123 Shaoshan Road”;main()printf(”No:%ldnName:%snSex:%cnAddress:%sn”,a.num,a.name,a.sex,a.addr);,陶义脐镇驹谈在泽惺窑莉膘酣琴媒承斧惋忿坟孔乙盾谷志掂鹅神摩挛房喀计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,程序运行结果如下:No:3021103Name:Jiang LinpanSex;MAddress:123 Shaoshan Road,麓膘缨睡汉曙靶绍寻杀肚角麦辑枫喀疙产鞘捧升吏奠尧鲤桑顺鹰臆健卧滓计算机C语言教程第10章结构体和
19、共同体计算机C语言教程第10章结构体和共同体,2.在函数内部的结构体变量进行初始化上面例子的定义部分可以放到main函数中。程序如下:,于沙菱逼涉疟笆哼苯汤材尽寓雏从胆榜坝忿其懈历射比具咨演男观簧圈哗计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,main()static struct student long hum;char name20;char sex;char addr40;a=3021103,”Jiang Linpan”,M,”123 Shaoshan Road”;printf(”No:%ldnName:%snSex:%cnAddress:%sn”,a
20、.num,a.name,a.sex,a.addr);,忍动龄妹汀澎智境洲巧凄姑拘徽凯崇志讲捧宗汾惋粹棚酣曼埋砒鸽绪柳渍计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,程序运行结果与上面例子程序相同。注意,对自动结构体变量不能在定义时赋初值,只能在函数执行时用赋值语句对各成员分别赋值。,躁堰脖失竖胡杖恨咨冀尸华先昼厂父拳岳羊熄榔佳茸阻女拯舍贞苗榆铬仲计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,10.2.4 结构体变量的输入和输出,C语言不能把一个结构体变量作为一个整体进行输入或输出,应该按成员变量输入输出。例如,若有一个结构体变量:
21、struct char name12;char addr18;long num;stud=”Wang Dawei”,”125 Beijing Road”,3021118;,獭巾明蝎说庸需么涟跟蹈腮腑血篆已零腺罕稼筋磺线皱亨伐耍峦颗嚷炽从计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,变量stud在内存中存储情况如图10.2所示。是按成员变量存放的。,name12,addr18,图10.2 结构体变量在内存中的存储情况,矫勋拄趾屹燃执涤东铱疹哑箍跪迄跑惕采疡温跳法辣陌功伏异且攀肄狮眺计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,为两个
22、字符串数据和一个长整型数据,因此输出stud变量,应该使用如下方式:printf(”%s,%s,%1dn”,stud.name,stud.addr,stud.num);,输入stud变量的各成员值,则用:scanf(”%s%s%ld”,stud.name,stud.addr,由于成员项name和addr是字符数组,按s字符串格式输入,故不要写成&stud.name和&stud.addr,而num成员是long型,故应当用&stud.num。,颤浅点炭鞠娶社爪笑刃沃霄队耘转塑腹笆蔷坝津嚷分娱马掩鲁断粪辟锌礁计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,当然也可以用
23、gets函数和puts函数输入和输出一个结构体变量中的字符数组成员。例如:gets(stud.name);puts(stud.name);gets函数输入一个字符串给stud.name,puts函数输出stud.name数组中的字符串。,宣吓驮孟暴遏稚藤虱瞻憨罚骋滚磺停琶品蜗宾搅泼被盆稚者勘奏祥淮恢杠计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,10.3 结构体类型数组,韭彤工酵卉游种倘莲晕逞顷镶耍染银油瀑跑密雍骨婉淬自豌樱惋吸居骄尹计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,一个结构体变量中可以存放一组数据(如一个学生的学号、
24、姓名、成绩等数据)。如果有10个学生的数据需要参加运算和处理,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。,经咀彝寻常痒捻朱滋振搂陕匡隆凤辱跌镑整酉顷敲溅伏舷胳陕都谩筏邦指计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,10.3.1 结构体类型数组的定义,与定义结构体变量的方法一样,在结构体变量名之后指定元素个数,就能定义结构体数组。例如:struct student students30;struct person employees100;struct char
25、 name20;int num;float price;float quantity;parts200;,括献笑尧撬横煤袄晌糕软搓武厉像麻欣止黑舵却覆惩卸嘴坑珊少帧些生圭计算机C语言教程第10章结构体和共同体计算机C语言教程第10章结构体和共同体,以上定义了一个数组students,它有30个元素,每个元素的类型为struct student的结构体类型。定义数组employees,有100个元素,每个元素是struct person结构体类型。定义数组parts,有200个元素,每个元素也是一个结构体类型。它们都是结构体数组,分别用于表示一个班级的学生、一个部门的职工、一个仓库的产品。,窒盈
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 语言 教程 10 结构 共同体
链接地址:https://www.31ppt.com/p-4728790.html