第9章 构造数据类型.ppt_第1页
第9章 构造数据类型.ppt_第2页
第9章 构造数据类型.ppt_第3页
第9章 构造数据类型.ppt_第4页
第9章 构造数据类型.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 9 章 构造数据类型2课时,在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中:,为更好地解决此类问题,语言采用构造数据类型,通过构造数据类型可以很好地将一些不同类型的数据作为一个整体进行处理。,姓名:字符型; 学号:整型或字符型; 年龄:整型; 性别:字符型; 成绩:整型或实型。,因为一个数组中只能存放同一种数据类型的数据,故不能用一个数组来存放这一组数据;如单独定义为互相独立的简单变量,难以反映它们之间的内在联系。,9.1 结构体,“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型,或者又是一个构造类型。,结构体类型的定义 结构体变量的说

2、明 结构体变量的引用,结构体,先定义,后使用,9.1 结构体9.1.1结构类型定义和结构变量说明,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本数据类型或构造数据类型,struct是关键字, 不能省略,合法标识符 可省:无名结构体,一、结构体的定义,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体类型定义描述结构 的组织形式,不分配内存,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。 结构定义之

3、后,即可进行变量说明。,括号后的分号不可省,二、结构体变量说明,(1) 先定义结构体类型,再定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT stu1,stu2;,例 struct student int num; char name20; char sex; int a

4、ge; float score; char addr30; ; struct student stu1,stu2;,(2) 定义结构体类型的同时定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,(3) 直接定义结构体变量 一般形式:,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct int num;

5、char name20; char sex; int age; float score; char addr30; stu1,stu2;,用无名结构体直接定义 变量只能一次,说明 结构体类型与结构体变量概念不同 类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体成员名与程序中变量名可相同,不会混 结构体可嵌套,9.1.2 结构体变量的引用 引用规则 结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量 结构体嵌套时逐级引用,引用方式: 结构体变量名.成员名,成员(分量)运算符 优先级: 1 结合性:从左向右,练习,1. 设有以下

6、语句: struct S char ch; int a4 T; 则下面叙述中正确的是( ) S是struct类型的变量 T是struct S类型的结构体变量 可以用S定义结构体变量 可以用T定义结构体变量,练习,2. 设有如下定义: struct sk int a; float sex; data; int *p; 若要使p指向data中的a域,正确的赋值语句是( ) Ap= char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,二、

7、结构体变量的初始化,形式一:,形式二:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,形式三:,struct 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct int num; char name20; char sex; int age; char addr30; stu1

8、=112,“Wang Lin”,M,19, “200 Beijing Road”;,注:结构体变量是全局变量或静态变量,才可对它进行初始化赋值,局部或自动结构体变量,不能进行初始化赋值。,结构体变量的初始化,9.1.3 结构体数组 结构体数组的定义 三种形式:,形式一: struct student int num; char name20; char sex; int age; ; struct student stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int nu

9、m; char name20; char sex; int age; stu2;,结构体数组初始化,例 struct int num; char name20; char sex; int age; stu =,;,顺序初始化: struct student int num; char name20; char sex; int age; ; struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19;,例 struct student int num; char name20; char se

10、x; int age; stu =,;,结构体数组引用,引用方式: 结构体数组名下标.成员名,练习,1. 设有如下定义: main() struct complex int x; int y; num2=1,3,2,7; printf(“%dn”,num0.y/num0.x*num1.x); 程序运行结果是( ) A0 B. 1 C. 3 D. 6,练习,2.设有如下说明: struct STD int n; char c; double x; ; 以下选项中,能正确定义结构体数组并赋初值的语句是( ) A. struct STD tt2=1,A,62,2,B,75; B. struct ST

11、D tt2=1,A,62, 2,B,75; C. struct tt2=1,A,2,B; Dstruct tt2=1,A,62.5,2,B,75.0;,9.1.4 结构体和指针 指向结构体变量的指针 定义形式:struct 结构体名 *结构体指针名; 例 struct student *p;,使用结构体指针变量引用成员形式,存放结构体变量在内存的起始地址,指向运算符 优先级: 1 结合方向:从左向右,例 指向结构体的指针变量,例 int n; int *p= n=10,struct student stu1; struct student *p= (*p).num=101 pnum=101,m

12、ain() struct student long int num; char name20; char sex; float score; stu_1,*p; p= ,No:101 Name:Li Lin Sex: M Score:89.500000,指向结构体数组的指针,例 指向结构体数组的指针,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;

13、for(p=stu;pnum,p-name,p-sex,p-age); ,10101 Li Lin M 18 10102 Zhang Fun M 19 10104 Wang Min F 20,在上例中,可使用的是(*p).num这样的形式。(*p)表示p指向结构体变量,(*p).num是p指向的结构体变量中的成员num。注意:*p两侧的括弧不可省。,请分析以下几种运算: p-n 得到p指向的结构体变量中的成员n的值。 p-n+ +p-n,得到p指向的结构体变量中的成员n的值, 用完该值后使它加1。,得到p指向的结构体变量中的成员n的值 使之加1(先加)。,1. 有以下程序: #include

14、struct STU int num; float TotalScore; void f(struct STU p) struct STU s2=20044,550,20045,537; p.num=s1.num; p.TotalScore=s1.TotalScore; main( ) struct STU s2=20041,703,20042,580; f(s0); printf(%d %3.0fn,s0.num,s0.TotalScore); 程序运行后的输出结果是( ) A.20045 537 B.20044 550 C.20042 580 D.20041 703,练习,2. 以下程序运

15、行后输出结果是( )。 #include #include struct STU char name10; int num; ; void f(char *name, int num) struct STU s2=SunDan,20044,Penghua,20045; num=s0.num; strcpy(name,); main() struct STU s2=YangSan,20041,LiSi,20042,*p; p= A) SunDan,20042 B) SunDan,20044 C) LiSi,20042 D) YangSan,20041,3. 有以下程序: struc

16、t S int n;int a20; void f( struct S *p) int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if (p-aip-aj) t=p-ai; p-ai=p-aj; p-aj=t; main( ) int i;struct S s=10,2,3,1,6,8,7,5,4,10,9; f( char job; union int class; char office10; belong; body2;,for(i=0;i2;i+) scanf(“%s %c”,, ,9.3 枚举(enumeration),1 定义: enum 枚举名 常量标识符=整形常数, 常量标识符=整形常数, 2 赋值: enum string x1,x2,x3,x4,x5 x; enum string x1,x2,x3=7,x4,x5 x; 3.使用: 一般与switch搭配使用。,若枚举无初始化,则默认第一个标识符为0,之后依次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论