《C语言程序设计》课件第九章11.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《C语言程序设计》课件第九章11.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课件 第九 11
- 资源描述:
-
1、 结构定义和结构变量的引用结构定义和结构变量的引用 结构数组结构数组 指向结构的指针指向结构的指针 结构与函数结构与函数 引用自身的结构引用自身的结构 字段结构字段结构 联合联合 枚举枚举 本章内容本章内容结构定义结构定义 结构变量的作用结构变量的作用 结构变量的初始化结构变量的初始化 结构类型定义的一般形式:结构类型定义的一般形式:struct struct 结构名结构名 成员表列成员表列 ;说明:说明:花括号内是该结构中的各个成员花括号内是该结构中的各个成员 (或称分量或称分量),由它们组成一个结构。,由它们组成一个结构。对各成员都应进行类型说明,即:对各成员都应进行类型说明,即:类型标识
2、符类型标识符 成员名成员名例如,描述学生的结构类型定义为:例如,描述学生的结构类型定义为:struct Studentstruct Student int num;/int num;/*学号学号*/char name20;/char name20;/*姓名姓名*/char sex;/char sex;/*性别性别*/int age;/int age;/*年龄年龄*/float score;/float score;/*成绩成绩*/char addr50;/char addr50;/*地址地址*/;1 1、先定义结构类型再定义结构变量、先定义结构类型再定义结构变量 格式:格式:struct st
3、ruct 结构名结构名,变量变量1,1,变量变量2,2,;structstruct studentstudent int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;char addr50;char addr50;用用studentstudent直接定义变量。如:直接定义变量。如:student student1,student2;student student1,student2;2 2、在定义结构类型的同时定义变量、在定义结构类型的同时定义变量 格
4、式:格式:struct struct 结构名结构名 成员表列成员表列;变量名表列变量名表列;struct studentstruct student int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;char addr50;char addr50;student1,student2;student1,student2;3 3、直接直接定义结构类型变量定义结构类型变量格式:格式:struct struct 成员表列成员表列;变量名表列;变量名表列;st
5、ruct struct int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;char addr50;char addr50;student1,student2;student1,student2;结构类型与结构变量是不同的,结构变结构类型与结构变量是不同的,结构变 量是先定义一个结构类型,后定义结构量是先定义一个结构类型,后定义结构 变量为该类型。变量为该类型。只能对结构变量赋值、存取或运算,不只能对结构变量赋值、存取或运算,不 能对一个类型赋值、存取
6、或运算。编译能对一个类型赋值、存取或运算。编译 时,不能对类型分配存储空间,只能对时,不能对类型分配存储空间,只能对 变量分配存储空间。变量分配存储空间。对结构中的成员对结构中的成员(即即“域域”),可以单独,可以单独使使 用,它的作用与地位相当于普通变量。用,它的作用与地位相当于普通变量。结构成员也可以是一个结构变量。结构成员也可以是一个结构变量。结构成员也可以是一个结构变量结构成员也可以是一个结构变量,例如:例如:struct datestruct date int month;/int month;/*月月 */int day;/int day;/*日日 */int year;/int
7、year;/*年年 */;struct studentstruct student int num;int num;char name20;char name20;char sex;char sex;int age;int age;struct date birthday;struct date birthday;char addr30;char addr30;student1,student2;student1,student2;不能将一个结构变量作为一个整体进行赋值和输出。不能将一个结构变量作为一个整体进行赋值和输出。如:如:printf(printf(”%d,%s,%c,%d,%f,%s
8、n%d,%s,%c,%d,%f,%sn”,student1),student1);只能对结构变量中的各个成员分别输出。只能对结构变量中的各个成员分别输出。引用格式:引用格式:结构变量名结构变量名.成员名成员名 例如:例如:student1.num=10001;student1.num=10001;说明:说明:”.”是结构成员运算符,在所有的运算符中是结构成员运算符,在所有的运算符中 优先级最高,因此可以把优先级最高,因此可以把student1.numstudent1.num作作 为一个整体来看待。为一个整体来看待。注:新的标准已允许将一个结构变量直接赋值给另注:新的标准已允许将一个结构变量直接
9、赋值给另 一个具有相同结构的结构变量。一个具有相同结构的结构变量。如果成员本身又属一个结构类型,则要用若干个如果成员本身又属一个结构类型,则要用若干个 成员运算符,一级一级地找到最低一级的成员。成员运算符,一级一级地找到最低一级的成员。只能对最低级的成员进行赋值或存取及运算。只能对最低级的成员进行赋值或存取及运算。例例 如如:对前面说明的结构变量对前面说明的结构变量student1,student1,可以这样访可以这样访 问成员:问成员:student1.numstudent1.num student1.name student1.name student1.birthday.month st
10、udent1.birthday.month student1.birthday.day student1.birthday.day student1.birthday.year student1.birthday.year对结构成员对结构成员(分量分量)可以像普通变量一样进行各种运算。可以像普通变量一样进行各种运算。例如:例如:student2.score=student1.score;student2.score=student1.score;sum=student1.score+student2.score;sum=student1.score+student2.score;student
11、1.age+;student1.age+;可以引用成员的地址,也可以引用结构变量的地址。可以引用成员的地址,也可以引用结构变量的地址。例如:例如:scanf(scanf(”%d%d”,&student1.num);,&student1.num);/*输入输入student1.numstudent1.num的值的值*/printf(printf(”%0n%0n”,&student1);,&student1);/*输出输出student1student1的首地址的首地址*/但不能用以下语句整体读入结构变量,如:但不能用以下语句整体读入结构变量,如:scanf(scanf(”%d%s%c%d%f%s
12、%d%s%c%d%f%s”,&student1);,&student1);#include#include void main()void main()static struct student static struct student int num;int num;char name char name2020;char sex;char sex;char addr char addr3030;a=10010,“Li Lin”,M,“100 Beijing Road”a=10010,“Li Lin”,M,“100 Beijing Road”printf(“NO:%dnname:%snse
13、x:%cnaddress:%sn”,a.nuprintf(“NO:%dnname:%snsex:%cnaddress:%sn”,a.num,a.name,a.sex,a.addr);m,a.name,a.sex,a.addr);程序运行结果:程序运行结果:NO:10010 NO:10010 name:Li Lin name:Li Lin sex:M sex:M address:100 Beijing Road address:100 Beijing Road 9.2.1 9.2.1 结构数组的定义结构数组的定义 与定义结构变量的方法相似,只需说明其为数组即可。与定义结构变量的方法相似,只需说明
14、其为数组即可。例如:例如:struct student struct student int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;char addr30;char addr30;struct student stu30;struct student stu30;新的标准新的标准C C版本不仅允许对全局的或静态的存储类结版本不仅允许对全局的或静态的存储类结构数组,而且允许对自动存储类结构数组初始化。如:构数组,而且允许对自动存储类结构数组初始化。
15、如:struct student struct student int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;char addr30;char addr30;stu3=stu3=10001,10001,“Li LinLi Lin”,M M,17,86.5,17,86.5,“103 Beijing Road103 Beijing Road”,10002,10002,“Zhang FunZhang Fun”,M M,18,96,18,96,“130
16、Shanghai Road130 Shanghai Road”,10003,10003,“Wang MinWang Min”,F F,19,83.5,19,83.5,“180,Wuhan Road180,Wuhan Road”;定义数组时,元素个数可以不指定。定义数组时,元素个数可以不指定。例如:例如:stu=stu=,;编译时,系统会根据给出初值的结构常量编译时,系统会根据给出初值的结构常量的个数来确定数组元素的个数。的个数来确定数组元素的个数。对结构数组初始化,也可以采用先定义对结构数组初始化,也可以采用先定义 结构类型名,然后在说明结构数组时进结构类型名,然后在说明结构数组时进 行初始化
17、。行初始化。程序运行结程序运行结果如下:果如下:Li Li Zhang Wang Li 2 Zhang 1 Wang 1【例例9.29.2】编写对候选人得票的统计程序。设有编写对候选人得票的统计程序。设有3 3个候选人,个候选人,每次输入每次输入1 1个得票的候选人的名字,要求最后输出各人得票个得票的候选人的名字,要求最后输出各人得票的结果。的结果。struct personstruct person char name20;char name20;int count;int count;leader3=”Li”,0,”Zhang”,0,”Wang”,0;leader3=”Li”,0,”Zha
18、ng”,0,”Wang”,0;#include#include void main()void main()int i,j int i,j char leader_name20;char leader_name20;for(i=1;i4;i+)for(i=1;i4;i+)scanf(”%s”,leader_name);scanf(”%s”,leader_name);for(j=0;j3;j+)for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)if(strcmp(leader_name,leaderj.name)=0)leaderj.coun
19、t+;leaderj.count+;printf(”n”);printf(”n”);for(i=0;i3;i+)for(i=0;iscorepstu-score 以下三种形式是等价的:以下三种形式是等价的:a.a.结构变量名结构变量名.成员名;成员名;b.(b.(*pstu).pstu).成员名;成员名;c.pstu-c.pstu-成员名。成员名。-(减号和大于号减号和大于号)也是一种运算符。它也是一种运算符。它 表示的意义是访问指针所指向的结构中表示的意义是访问指针所指向的结构中 的成员项。的成员项。【例例9.39.3】结构指针在程序中的使用。程序如下:结构指针在程序中的使用。程序如下:st
20、ruct studentstruct studentint num;int num;char name20;char name20;char sex;char sex;int age int age;stu3=10001,stu3=10001,”Li LinLi Lin”,M M,17,17,10002,10002,”Zhang FunZhang Fun”,M M,18,18,10003,10003,”Wang MinWang Min”,F F,19;,19;#include#include void main()void main()struct student struct student
21、*pstu;printf(pstu;printf(”No.name sex agenNo.name sex agen”););for(pstu=stu;pstustu+3;pstu+)for(pstu=stu;pstunum,pstu-name,pstu-num,pstu-name,pstu-sex,pstu-age);pstu-sex,pstu-age);程序运行结果如下:程序运行结果如下:No.name sex ageNo.name sex age10001 Li Lin M 1710001 Li Lin M 1710002 Zhang Fun M 1810002 Zhang Fun M
22、1810003 Wang Min F 1910003 Wang Min F 19一、结构用作函数的参数一、结构用作函数的参数 新的新的C C标准允许用整个结构作为函数的参数传标准允许用整个结构作为函数的参数传递,但必须保证实参与形参的类型相同。递,但必须保证实参与形参的类型相同。说明说明:把一个完整的结构变量作为参数递,虽把一个完整的结构变量作为参数递,虽 然合法,但要将全部成员值一个个传递,然合法,但要将全部成员值一个个传递,费时间又费空间,开销大。如果结构类费时间又费空间,开销大。如果结构类 型还有一些成员是数组,则程序运行的型还有一些成员是数组,则程序运行的 效率会大大降化。在这种情况下
23、,用指效率会大大降化。在这种情况下,用指 针作函数参数比较好,能提高运行效率。针作函数参数比较好,能提高运行效率。【例例9.49.4】结构变量结构变量stustu内含学生学号、姓名和三门课的成绩。要内含学生学号、姓名和三门课的成绩。要 求在求在main()main()函数中赋值,在另外一个函数函数中赋值,在另外一个函数printprint中将它中将它 们打印输出。程序如下:们打印输出。程序如下:#define format#define format”%dn%sn%fn%fn%fn%dn%sn%fn%fn%fn”struct studentstruct studentint num;int n
24、um;char name20;char name20;float score3;float score3;#include#include void main()void main()void print();void print();struct student stu;struct student stu;stu.num=10001;stu.num=10001;strcpy(stu.name,strcpy(stu.name,”Fun junFun jun”););stu.score0=76.8;stu.score0=76.8;stu.score1=98;stu.score1=98;stu.
25、score2=87.6;stu.score2=87.6;print(&stu);print(&stu);void print(p)void print(p)struct student struct student*p;p;printf(format,p-num,p-name,printf(format,p-num,p-name,p-score0,p-score1,p-score0,p-score1,p-score2);p-score2);printf(printf(“nn”););程序运行结果如下:程序运行结果如下:1000110001 Fun jun Fun jun 76.800000 7
展开阅读全文