九章结构体和共用体.ppt
《九章结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《九章结构体和共用体.ppt(62页珍藏版)》请在三一办公上搜索。
1、第九章 结构体和共用体,本章介绍了C语言中的最后几种数据类型:结构体、共用体、位段以及如何使用typedef定义类型。其中结构体类型是重点,要求掌握定义、引用、初始化及应用等。结构体与指针的结合既是本章的重点又是难点。最后,介绍了内存的动态分配和单向链表的简单操作。,结构体 结构体型指针 共用体 用typedef定义类型,结构体型数组 内存的动态分配 位段 程序示例,结构体类型的定义,C语言提供的 结构体 类型,能将具有内在联系的不同类型的数据组合在一起,以便于处理。,结构体类型的定义形式:struct 结构体类型 成员表列;,例如:struct student long int num;ch
2、ar name20;char sex;int age;,10001,Li Fang,M,18,num,name,sex,age,说明:(1)关键字struct和结构体类型名组成一种类型标识符,类型名的起名规则遵从标识符。(2)成员表列列出了本结构体类型所包含的若干个成员。,结构体类型变量的定义,要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也
3、可以是一个结构体变量 示例(4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。,要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例(4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。,结构体类型变量的定义,struct student long int num;char
4、name20;char sex;int age;struct student stu1,stu2;,要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例(4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。,结构体类型变量的定义,struct student long int num;char na
5、me20;char sex;int age;stu1,stu2;,要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例(4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。,结构体类型变量的定义,struct long int num;char name20;char sex;int age;stu
6、1,stu2;,结构体类型变量的定义,要定义一个结构体类型的变量,可以采用以下三种方法:(1)先定义类型在定义变量名。示例(2)在定义类型的同时定义变量。示例(3)直接定义结构体类型变量。示例说明:(1)第一种定义形式最好,概念清楚,易于扩充移植。(2)结构体型变量所占内存空间是各成员变量所占内存单元的总和,一般占一片连续单元。(3)成员也可以是一个结构体变量 示例(4)同一结构体类型中的各成员不可重名,但不同结构体类型间的各成员可以重名。,struct date int month;int day;int year;struct student long int num;char name2
7、0;char sex;int age;struct date birthday;stu1,stu2;,结构体型变量及其成员的引用,结构体型变量可引用的对象:变量名(代表变量的整体),成员名(代表变量的各个成员)。引用时注意:(1)变量成员的引用方法:结构体变量名.成员名 如 stu1.num,stu1.name stu1.birthday.month(2)结构体型变量可以整体引用来赋值,如stu1=stu2。但不可以进行整体的输入 输出,如 printf(“%s”,stu1);是错误的(3)结构体型变量的首地址称为该结构体型变量的地址,其每个成员的首地址称 为该成员的地址,两个地址均可引用。如
8、:scanf(“%d”,/*输出结构体变量的首地址*/,结构体型变量的初始化,结构体型变量的初始化,即直接以初值表的形式赋值。如: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;flo
9、at 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.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,9
10、0.5,85,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);,运行结果:,&x,定义结构体类型变量,并初始化,例 1:利用结构体类型,编程计算一名同学5门课的平均分,void main()struct stuscore char name20;float score5;float average;struct stuscore x=Wang wei,90.5,85,70,90,9
11、8.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);,运行结果:,&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=
12、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);,运行结果:,&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
13、+=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.8,&x,输出结果,例 1:利用结构体类型,编程计算一名同学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
14、 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”,例 2:将上例改为输入任意多人5门课的成绩,求平均分。,运行结果:,#include void main()struct stuscore char name20;float score5;float average;x;int i;float sum;char rep;wh
15、ile(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”,例 2:将上例改为输入任意多人5门课的成绩,求平均分。,运行结果:Do you want to continue?(Y/N),#include void main()struct stuscore char name
16、20;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”,例 2:将上例改为输入任意多人5门课的成绩,求平均分。,运行结果:Do you want to c
17、ontinue?(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 scores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)
18、scanf(“%f”,例 2:将上例改为输入任意多人5门课的成绩,求平均分。,运行结果:Do you want to continue?(Y/N)YInput name(as Xu_jun)and 5 scores(depart by):,#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)
19、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”,例 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;flo
20、at 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”,例 2:将上例改为输入任意多人5门课的成绩,求平均分。,运行结果:Do you want to continu
21、e?(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;while(1)printf(“n Do you want to continue?(Y/N)”);rep=getche();if(rep=n|rep=N)break;,sum=0;
22、printf(“n Input name(as XU_jun)and 5 scores(depart by):n”);scanf(“%s”,x.name);for(i=0;i5;i+)scanf(“%f”,例 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,结构体型数组,数组中的元素为结构体型数据,在构造树、表、队列等数据结
23、构时尤其方便。结构体型数组的定义:和结构体变量的方法相仿,只需说明其为数组即可。如 struct student stu5;结构体型数组的初始化:初始化形式是定义数组时,后面加上=初值列表,如:struct student stu2=99001,“Wang Jian”,F,20,99002,“Liu Li”,M,19;示例:用结构体型数组初始化建立一工资登记表,然后键入其中一人的 姓名,查询其工资情况。,结构体数组示例,例 3:用结构体数组初始化建立一工资登记表,键入其中一人姓名,查询其工资情况。,int i;char xname20;printf(nInput the workers nam
24、e:);Scanf(%s,xname);for(i=0;i3;i+)if(strcmp(xname,workeri.name)=0)printf(*%s*,xname);printf(nsalary:%6d,workeri.salary);printf(ncost:%6d,workeri.cost);printf(npayed:%6dn,workeri.salary-workeri.cost);,#includevoid main()struct staff char name20;char departmet20;int salary;int cost;worker3=Xu_Guo,part
25、1,800,200,Wu_Xia,part2,1000,300,Li_Jun,part3,1200,350;,结构体数组示例,例 3:用结构体数组初始化建立一工资登记表,键入其中一人姓名,查询其工资情况。,运行结果:Input the workers name:Wu_Xia,int i;char xname20;printf(nInput the workers name:);Scanf(%s,xname);for(i=0;i3;i+)if(strcmp(xname,workeri.name)=0)printf(*%s*,xname);printf(nsalary:%6d,workeri.sa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用

链接地址:https://www.31ppt.com/p-5320291.html