【精品】c c++语言程序设计(西电版第6章 结构体、共用体与枚举精品ppt课件.ppt
《【精品】c c++语言程序设计(西电版第6章 结构体、共用体与枚举精品ppt课件.ppt》由会员分享,可在线阅读,更多相关《【精品】c c++语言程序设计(西电版第6章 结构体、共用体与枚举精品ppt课件.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C+语言程序设计(西电版)第6章 结构体、共用体与枚举2第第6章章 结构体、共用体与枚构体、共用体与枚举6.1 结构体构体类型的声明型的声明 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化 6.3 结构体数构体数组6.4 结构体与指构体与指针6.5 结构体与函数构体与函数6.6 共用体共用体6.7 枚枚举类型型6.8 类型定型定义语句句typedef6.9 小小结3 一一一一个个个个学学学学生生生生的的的的信信信信息息息息有有有有学学学学号号号号、姓姓姓姓名名名名、性性性性别别、年年年年龄龄、住住住住址址址址、成成成成绩绩等。等。等。等。一一一一本本本本图图书书的的的的信信
2、信信息息息息有有有有分分分分类类编编号号号号、书书名名名名、作作作作者者者者、出出出出版版版版社社社社、出版日期出版日期出版日期出版日期、价格价格价格价格、库库存量存量存量存量等。等。等。等。如何描述如何描述如何描述如何描述这这些些些些类类型不同的相关数据?型不同的相关数据?型不同的相关数据?型不同的相关数据?6 6.1.1 结构体构体类型的声明型的声明 信息管理信息管理结构体构体一种构造数据一种构造数据类型型结构体构体由若干不同由若干不同类型的数据型的数据项组成,成,构成构成结构体的各个数据构体的各个数据项称称为结构体成构体成员。4 6 6.1.1 结构体构体类型的声明型的声明结构体类型定义
3、的一般形式:结构体类型定义的一般形式:结构体类型定义的一般形式:结构体类型定义的一般形式:lstruct为关关键字字,不不能能省略;省略;l结构构体体名名是是该结构构体体类型型的的名名称称,命命名名应符符合合标识符符的的定定义要要求。求。成成员可可以以是是任任何何类型型的的变量量,包包括括基基本本数数据据类型型和和构构造造数数据据类型型,如如整整型型、浮浮点点型型和和字字符符型型,数数组和和指指针等等,也也可可以以是是另另一一个个结构构体体类型型的的结构构体体变量量或或自身自身结构体的指构体的指针,还可以是共用体可以是共用体变量。量。struct 结构体名构体名 数据数据类型型1 成成员名名1
4、;数据数据类型型2 成成员名名2;数据数据类型型n 成成员名名n;5例例6.1一个学生的基本信息由学号、姓名、性一个学生的基本信息由学号、姓名、性别、成成绩组成,声明相成,声明相应的的结构体构体类型。型。struct student int num;/*学号是整型学号是整型*/char name20;/*姓名是字符数姓名是字符数组类型型*/char sex;/*性性别是字符型是字符型*/float score;/*成成绩是是实型型*/;6 6.1.1 结构体构体类型的声明型的声明numnum4 4个字节个字节个字节个字节namename2 20 0个字节个字节个字节个字节sexsex1 1个字
5、节个字节个字节个字节scorescore4 4个字节个字节个字节个字节6 6.1.1 结构体构体类型的声明型的声明说说明:明:明:明:(1)(1)结结构体声明的位置,可以在函数内部,也可构体声明的位置,可以在函数内部,也可构体声明的位置,可以在函数内部,也可构体声明的位置,可以在函数内部,也可以在函数外部。在函数内部声明的以在函数外部。在函数内部声明的以在函数外部。在函数内部声明的以在函数外部。在函数内部声明的结结构体,只能在函构体,只能在函构体,只能在函构体,只能在函数内部使用;在函数外部声明的数内部使用;在函数外部声明的数内部使用;在函数外部声明的数内部使用;在函数外部声明的结结构体,其有
6、效范构体,其有效范构体,其有效范构体,其有效范围围是从声明是从声明是从声明是从声明处处开始,直到它所在的源程序文件开始,直到它所在的源程序文件开始,直到它所在的源程序文件开始,直到它所在的源程序文件结结束。束。束。束。(2)(2)数据数据数据数据类类型相同的数据型相同的数据型相同的数据型相同的数据项项,既可逐个、逐行分,既可逐个、逐行分,既可逐个、逐行分,既可逐个、逐行分别别声明,也可以合并成一行声明。如例声明,也可以合并成一行声明。如例声明,也可以合并成一行声明。如例声明,也可以合并成一行声明。如例6.26.2中的日期中的日期中的日期中的日期结结构体构体构体构体类类型,也可改型,也可改型,也
7、可改型,也可改为为如下声明形式:如下声明形式:如下声明形式:如下声明形式:struct datestruct date int year,month,day int year,month,day;86 6.1.1 结构体构体类型的声明型的声明(3)同一同一结构体构体类型中的各成型中的各成员不可以互相不可以互相重名,但不同重名,但不同结构体构体类型型间的成的成员可以重名。可以重名。成成员名可以和程序中的名可以和程序中的变量名相同,两者代表量名相同,两者代表不同的不同的对象,互不干象,互不干扰。如下声明是正确的:。如下声明是正确的:int x,y;/*基本数据基本数据类型型变量量*/struct
8、point int x,y;/*结构体构体point中的一个成中的一个成员*/;96 6.1.1 结构体构体类型的声明型的声明(4)(4)结结构体中成构体中成构体中成构体中成员员的的的的类类型不能是被描述的型不能是被描述的型不能是被描述的型不能是被描述的结结构体本身。如下描述构体本身。如下描述构体本身。如下描述构体本身。如下描述是非法的:是非法的:是非法的:是非法的:struct invalidstruct invalid int n;int n;struct invalid iv;struct invalid iv;10若成若成若成若成员类员类型是描述的型是描述的型是描述的型是描述的结结构体
9、本身的指构体本身的指构体本身的指构体本身的指针针是合法是合法是合法是合法的。如:的。如:的。如:的。如:struct invalid int n;struct invalid*iv;116.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化 例如:例如:例如:例如:struct studentstruct student stu1,stu2,*p,stu10;stu1,stu2,*p,stu10;1.1.先定先定先定先定义结义结构体,再构体,再构体,再构体,再说说明明明明结结构体构体构体构体变变量。量。量。量。6 6.2.1 2.1 结结构体构体构体构体变变量的定量的定量的定量
10、的定义义 struct 结构体名构体名 若干成若干成员说明明;struct 结构体名构体名 结构体构体变量名表量名表;126.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化 也可以使用宏定也可以使用宏定也可以使用宏定也可以使用宏定义义用一个符号常量来用一个符号常量来用一个符号常量来用一个符号常量来表示一个表示一个表示一个表示一个结结构体构体构体构体类类型。例如:型。例如:型。例如:型。例如:#define#define STUSTU struct student struct studentstruct studentstruct student int num;int n
11、um;char name20;char name20;char sex;char sex;float score;float score;STUSTU stu1,stu2;stu1,stu2;6 6.2.1 2.1 结结构体构体构体构体变变量的定量的定量的定量的定义义 136.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化2 2、在定、在定、在定、在定义结义结构体构体构体构体类类型的同型的同型的同型的同时时定定定定义变义变量量量量例如:例如:struct student int num;char name20;char sex;float score;stu1,stu2;6
12、 6.2.1 2.1 结结构体构体构体构体变变量的定量的定量的定量的定义义 struct 结构体名构体名 若干成若干成员说明明 结构体构体变量名表量名表;146.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化3 3、直接、直接、直接、直接说说明明明明结结构体构体构体构体类类型型型型变变量量量量 例如:例如:struct char name20;char sex;int num;float score;stu1,stu2;6 6.2.1 2.1 结结构体构体构体构体变变量的定量的定量的定量的定义义 struct 若干成若干成员说明明 结构体构体变量名表量名表;156.2 6.
13、2 结构体构体变量的定量的定义、引用和初始化、引用和初始化注意:注意:l l结构构体体类型型与与结构构体体变量量是是两两个个不不同同的的概概念念,其其区区别如如同同int类型型与与int型型变量量的的区区别一一样。编译系系统不不为结构构体体类型型分分配配空空间,只只对结构构体体变量量分分配配空空间。结构构体体类型型变量量所所占占内内存存空空间是是各各成成员变量量所所占占内内存存单元元的的总和和,各各成成员间占占用用的的存存储单元元是是连续的。的。l l结构构体体变量量中中的的成成员可可以以单独独使使用用,它它的的作用与地位相当于普通作用与地位相当于普通变量。量。6 6.2.1 2.1 结结构体
14、构体构体构体变变量的定量的定量的定量的定义义 166.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化6.2.2 结构体构体变量引用量引用结结构体构体构体构体变变量成量成量成量成员员引用的一般形式引用的一般形式引用的一般形式引用的一般形式:结结构构体体变变量量a的的各各成成员员可可分分别别表表示示为为a.num、a.name、a.sex、a.birthday、a.score struct date int year,month,day;struct student int num;char name20,sex;struct date birthday;float score
15、;a;“.”是分量运是分量运是分量运是分量运算符,运算级算符,运算级算符,运算级算符,运算级别最高。别最高。别最高。别最高。a.birthday.yeara.birthday.montha.birthday.day 结构体变量的各个成员可结构体变量的各个成员可结构体变量的各个成员可结构体变量的各个成员可进行何种运算,由该成员进行何种运算,由该成员进行何种运算,由该成员进行何种运算,由该成员的数据类型决定的数据类型决定的数据类型决定的数据类型决定 结构体变量名结构体变量名.成员名成员名176.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化6 6.2.2 2.2 结结构体构体构
16、体构体变变量引用量引用量引用量引用注意:注意:(1)不能将一个不能将一个结构体构体变量作量作为一个整体一个整体进行行输入和入和输出,只能出,只能对其成其成员操作。例如,下操作。例如,下列引用是非法的:列引用是非法的:printf(%d,%s,%c,%f,stu1);(2)所引用的成所引用的成员变量与其所属量与其所属类型的普通型的普通变量使用方法一量使用方法一样,可以,可以进行行该类型所允型所允许的的任何运算。任何运算。186.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化6 6.2.2 2.2 结结构体构体构体构体变变量引用量引用量引用量引用(3)只有当两个只有当两个结构体
17、构体变量具有完全相同的量具有完全相同的结构体构体类型型时,相互之,相互之间才可以整体才可以整体赋值。(4)在用在用scanf语句句输入入结构体构体变量的成量的成员时,输入表列同入表列同样要用地址。如:要用地址。如:scanf(%c,&stu1.sex);(5)如果成如果成员本身是另一个本身是另一个结构体构体变量,在引量,在引用用时则要用若干个成要用若干个成员运算符,一运算符,一级一一级地地找到最低的成找到最低的成员变量,而且只能量,而且只能对最低的成最低的成员变量量进行行赋值或者运算操作。或者运算操作。196.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化6 6.2.3 2
18、.3 结结构体构体构体构体变变量的初始化量的初始化量的初始化量的初始化【例例例例6 6.3 3】结结构体构体构体构体变变量的初始化、量的初始化、量的初始化、量的初始化、赋值赋值、输输入和入和入和入和输输出出出出 。#include stdio.h#include stdio.hstruct student /*struct student /*定定定定义结义结构体构体构体构体*/int num;int num;char*name;char*name;char sex;char sex;float score;float score;stu1,stu2,stu3=102,Zhang ping,M
19、,78.5;stu1,stu2,stu3=102,Zhang ping,M,78.5;如果初如果初值个数少于个数少于结构体成构体成员个数,个数,则将无初将无初值对应的成的成员赋以以0 0值。如果初如果初值个数多于个数多于结构体成构体成员个数,个数,则编译出出错。struct struct 结结构体名构体名 结构体变量结构体变量=初始化列表初始化列表;206.2 6.2 结构体构体变量的定量的定义、引用和初始化、引用和初始化6 6.2.3 2.3 结结构体构体构体构体变变量的初始化量的初始化量的初始化量的初始化void main()void main()stu1.num=102;stu1.num
20、=102;stu1.name=Zhang ping;stu1.name=Zhang ping;printf(input sex and scoren);printf(input sex and scoren);scanf(%c%f,&stu1.sex,&stu1.score);scanf(%c%f,&stu1.sex,&stu1.score);printf(stu1:Number=%dnName=%sn,stu1.num,stu1.printf(stu1:Number=%dnName=%sn,stu1.num,stu1.name);name);printf(Sex=%cnScore=%.2fn
21、,stu1.sex,stu1.score);printf(Sex=%cnScore=%.2fn,stu1.sex,stu1.score);stu2=stu3;stu2=stu3;printf(stu2:Number=%dnName=%sn,stu2.num,stu2.printf(stu2:Number=%dnName=%sn,stu2.num,stu2.name);name);printf(Sex=%cnScore=%.2fn,stu2.sex,stu2.score);printf(Sex=%cnScore=%.2fn,stu2.sex,stu2.score);216.3 结构体数构体数组6
22、 6.3.1 3.1 结结构体数构体数构体数构体数组组的定的定的定的定义义 定定定定义结义结构体数构体数构体数构体数组组的方法也有三种方式:的方法也有三种方式:的方法也有三种方式:的方法也有三种方式:l l 先定先定先定先定义结义结构体构体构体构体类类型然后再定型然后再定型然后再定型然后再定义结义结构体数构体数构体数构体数组组;l l 在定在定在定在定义结义结构体构体构体构体类类型的同型的同型的同型的同时时定定定定义结义结构体数构体数构体数构体数组组;l l 在定在定在定在定义义无名无名无名无名结结构体构体构体构体类类型的同型的同型的同型的同时时定定定定义结义结构体数构体数构体数构体数组组。s
23、truct studentstruct student int num;int num;char name20;char name20;char sex;char sex;float score;float score;stu3;stu3;226.3 结构体数构体数组6 6.3.2 3.2 结结构体数构体数构体数构体数组组的引用的引用的引用的引用for(i=0;i3;i+)for(i=0;i3;i+)scanf(%d,&stui.num);scanf(%d,&stui.num);fflush(stdin);fflush(stdin);gets(stui.name);gets(stui.name
24、);scanf(%c%f,&stui.sex,&stui.score);scanf(%c%f,&stui.sex,&stui.score);结构体数构体数组名名下下标.成成员名名236.3 结构体数构体数组6 6.3.3 3.3 结结构体数构体数构体数构体数组组的初始化的初始化的初始化的初始化struct student int num;char*name;char sex;float score;stu3=101,Zhao lei,M,45,102,Sun hui,M,62.5,103,Li fang,F,92.5stu0stu1stu2101Zhao leiM45102Sun huiM62
25、.5103Li fangF92.5246.3 结构体数构体数组6 6.3.3 3.3 结结构体数构体数构体数构体数组组的初始化的初始化的初始化的初始化元素的个数可以省略,根据元素的个数可以省略,根据赋初初值时结构构体常量的个数确定数体常量的个数确定数组元素的个数元素的个数。内内层的大括号只是的大括号只是为了了阅读程序的方便,程序的方便,可以省略。可以省略。结构体数构体数组名是名是结构体数构体数组存存储的首地的首地址,可以通址,可以通过数数组名利用指名利用指针法或下法或下标法法访问数数组元素。元素。256.3 结构体数构体数组6 6.3.3 3.3 结结构体数构体数构体数构体数组组的初始化的初始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 【精品】c c+语言程序设计西电版第6章 结构体、共用体与枚举精品ppt课件 c+ 语言程序设计 西电版第 结构 共用 枚举 ppt 课件
限制150内