【教学课件】第11章结构体.ppt
《【教学课件】第11章结构体.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第11章结构体.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 十十 一一 章章结结 构构 体与共用休体与共用休1学号姓名性别年龄入学成绩 家庭住址2001001 张三男20570济南历下区89号2001002 李四女19586烟台2001003 王五男21550德洲2例:例:描述一个学生的姓名、学号、性别、年龄。描述一个学生的姓名、学号、性别、年龄。每个学生都有这样的属性,它们构成一个描述学生具体情况的一个每个学生都有这样的属性,它们构成一个描述学生具体情况的一个整体。而每个属性又是一个基本的类型,本例中可分别用字符数组、整体。而每个属性又是一个基本的类型,本例中可分别用字符数组、长整型、字符型、和整型来描述。长整型、字符型、和整型来描述。一、结构
2、体类型的定义一、结构体类型的定义结构体概念的引入结构体概念的引入数据的描述:数据的描述:基本类型基本类型:整型、实型、字符型。:整型、实型、字符型。数组数组:属于同一种类型的元素的集合。:属于同一种类型的元素的集合。有时,需要用不同的数据类型来描述一个事物的各方面属性,故有时,需要用不同的数据类型来描述一个事物的各方面属性,故此,此,C语言引入了语言引入了结构体结构体的概念。的概念。3struct struct 结构体类型名结构体类型名 类型标识符类型标识符 成员名成员名1 1;类型标识符类型标识符 成员名成员名2 2;类型标识符类型标识符 成员名成员名n n;;结构体类型的定义结构体类型的定
3、义如:如:struct student struct student char name10;char name10;long id;long id;char gender;char gender;int age;int age;注意:注意:struct student struct student 应作为一个类型整体,应作为一个类型整体,name10 name10、idid、gendergender、ageage都是其成员。都是其成员。struct struct及花括号后的及花括号后的“;”不能省。不能省。4定义结构体类型,定义结构体类型,描述下列数据描述下列数据 struct studen
4、tstruct student int no int no;/*/*学号学号*/*/char name char name1010;/*/*姓名姓名*/*/char sex char sex;/*/*性别性别*/*/int age int age;/*/*年龄年龄*/*/float score10 float score10;/*/*成绩成绩*/*/;结构体类型的举例结构体类型的举例(1)(1)学生情况学生情况:包含学生的学号、包含学生的学号、姓名、姓名、性别、性别、年龄、年龄、1010门课程成绩:门课程成绩:5 (2)(2)个人数据个人数据:包含姓名、性别、年龄、身高、体重、住址包含姓名、性
5、别、年龄、身高、体重、住址:struct personstruct person char name char name2020;/*/*姓名姓名*/*/char sex char sex;/*/*性别性别*/*/int age int age;/*/*年龄年龄*/*/float height float height;/*/*身高身高*/*/float weight float weight;/*/*体重体重*/*/char addr char addr5050;/*/*住址住址*/*/;6(3)(3)平面上的点平面上的点:struct point2struct point2 float x
6、 float x;/*/*横坐标横坐标*/*/float y float y;/*/*纵坐标纵坐标*/*/;如考虑空间中的点,如考虑空间中的点,可作如下定义:可作如下定义:struct point3struct point3 float x float x;/*X/*X坐标坐标*/*/float y float y;/*Y/*Y坐标坐标*/*/float z float z;/*Z/*Z坐标坐标*/*/;7(4)(4)日期,包括年、月、日日期,包括年、月、日:如职工信息结构体类型为:如职工信息结构体类型为:struct personstruct person char name20;/*cha
7、r name20;/*姓名姓名*/*/char address40;/*char address40;/*地址地址*/*/float salary;/*float salary;/*工资工资*/*/float cost;/*float cost;/*扣款扣款*/*/struct date hiredate;/*struct date hiredate;/*聘任日期聘任日期*/*/;结构体类型可以嵌套定义结构体类型可以嵌套定义 即即一个结构体类型中的某些成员一个结构体类型中的某些成员又是其他结构体类型又是其他结构体类型struct datestruct date int year int yea
8、r;/*/*年年*/*/int month int month;/*/*月月*/*/int day int day;/*/*日日*/*/;注意注意8例如,对已定义的结构体类型例如,对已定义的结构体类型struct student struct student,可以定义结构体,可以定义结构体变量:变量:struct student zhang,stu1 struct student zhang,stu1;struct person p50 struct person p50;/*50/*50个职工人的数据个职工人的数据*/*/二、结构体变量二、结构体变量结构体变量的定义结构体变量的定义1.1.先
9、定义结构体类型,先定义结构体类型,再定义结构体变量再定义结构体变量格式:格式:struct struct 结构体名结构体名 结构体变量名表;结构体变量名表;三种方法:三种方法:92.2.在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量例如:例如:struct studentstruct student char char name10;name10;char sex;char sex;int age;int age;float score;float score;stu1,stu2;stu1,stu2;格式:格式:struct struct 结构体类型名结构体类型名 类型标识符类型
10、标识符 成员名成员名1 1;类型标识符类型标识符 成员名成员名2 2;类型标识符类型标识符 成员名成员名n n;变量名表变量名表;103.3.用匿名形式直接定义结构体类型变量(不出现结构体名)用匿名形式直接定义结构体类型变量(不出现结构体名)例如:例如:structstruct char name10;char name10;char sex;char sex;int age;int age;float score;float score;stu1,stu2;stu1,stu2;格式:格式:structstruct 类型标示符类型标示符 成员名成员名1 1;类型标示符类型标示符 成员名成员名2
11、 2;类型标示符类型标示符 成员名成员名n n;变量名表变量名表;(1 1)类型与变量是不同的概念,不要混同。对结构体变量来说,在定)类型与变量是不同的概念,不要混同。对结构体变量来说,在定义时一般先定义一个结构体类型,然后定义变量为该类型。只能对变量义时一般先定义一个结构体类型,然后定义变量为该类型。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配存储空间的,只对变量分配存储空间。对类型是不分配存储空间的,只对变量分配存储空间。(2 2)对结构体中的成员,可以单独使用,它的作用相当于普通变量。
12、)对结构体中的成员,可以单独使用,它的作用相当于普通变量。(3 3)成员也可以是一个结构体变量。)成员也可以是一个结构体变量。(4 4)成员名可与程序中的变量同名,两者不代表同一对象。)成员名可与程序中的变量同名,两者不代表同一对象。结构体的说明结构体的说明11例。定义结构体变量例。定义结构体变量stu1:stu1:struct student stu1;struct student stu1;stu1.age=20;stu1.age=20;scanf(%f,&stu1.score);scanf(%f,&stu1.score);stu1.age stu1.age 表示引用结构体变量表示引用结构
13、体变量stu1stu1中的中的ageage成员,因该成员的类型成员,因该成员的类型为为intint型,所以可以对它执行任何型,所以可以对它执行任何intint型变量可以执行的运算。型变量可以执行的运算。结构体变量的使用结构体变量的使用结构体变量一般不整体引用,而是引用其成员变量。结构体变量一般不整体引用,而是引用其成员变量。成员变量引用格式成员变量引用格式结构体变量名结构体变量名.成员名成员名其中的圆点运算符称为成员运算符,它的运算级别是最高的。其中的圆点运算符称为成员运算符,它的运算级别是最高的。12(1)(1)结构体类型变量的各成员(分量)必须单独引用结构体类型变量的各成员(分量)必须单独
14、引用,成员运算符成员运算符“”“”具有最高优先级。具有最高优先级。(2)(2)不允许对结构体变量进行整体的输入输出不允许对结构体变量进行整体的输入输出 如:如:scanf(“%s%c%d%f”,&stu1);scanf(“%s%c%d%f”,&stu1);(3)(3)如果结构体变量类型相同,可以互相赋值。如果结构体变量类型相同,可以互相赋值。stu1=stu2;stu1=stu2;(4)(4)严格区分类型与变量的概念。严格区分类型与变量的概念。(5)(5)如如果果结结构构体体成成员员本本身身又又是是结结构构体体类类型型的的,则则可可继继续续使使用用成成员员运运算算符符取取结结构构体体成成员员的
15、的结结构构体体成成员员,逐逐级级向向下下,引引用用最最低低一一级级的的成成员员。程程序只能对最低一级的成员进行运算。例如,对序只能对最低一级的成员进行运算。例如,对stu1stu1某些成员的访问:某些成员的访问:stu1.birthday.day=23 stu1.birthday.day=23;stu1.birthday.month=8 stu1.birthday.month=8;stu1.birthday.year=1985 stu1.birthday.year=1985;说明说明13结构体变量的初始化结构体变量的初始化结构体变量可以在定义时初始化。结构体变量可以在定义时初始化。格式格式st
16、ruct struct 结构体名结构体名 成员表;成员表;结构体变量结构体变量=初始化数据表初始化数据表;例例 struct student struct student char name10;char name10;char sex;char sex;int age;int age;float score;float score;stu1,stu2=“Wangwu”,m,20,88.5;stu1,stu2=“Wangwu”,m,20,88.5;14stru110001010101110131017name10sexagescore结构体变量存储分配结构体变量存储分配15例例 11.1 11
17、.1 求某同学上学期求某同学上学期6 6门课程的总成绩与平均成绩。门课程的总成绩与平均成绩。思路分析:思路分析:可以先构建一个结构体,包含学生的姓名、八可以先构建一个结构体,包含学生的姓名、八门课的成绩、以及总成绩及平均成绩。门课的成绩、以及总成绩及平均成绩。struct student struct student char name char name1010;float score float score6 6;float total float total,average average;;然后在程序中输入姓名及各科成绩后即可进行然后在程序中输入姓名及各科成绩后即可进行运算,运算结果存
18、放到运算,运算结果存放到totaltotal和和averageaverage两个成两个成员变量中。员变量中。16mainmain()int i int i;struct student struct student char name char name1010;float score float score6 6;float total float total,average average;stu stu;scanf scanf(%s%s,stu.namestu.name););for for(i=0i=0;i6;i+)i6;i+)scan scan(%f%f,&stu.score&stu
19、.scorei i););stu.total=0 stu.total=0;for for(i=0i=0;i6;i+)i6;i+)stu.total+=stu.score stu.total+=stu.scorei i;stu.average=stu.total/6 stu.average=stu.total/6;printf printf(”%s”%s的总成绩的总成绩=%.2fn=%.2fn平均成绩平均成绩=%.2f”,=%.2f”,stu.total,stu.average stu.total,stu.average););输入数据:输入数据:CHEN 80 86 79 98 88 72 C
20、HEN 80 86 79 98 88 72 运行结果:运行结果:CHENCHEN的总成绩的总成绩=477.00=477.00平均成绩平均成绩=72.13=72.13 程序如下:程序如下:17与结构体变量定义类似,只是结构体变量名为结与结构体变量定义类似,只是结构体变量名为结构体数组变量名,如:构体数组变量名,如:struct student stu3;struct student stu3;数组各元素在内存中连续存放数组各元素在内存中连续存放三、结构体数组三、结构体数组结构体数组的定义结构体数组的定义结构体数组的初始化结构体数组的初始化一般形式是在定义的数组一般形式是在定义的数组后面加上后面加
21、上 =初值表列初值表列;例。例。struct studentstruct 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=101,”WGJ”,M,28,88.5,”Cstu3=101,”WGJ”,M,28,88.5,”CS”,S”,102,”DYH”,F,26,88.0,”CS”,102,”DYH”,F,26,88.0,”CS”,103,”DYC”,M,24,78.5,”CZ
22、”;103,”DYC”,M,24,78.5,”CZ”;18101”WGJ”M2888.5”CS”102”DYH”F2688.0”CS”103”DYC”M2478.5”CS”stu0stu1stu2 num name sex age score addrstu0 101 WGJ M 28 88.5 CSstu1 102 DYH F 26 88.0 CSstu2 103 DYC M 24 78.5 CS结构体数组的存储分配结构体数组的存储分配19通过下面的示例说明结构体数组的使用方法通过下面的示例说明结构体数组的使用方法 例例11.2 11.2 候选人得票的统计。设有三个候选人,每次输入一个得票候
23、选人得票的统计。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。的候选人的名字,要求最后输出各人得票结果。结构体数组的使用结构体数组的使用struct person char name20;int count;leader3=Zhang,0,Li,0,Wang,0;程序如下:程序如下:20main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;prin
24、tf(n);for(i=0;i成员名成员名结构体变量名.成员名指向运算符优先级:1结合方向:从左向右例 指向结构体的指针变量main()struct student long int num;char name20;char sex;float score;stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,Li Lin);p-sex=M;p-score=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p-score);例 int n;int *p=
25、&n;*p=10;n=10struct student stu1;struct student *p=&stu1;stu1.num=101;(*p).num=10123指向结构体数组的指针例 指向结构体数组的指针struct student int num;char name20;char sex;int age;stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,Wang Min,F,20;main()struct student*p;for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 11 结构
限制150内