九章结构体和共用体.ppt
《九章结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《九章结构体和共用体.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、九章结构体和共用体 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望结构体类型的定义 C语言提供的 结构体 类型,能将具有内在联系的不同类型的数据组合在一起,以便于处理。结构体类型的定义形式:struct 结构体类型 成员表列;例如例如:struct student long int num;char name20;char sex;int age;10001Li FangM18numnamesexage说明:(1)关键字struct和结构体类型名组成一种类型标识符
2、,类型名的起名规则遵从标识符。(2)成员表列列出了本结构体类型所包含的若干个成员。结构体类型变量的定义要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例 (4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例示例(
3、2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例 (4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。结构体类型变量的定义struct student long int num;char name20;char sex;int age;struct student stu1,stu2;要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定
4、义类型的同时定义变量。示例示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例 (4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。结构体类型变量的定义struct student long int num;char name20;char sex;int age;stu1,stu2;要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直
5、接定义结构体类型变量。示例示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例 (4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。结构体类型变量的定义struct long int num;char name20;char sex;int age;stu1,stu2;结构体类型变量的定义要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明
6、:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例示例 (4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。struct date int month;int day;int year;struct student long int num;char name20;char sex;int age;struct date birthday;stu1,stu2;结构体型变量及其成员的引用 结构体型变量可引用的对象:变量名(代表变量的整体),成员名(代表
7、变量的各个成员)。引用时注意:(1)变量成员的引用方法:结构体变量名.成员名 如 stu1.num,stu1.name stu1.birthday.month(2)结构体型变量可以整体引用来赋值,如stu1=stu2。但不可以进行整体的输入 输出,如 printf(“%s”,stu1);是错误的(3)结构体型变量的首地址称为该结构体型变量的地址,其每个成员的首地址称 为该成员的地址,两个地址均可引用。如:scanf(“%d”,&stu1.age);/*输入成员的值*/printf(“0 x%x”,&stu1);/*输出结构体变量的首地址*/结构体型变量的初始化 结构体型变量的初始化,即直接以初
8、值表的形式赋值。如:stu1,stu2的初始化:struct student stu1=99001,Wang lin.M,21;struct student stu2=99002,Liu Dong,F,19;所有结构体型变量均可如此初始化。例1:利用结构体类型,编程计算一名同学5门课的平均分。例2:将上例改为输入任意多人5门课的成绩,求平均分。例 1:利用结构体类型,编程计算一名同学5门课的平均分void main()struct stuscore char name20;float score5;float average;struct stuscore x=Wang wei,90.5,85
9、,70,90,98.5;int i;float sum=0;for(i=0;i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average score of%s is%4.1fn”,x.name,x.average);运行结果:定义结构体类型void main()struct stuscore char name20;float score5;float average;struct stuscore x=Wang wei,90.5,85,70,90,98.5;int i;float sum=0;for(i=0;i5;i+)sum+=x.scor
10、ei;x.average=sum/5;printf(“The average score of%s is%4.1fn”,x.name,x.average);运行结果:Wang Wei90.585709098.5&x定义结构体类型变量结构体类型变量,并初始化例 1:利用结构体类型,编程计算一名同学5门课的平均分void main()struct stuscore char name20;float score5;float average;struct stuscore x=Wang wei,90.5,85,70,90,98.5;int i;float sum=0;for(i=0;i5;i+)s
11、um+=x.scorei;x.average=sum/5;printf(“The average score of%s is%4.1fn”,x.name,x.average);运行结果:Wang Wei90.585709098.5&x计算5门课的总分例 1:利用结构体类型,编程计算一名同学5门课的平均分void main()struct stuscore char name20;float score5;float average;struct stuscore x=Wang wei,90.5,85,70,90,98.5;int i;float sum=0;for(i=0;i5;i+)sum+
12、=x.scorei;x.average=sum/5;printf(“The average score of%s is%4.1fn”,x.name,x.average);运行结果:Wang Wei90.585709098.586.8&x计算5门课的平均分例 1:利用结构体类型,编程计算一名同学5门课的平均分void main()struct stuscore char name20;float score5;float average;struct stuscore x=Wang wei,90.5,85,70,90,98.5;int i;float sum=0;for(i=0;i5;i+)su
13、m+=x.scorei;x.average=sum/5;printf(“The average score of%s is%4.1fn”,x.name,x.average);运行结果:The average score of Wang wei is 86.8Wang Wei90.585709098.586.8&x输出结果例 1:利用结构体类型,编程计算一名同学5门课的平均分#include void main()struct stuscore char name20;float score5;float average;x;int i;float sum;char rep;while(1)pr
14、intf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;sum=0;printf(“n Input name(as XU_jun)and 5 scores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)scanf(“%f”,&x.scorei);for(i=0;i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average score of%s is%4.1fn”,x.name,x.average);例 2
15、:将上例改为输入任意多人5门课的成绩,求平均分。运行结果:#include void main()struct stuscore char name20;float score5;float average;x;int i;float sum;char rep;while(1)printf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;sum=0;printf(“n Input name(as XU_jun)and 5 scores(depart by):n”);scanf(“%s”,x.name);f
16、or(i=0;i5;i+)scanf(“%f”,&x.scorei);for(i=0;i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average score of%d is%4.1fn”,x.name,x.average);例 2:将上例改为输入任意多人5门课的成绩,求平均分。运行结果:Do you want to continue?(Y/N)#include void main()struct stuscore char name20;float score5;float average;x;int i;float sum;char rep
17、;while(1)printf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;sum=0;printf(“n Input name(as XU_jun)and 5 scores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)scanf(“%f”,&x.scorei);for(i=0;i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average score of%d is%4.1fn”,x.name,x.a
18、verage);例 2:将上例改为输入任意多人5门课的成绩,求平均分。运行结果:Do you want to continue?(Y/N)Y#include void main()struct stuscore char name20;float score5;float average;x;int i;float sum;char rep;while(1)printf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;sum=0;printf(“n Input name(as XU_jun)and 5 s
19、cores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)scanf(“%f”,&x.scorei);for(i=0;i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average score of%d is%4.1fn”,x.name,x.average);例 2:将上例改为输入任意多人5门课的成绩,求平均分。运行结果:Do you want to continue?(Y/N)YInput name(as Xu_jun)and 5 scores(depart by):#include void
20、main()struct stuscore char name20;float score5;float average;x;int i;float sum;char rep;while(1)printf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;sum=0;printf(“n Input name(as XU_jun)and 5 scores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)scanf(“%f”,&x.scorei);for(i=0;
21、i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average score of%d is%4.1fn”,x.name,x.average);例 2:将上例改为输入任意多人5门课的成绩,求平均分。运行结果:Do you want to continue?(Y/N)YInput name(as Xu_jun)and 5 scores(depart by):Guo_Yong 80 89.5 99 87.5#include void main()struct stuscore char name20;float score5;float average
22、;x;int i;float sum;char rep;while(1)printf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;sum=0;printf(“n Input name(as XU_jun)and 5 scores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)scanf(“%f”,&x.scorei);for(i=0;i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average scor
23、e of%d is%4.1fn”,x.name,x.average);例 2:将上例改为输入任意多人5门课的成绩,求平均分。运行结果:Do you want to continue?(Y/N)YInput name(as Xu_jun)and 5 scores(depart by):Guo_Yong 80 89.5 99 87.5Do you want to continue?(Y/N)#include void main()struct stuscore char name20;float score5;float average;x;int i;float sum;char rep;whi
24、le(1)printf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;sum=0;printf(“n Input name(as XU_jun)and 5 scores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)scanf(“%f”,&x.scorei);for(i=0;i5;i+)sum+=x.scorei;x.average=sum/5;printf(“The average score of%d is%4.1fn”,x.name,x.avera
25、ge);例 2:将上例改为输入任意多人5门课的成绩,求平均分。运行结果:Do you want to continue?(Y/N)YInput name(as Xu_jun)and 5 scores(depart by):Guo_Yong 80 89.5 99 87.5Do you want to continue?(Y/N)N结构体型数组 数组中的元素为结构体型数据,在构造树、表、队列等数据结构时尤其方便。结构体型数组的定义:和结构体变量的方法相仿,只需说明其为数组即可。如 struct student stu5;结构体型数组的初始化:初始化形式是定义数组时,后面加上=初值列表,如:stru
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用
限制150内