《c语言程序设计基础》7构造数据类型.ppt
《《c语言程序设计基础》7构造数据类型.ppt》由会员分享,可在线阅读,更多相关《《c语言程序设计基础》7构造数据类型.ppt(84页珍藏版)》请在三一办公上搜索。
1、第7章 构造数据类型,第7章 构造数据类型,本章内容,7.2 结构体与结构体类型变量的定义,7.3 结构体变量的使用及初始化,7.4 结构体数组,7.1 构造数据类型概述,7.5 结构体指针,第7章 构造数据类型,本章内容,7.7 共用体,7.8 枚举类型,7.9 用typedef定义类型,7.6 结构体作函数参数,7.1 构造数据类型概述,构造数据类型是C语言的一个特色,它是由一些简单数据类型构造而来的。前面所学的数组就是其中最基本的的一种。数组是由若干类型相同的元素构成,在内存中占用一块连续的区域并且按顺序存放,例如学生成绩单、字符串、矩阵、数据表格等都可以用数组来表示,它们的元素具有同样
2、的数据类型。但在实际程序设计中,我们经常要把一些类型不同却又紧密联系的数据项组织在一起加以处理。,7.2 结构体与结构体类型变量的定义,本节内容,7.2.2 结构体变量的定义,7.2.1 结构体的定义,7.2.1 结构体的定义,就本质而言,结构体是一种较为复杂的构造类型数据。它是由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员也叫成员变量。在使用结构体类型前我们首先要对结构体内所包含信息作一说明,即定义结构体。,struct 结构体名 数据类型1 成员名1;数据类型2 成员名2;数据类型n 成员名n;,7.2.1 结构体的定义,struct为关键字,它表示一个结构体定义的开始,
3、它与其后的结构体名一起代表某一特定的结构体类型。结构体名是由用户自己定义的合法标识符。成员表列由一对花括号括起来,其中每个成员都是该结构体的一个组成部分,并且必须列出其类型和变量的名称。结构体中各成员之间用分号隔开。并且结构体定义也是用分号作为结束标志的,此处的分号不能省略,因为结构体定义在程序中就是一条说明语句。,7.2.1 结构体的定义,在定义结构体时,有以下几点说明:定义结构体类型只是说明该类结构体数据的组织形式,在程序编译时系统不会给结构体类型分配空间,只有定义了结构体变量,系统为该结构体变量分配空间。,struct date int year;int month;int day;st
4、ruct date da1,da2;,7.2.1 结构体的定义,结构体成员可以是任何基本数据类型的变量,如int、char、float、double等,也可以是数组、指针类型的变量。这些成员变量可以是同一类型也可以是不同类型。,struct student int num;char name20;int*age;char sex;float score4;,7.2.1 结构体的定义,结构体类型可以嵌套定义,即结构体成员也可以是结构体类型的变量。,struct student int num;car name20;int age;char sex;struct date int year;int
5、 month;int day;birthday;,struct date int year;int month;int day;struct student int num;char name20;int age;char sex;struct date birthday;,7.2.2 结构体变量的定义,为了能够在程序中使用结构体类型,必须定义结构体类型的变量,定义结构体变量的方法主要有以下四种:先定义结构体类型,再定义结构体变量。,struct studentint num;char name20;char sex;float score5;struct student stu1,stu2;
6、,7.2.2 结构体变量的定义,在定义结构类型的同时定义结构体变量。直接说明结构体变量。,struct studentint num;char name20;char sex;float score5;stu1,stu2;,structint num;char name20;char sex;float score5;stu1,stu2;,7.2.2 结构体变量的定义,先使用typedef定义结构体类型,给结构体类型起别名,再用别名定义结构体变量。这样在定义结构体变量的时候就可以既使用新的类型studentinfo来定义变量,又可以用struct student 来定义变量,,typedef
7、struct studentint num;char name20;char sex;float score5;studentinfo;studentinfo stu1,stu2;,typedef struct int num;char name20;char sex;float score5;studentinfo;,7.2.2 结构体变量的定义,按照结构体类型的组成,系统为定义的结构体变量分配内存单元。结构体变量的各个成员在内存中占用连续存储区域,结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和。以上定义的结构体变量各成员所占内存单元如表所示(以VC环境为例):,7.3 结构体
8、变量的使用及初始化,本节内容,7.3.2 结构体变量的初始化,7.3.1 结构体变量的使用,7.3.1 结构体变量的使用,结构体作为一种新的数据类型,在定义结构体变量之后,可以像基本类型变量一样赋值、运算,不同的是结构体变量不能整体引用,只能引用它的成员变量。7.3.1.1 结构体成员变量使用的一般方式结构体变量名.成员名birthday.year、birthday.month、birthday.day,birthday.year=1988;birthday.month=2;birthday.day=14,7.3.1 结构体变量的使用,可以将一个结构体变量赋值给另一个结构体变量。进行赋值的结构
9、体变量必须是同一类型的结构体变量。如果stu1已经赋值,则可以通过语句stu2=stu1将stu1的值赋给同类型的结构体变量stu2。,struct studentint num;char name20;char sex;float score5;struct student stu1,stu2;,7.3.1 结构体变量的使用,#include typedef struct char name10;int age;STD;STD fun(STD std,int n)STD max;int i;max=std1;for(i=0;in;i+)if(max.agestdi.age)max=stdi;
10、return max;main()STD std5=A01,18,A02,17,A03,16,A04,17,A05,19;STD max;max=fun(std,5);printf(The result:);printf(nName:%s,Age:%dn,max.name,max.age);,7.3.1 结构体变量的使用,7.3.1.2 嵌套结构体中成员变量的使用对于嵌套的结构体,如果要使用内部嵌套的结构体的成员变量,则需要连续的使用“.”运算符。使用内部结构体的成员变量month用“stu1.date.month”的形式。,struct student int num;char name20
11、;struct date int month;int day;int year;birthday;stu1,stu2;,7.3.1 结构体变量的使用,#include typedef struct int num;char name10;char sex;struct int year,month,day;birthday;float score3;STU;void show(STU tt)/定义函数show int i;printf(%d%s%c%d-%d-%d,tt.num,tt.name,tt.sex,);for(i=0;i3;i+)printf(%5.1f,tt.scorei);pri
12、ntf(n);main()STU std=1,LiuYang,M,1980,5,18,82.5,69.0,85.0;printf(A student data:n);show(std);,7.3.2 结构体变量的初始化,对应结构体变量的定义形式,结构体变量初始化也有四种方法:,方法一:struct 结构体名 类型名 成员名;类型名 成员名;.;struct 结构体名 结构体变量=初值表;,方法二:struct 结构体名 类型名 成员名;类型名 成员名;.结构体变量=初值表;,方法三:struct 类型名 成员名;类型名 成员名;.结构体变量=初值表;,方法四:typedef struct 结构
13、体名 类型名 成员名;类型名 成员名;.结构体名1;结构体名1 结构体变量=初值表;,初始表中数据的个数应和成员项一致,各初值间用逗号隔开。按成员的先后顺序对应赋值,如果初值个数少,则将无初值对应的成员赋以0值。如果初值个数多,则编译出错。有嵌套结构的结构体类型,赋初值也一一对应。,struct date int year,month,day;struct student char num8,name20,sex;struct date birthday;float score;a=“0506011,Liu Qing,M,1980,12,9,83,b=“0508015,Zhao Ying,F,
14、1981,3,20,86,c;,#include struct student int num;char*name;char sex;float score;stu2,stu1=1002,Liu Qing,M,82.5;/定义全局结构变量main()stu2=stu1;printf(Number=%dnName=%sn,stu2.num,stu2.name);printf(Sex=%cnScore=%fn,stu2.sex,stu2.score);,#include main()struct student/定义结构 int num;char*name;char sex;float score
15、;stu2,stu1=1002,Liu Qing,M,82.5;/定义局部结构变量stu2=stu1;printf(Number=%dnName=%sn,stu2.num,stu2.name);printf(Sex=%cnScore=%fn,stu2.sex,stu2.score);,7.4 结构体数组,本节内容,7.4.2 结构体数组的初始化,7.4.3 结构体数组的使用,7.4.1 结构体数组的定义,7.4.1 结构体数组的定义,先定义结构体类型,再定义结构体数组。在定义结构类型的同时说明结构体数组。,struct student int num;char name20;char sex;
16、int age;struct student stu2;,struct studentint num;char name20;char sex;float score;stu5;,7.4.1 结构体数组的定义,直接说明结构体数组。使用typedef定义结构体类型,再定义数组。,struct int num;char name20;char sex;int age;stu2;,typedef struct student int num;char name20;char sex;int age;studentinfo;studentinfo stu2;,7.4.2 结构体数组的初始化,定义结构体
17、类型时初始化结构体数组。,struct 结构体名成员表;数组名大小=初值表;,struct studentint num;char*name;char sex;float score;stu5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58;,先定义结构体类型,然后定义结构体数组并初始化。,struct 结构名 成员表;;struct 结构名 数组名大小=初值表;,struct student int num;char*name;char sex;f
18、loat score;struct student stu5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58;,7.4.3 结构体数组的使用,可以把一个数组元素赋予另一个数组元素,从而实现结构变量之间的整体赋值。students3=students2;可以单独地把一个结构体数组元素中的一个成员的值赋予另一数组元素中的一个同类型的成员。students3.num=students2.num一旦定义了一个结构体数组,编译时就为它分配一片连续的内存空间。和
19、其他类型的数组一样,各数组元素是连续存放的,只是结构体数组的元素是定义过的结构体类型数据。,#include struct student int num;char*name;char sex;float score;stu5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58;,7.4.3 结构体数组的使用,main()int i,c=0;float ave,sum=0;for(i=0;i5;i+)sum+=stui.score;if(stui.sco
20、re60)c+=1;printf(sum=%fn,sum);ave=sum/5;printf(average=%fncount=%dn,ave,c);,#includestdio.h#define NUM 3struct mem char name20;char phone10;main()struct mem peopNUM;int i;for(i=0;iNUM;i+)printf(input name:n);gets(mani.name);printf(input phone:n);gets(peopi.phone);printf(namettphonen);for(i=0;iNUM;i+
21、)printf(%stt%sn,peopi.name,peopi.phone);,7.5 结构体指针,本节内容,7.5.2 指向结构体数组的指针,7.5.1 结构体指针的定义及使用,7.5 结构体指针,结构体变量被定义后,系统为其在内存中分配一片连续的存储单元。该片内存单元的起始地址称为该结构体变量的指针。如果我们定义一个指针变量,用来存放这个地址,就称该指针变量为指向结构体的指针变量,简称结构体指针。,7.5.1 结构体指针的定义及使用,先定义结构体类型,再定义结构体指针。在定义结构类型的同时说明结构体指针。,struct student int num;char name20;char s
22、ex;int age;struct student stu1,*pstu;,struct studentint num;char name20;char sex;float score;stu1,*pstu;,7.5.1 结构体指针的定义及使用,直接说明结构体指针。用typedef定义结构体类型,再定义结构体指针。,struct int num;char name20;char sex;int age;stu1,*pstu;,typedef struct student int num;char name20;char sex;int age;studentinfo;studentinfo s
23、tu1,*pstu;,经过上面定义之后,此时pstu尚未指向任何具体的对象,是所谓的野指针。要使pstu指向stu1,则须:pstu=&stu1。如图所示,pstu为指向结构体变量stu1的指针变量。结构体指针变量pstu中的值是所指向的结构体变量stu1的首地址。,通过结构体指针变量,可以方便地访问结构体变量的各个成员。常用的方式有两种:利用间接成员运算符“-”来存取结构体成员,其一般引用形式是:指针变量名-结构体成员名pstu已经指向结构体变量stu1,把1121赋予stu1中的成员num,可用以下形式:pstu-num=1121;把字符串“Liu Qing”的首地址赋予stu1中的nam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言程序设计基础 语言程序设计 基础 构造 数据类型
链接地址:https://www.31ppt.com/p-5896099.html