C语言程序设计  教学课件 ppt 作者 刘明才 第9章 结构体与共用体

上传人:E**** 文档编号:89381814 上传时间:2019-05-24 格式:PPT 页数:93 大小:519KB
返回 下载 相关 举报
C语言程序设计  教学课件 ppt 作者 刘明才 第9章  结构体与共用体_第1页
第1页 / 共93页
C语言程序设计  教学课件 ppt 作者 刘明才 第9章  结构体与共用体_第2页
第2页 / 共93页
C语言程序设计  教学课件 ppt 作者 刘明才 第9章  结构体与共用体_第3页
第3页 / 共93页
C语言程序设计  教学课件 ppt 作者 刘明才 第9章  结构体与共用体_第4页
第4页 / 共93页
C语言程序设计  教学课件 ppt 作者 刘明才 第9章  结构体与共用体_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《C语言程序设计  教学课件 ppt 作者 刘明才 第9章 结构体与共用体》由会员分享,可在线阅读,更多相关《C语言程序设计  教学课件 ppt 作者 刘明才 第9章 结构体与共用体(93页珍藏版)》请在金锄头文库上搜索。

1、第1页 共93页,第9章 结构体与共用体,结构体类型的定义 结构体类型变量 结构体数组 结构体和指针 结构体和函数 链表 共用体 枚举 用typedef定义类型,第2页 共93页,9.1 结构体类型的定义,结构体由若干成员组成,各成员可以是不同的类型。在程序中使用结构体类型,必须先对结构体的组成进行描述(定义)。例如,学生信息可用结构体定义为: struct student int num; char name20; char sex; int age; float score; char addr30; ;,第3页 共93页,其中,关键字struct是结构体类型的标志。struct之后的st

2、udent是结构体名,用花括号括起来的是各个成员的描述(定义)。上例定义的结构体类型struct student有6个成员,分别为num、name、sex、age、score和addr。这6个成员分别表示学生的学号、姓名、性别、年龄、成绩和家庭住址,显然它们的类型是不同的。,第4页 共93页,结构体类型定义的一般形式为: struct 结构体名 成员表列; 其中struct是关键字,结构体名用合法的标识符表示,成员表列的说明形式为: 类型名 成员名;,第5页 共93页,结构体类型定义要注意以下几点。 结构体类型定义只是指定了一种类型(同系统已定义的基本类型,如int、float、char等一样

3、),无具体的数据,系统不分配实际内存单元。 结构体类型的成员可以是任何基本数据类型、数组、指针等,而且可以是已定义的结构体类型。,第6页 共93页,例如,以下定义一个表示日期的结构体类型: struct date int year; int month; int day; 以下定义一个表示学生信息的结构体类型: struct stu int num; char name20; char sex; struct date birthday; /* 成员birthday为结构体类型struct date */ float score3; char addr30; ;,第7页 共93页,9.2 结构

4、体类型变量,结构体类型变量的定义 结构体变量的引用,第8页 共93页,9.2.1 结构体类型变量的定义,先定义结构体类型,再定义变量 这种定义方法的一般形式为: struct 结构体名 成员表; struct 结构体名 变量名表列; 如前面已定义了一个结构体类型struct stu,可以用它来定义变量。例如: struct stu s1,s2;,第9页 共93页,定义s1和s2为struct stu类型的变量,即它们是具有struct stu类型的结构体变量。 定义结构体变量后,系统为它们分配内存单元。系统为结构体变量分配的内存单元是连续的,一个结构体变量所占的内存空间为它的各成员所占字节数之

5、和。 例如,以上结构体变量s1的内存空间分配,如图所示。,第10页 共93页,结构体变量s1的内存空间分配,第11页 共93页,可以用sizeof(变量)或sizeof(类型标识符)求出该变量或该种类型的变量所占的存储空间的字节数。例如表达式“sizeof(s1)”或“sizeof(struct stu)”的值为71(按Turbo C标准)。,第12页 共93页,在定义结构体类型的同时定义变量 这种定义方法的一般形式为: struct 结构体名 成员表变量名表列; 例如: struct st int num; char name20; float score; s1,s2; 它在定义了结构体类

6、型struct st的同时定义了两个该类型的变量s1和s2。,第13页 共93页,直接定义结构体类型变量 这种定义方法的一般形式为: struct 成员表变量名表列; 例如: struct int num; char name20; float score; s1,s2; 即在结构体定义时不出现结构体类型名,这种形式虽然简单,但不能在再需要时,使用定义的结构体类型。建议读者使用前两种方法定义结构体类型变量。,第14页 共93页,9.2.2 结构体变量的引用,在对结构体变量引用时,一般只能对其成员进行直接操作,而不能对结构体变量整体进行操作。引用结构体变量成员的一般形式为: 结构体变量名.成员名

7、 运算符“.”为成员运算符,其结合性是自左至右。 例如: struct date int year; int month; int day; struct example int num; char name20; struct date bir; s1,s2;,第15页 共93页,各成员的引用形式如下: s1.num=101; s2.num=s1.num+1; strcpy(s1.name,“wang“); 如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。例如: s1.bir.year=1985; 结构体变量和其他变量一样,可以在定义变量的同时进行初始

8、化。,第16页 共93页,结构体变量初始化的一般形式如下: 结构体类型 结构体变量名=初始值表; 例如: struct student char name10; float score3; stu=“wang_li“, 81,77,96; 这样,结构体变量stu各成员依次被赋初值:name为“wang_li”,数组score各元素分别为81、77、96。,第17页 共93页,9.3 结构体数组,结构体数组的定义与初始化 结构体数组的引用,第18页 共93页,9.3.1 结构体数组的定义与初始化,结构体数组的定义 结构体数组的定义与结构体变量的定义方法类似,只需说明其为数组即可。例如: stru

9、ct student int num; char name20; char sex; int age; float score3; ; struct student stu10; 以上定义了一个数组stu,其元素为struct student类型变量,数组有10个元素。,第19页 共93页,结构体数组的初始化 结构体数组的初始化与普通的二维数组的初始化类似。例如: struct student int num; char name15; char sex; int age; float score3; stu2=1101,“wang li“,M,21,75,82,94,1102, “li pi

10、ng“,F,20,82,79,90; 定义数组stu时,数组长度可以不指定,即可写成如下形式: stu =, ; 编译时,系统会根据给出的结构体常量的个数来确定数组元素的个数。,第20页 共93页,9.3.2 结构体数组的引用,【例】输入3个复数的实部和虚部放在一个结构体数组中,根据复数的模由小到 大顺序对数组进行排序并输出。(注:复数的模=sqrt(实部*实部+虚部*虚部)) #define N 3 #include #include void main() struct complex /* 定义复数结构体 */ float x; /* x表示实部 */ float y; /* y 表示虚

11、部 */ float m; /* m 表示模 */ aN,temp; /* 定义结构体数组 a */,第21页 共93页,int i,j,k; for(i=0;iN;i+) scanf(“%f%f“, ,第22页 共93页,运行结果如下: 3 2 1 1 5 4 5.00+4.00i 3.00+2.00i 1.00+1.00i 程序说明:程序中的数组a的每个元素存放一个复 数,其中成员x存放实部,成员y存放虚部,成员m 存放模。排序方法采用选择法,如例5.3所述。,第23页 共93页,9.4 结构体和指针,结构体指针变量的定义 指向结构体变量的指针只能指向同一种结构体类型的变量和数组,不能指向

12、结构体变量的成员。例如: struct student int num; char name15; float score3; stu10, x, *p;,第24页 共93页,其中p为指向struct student类型的指针变量,可以为其赋值,如p= 使指针变量p指向结构体变量x,如图所示。,结构体变量与指针变量,第25页 共93页,又如: p=stu; 或p= 使指针变量p指向数组stu的第一个元素 。若执行p=p+1或p+,则p指向数组stu的第二个元素,即stu1。,第26页 共93页,结构体指针变量的引用 定义了结构体指针变量并使它指向某一结构体变量后,即可用指针变量来间接引用对应的

13、结构体变量。例如: struct student int num; char name15; float score3; x=1101, “wang li“, 82,78,90, *p=,第27页 共93页,引用结构体变量x的成员有以下3种方法: x.成员名 (*p).成员名 p-成员名 其中,由于运算符“.”的优先级高于指针运算符“*”,所以中的圆括号不能省略。中的运算符“-”(由减号和大于号组成)称为指向运算符,其优先级与成员运算符“.”一样。,第28页 共93页,9.5 结构体和函数,结构体作函数参数 返回结构体的函数,第29页 共93页,9.5.1 结构体作函数参数,结构体变量作函数参

14、数 【例】输入两个复数,比较这两个复数模是否相等。 #include #include struct comp /* 定义结构体类型 */ float x,y; /* x表示实部,y表示虚部 */ float m; /* m表示模 */ ; float compare(struct comp a, struct comp b) /* 参数为结构体类型 */ a.m=sqrt(a.x*a.x+a.y*a.y); /* 求复数a的模 */ b.m=sqrt(b.x*b.x+b.y*b.y); return (a.m-b.m); /* 模相等返回0,否则非0 */ ,第30页 共93页,void m

15、ain() struct comp a,b; scanf(“%f%f“, ,第31页 共93页,程序运行1: 1 2 2 1 Equal 程序运行2: 1 2 2 2 Unequal 程序说明:程序中结构体类型(struct comp)被定义为外部 类型,这样同一文件中的各个函数都可以用它来定义变量的 类型。在compare函数中用struct comp定义形参变量a和b,在 main函数中用struct comp定义实参变量a和b。,第32页 共93页,【例】编写程序,按复数的模从小到大排序。 #define N 5 #include #include struct comp float x,y; float m; ;,第33页 共93页,void sort(struct comp *p, int n) /* p为指向结构体的指针变量 */ int i,j,k; struct comp t; /* t为结构体变量 */ for(i=0;im(p+j)-m) k=j; /* p+k指向ak */ t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; ,第34页 共93页,void main() struct comp aN; /* a为结构体数组 */ int i; printf(“Input complex:n“); for(i=0;iN;i+)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号