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

下载本文档

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

文档简介

第9章 构造数据类型 已了解的数据类型: 整型 浮点型 字符型 数组 简单数据类型 用户定义的数据类型 特点:所有的元素都是同一种类型 存在的问题:难以处理较复杂的数据 如:建立一份学生档案,对每一个学生至少 需要以下一些信息 学号(unsigned num) 姓名(char name20) 性别(char sex) 年龄(int age) 成绩(float score) 地址(char addr30) .1 结构体的类型定义结构体的类型定义 c程序可将上述数据的集合定义为一种结构体类型 : struct student unsigned num; char name20; char sex; int age; float score; char addr30; ; 上述定义中: struct 关键词(保留字), 表示定义一种结构 体类型。 student 结构体名, 相当于类型名(int, float等) 其一般形式: struct 结构体名 成员表列; 成员表列:类型标识符 成员名 以上仅说明了定义一种类型的方法,尚未定 义变量。 .2 结构体类型变量的定义结构体类型变量的定义 一、先定义结构体类型再定义结构体变量 三种方法: 则 x1, x2为student 型变量,x1, x2可存放student 数据。 struct student x1, x2; 类型标识符 例: 二、在定义结构体类型的同时定义变量 例:struct student int num; char name20; char sex; int age; char addr30; x1, x2; 成员表列 变量名表列; 定义形式 struct 结构体名 三、直接定义结构类型变量 定义形式 struct 成员表列 变量名表列; 不出现结构体类型名 如:struct int num; char name20; char sex; int age; char addr30; x1, x2; 1. 类型名与变量名是不同的概念 3. 每一个成员的作用如同该类型的变量 4. 成员名与程序中的变量名可相同但意义不同 几点说明: 2. 允许成员名为另一个已定义的结构型变量 struct date int month; int day; int year; ; struct student int num; char name20; char sex; int age; struct date birthday; char addr30; x1, x2; 结构体的嵌套定义 x1 或x2 num name sex age birthday month dayyear addr 9.1.3 9.1.3 结构体变量的初始化结构体变量的初始化 struct student x1=8906, “li ming “, m, 85.5; 一、先定义结构,在定义结构变量时对 每个成员赋初值 如:struct student unsigned no; char name20; char sex; float score; ; 若 x1 的起始地 址为2000,则 x1 在内存中占有的存 储单元为: 共用27个字节 的连续单元 8906 no 2000 2002 2021 2022 name20 l i m i n g m 85.5 0 2023 sex score 2026 struct exp int a=1234; float b=56.7; char yn8=“test“; x; 三、结构定义与变量定义及初始化合二为一: struct exp int a; float b; char yn8; x=1234, 56. 7, “test“; 但不能这样写: 9.1.4 9.1.4 结构体变量成员的引用结构体变量成员的引用 如:x1为struct student型变量,则 x1.num: 表示x1的学号 : 表示x1的名字 访问结构变量实质上是引用其成员 引用格式:结构变量名.成员名 圆点运算符称为成员运算符,它的运算级别是最高的。 有两种运算符可访问结构成员 一、引用结构体变量中成员 注意 : 1. 只能用变量的成员,不可用结构变 量名直接运算。 2. 每一个成员的作用与其同类型的简 单变量的引用相同。 二、箭头运算符: struct student char name 10; char sex; int age; float score; char addr20; x1; struct student p; 例: 则p为结构指针变量,它可用来存放student型变 量的地址 令 p= 则 p为x1的首地址. name sex addr p x1 age score 访问结构成员: pname 表示x1的姓名; page 表示x1的年龄; pname 等价于 (*p).name page 等价于 (*p).age 小结: 引用结构变量中的成员有三种方法 : (2) 用指针变量 (p).成员名 (p).num (3) 用指向运算符成员名 p num (1) 结构体变量名.成员名 x1.num 注意:指针变量p必须是结构指针型, 且有p= struct temp int a; char ch; x1, x2; main ( ) x1.a=10; x1.ch=a; x2=x1; printf(“%d, %c“, x2. a, x2.ch); 把结构变量x1的值赋给结构变量x2 如: 三、将结构体变量作为一个整体来使用三、将结构体变量作为一个整体来使用 可以把一个结构变量赋给另一个同类型 的结构变量。 四、关于结构变量的几点说明:四、关于结构变量的几点说明: 1. 结构变量不是一个简单变量,它的值是 由许多个基本数据组成。 2. 可以把一个结构变量赋给另一个同类型 的结构变量。 3.占有的存储单元大小取决于成员的数据类型 struct exp int a; float b; char yn8; ; struct exp x=1234,56.7, “text“ 结构变量占用的内存单元为14个字节。 如: 4. 不可以将两个结构变量进行关系比较 非法语句 struct temp int a; char ch; x1, x2; main( ) x1.a=10; x2.ch=a; if(x1= =x2) 5.可通过sizeof ( )运算符获得结构变量占用的 内存大小 struct exp int num; char ch; char name20; float sal; x1; main( ) int size; size=sizeof(x1); printf(“size=%dn“, size); 如: 9.1.5 9.1.5 结构体变量的输入输出结构体变量的输入输出 若有 struct student h; 则:scanf(“%s“, printf(“%s“, h); 错误 原因:结构体变量中包含有多个不同类型 的数据项。 正确方法:对结构体变量各成员的值进行 输入/输出。 如:scanf(“%d%s“, printf(“%d%s“, h.num, ); 只能对结构变量的成员进行输入/输出 9.2 9.2 结构体数组结构体数组 同数组定义类似: struct student w3; 则有三个元素w0, w1, w2。 每一个元素为一个 结构student型变量。 w0.num: 表示w0的学号 : 表示w1的姓名 对w数组也可初始化: struct student w3=8901, “li ming “, , , ; 可省略大小说明,直接用赋初值确定其大小 struct student w =, ,; struct person char name20; int count; leader3=“li“, 0,“zhang“ , 0, “ hang “, 0 ; 例:编写一个统计得票数的程序,假定有三 个侯选人,每一侯选人的数据包括其姓 名和得票数。 可定义结构类型person和结构数组leader #include struct person char name20; int count; leader3=“li“,0,“zhang“,0, “hang“,0; main() int i, j; char leader_name20; for (i=1; i struct tree int x; char *s; t; void func(struct tree t ) t.x=t.x+10; t.s=“computer“; main() t.x=6; t.s=“minicomputer“; func(t); printf(“%d, %sn“, t.x, t.s); 程序运行结果: 6, minicomputer 一种自定义的数据类型 一、共用体数据类型的特点 与结构体类似之处:由不同的数据项组成一 个整体。 与结构体不同之处:占用的内存单元不同。 9.4 9.4 联合体数据类型 联合体数据类型 二、共用体类型定义 定义方式与结构体类型完全相同。 把结构体类型中的关键字struct换成 union即可。 struct memb float v; int n; char c; stag; stag占内存7个 字节的空间 union memb float v; int n; char c; ustag; ustag占的内存 空间为4个字节 1001 1005 1007 v n c 2001 v nc 2002 2003 2004 共用体类型变量每次只能存放一个成员的值 例: 三、共用体类型变量的引用 引用方法同结构体变量: (共用体类型变量名). 共用体类型变量的输入输出同结构 体类型变量相同。 #include union memb float v; int n; char c; ; main( ) union memb utag; utag.c=t ; utag.n=18; utag.v=36.7; printf(“%5.1fn%dn%cn“, utag.v, utag.n, utag.c); 运行结果:36.7 13107 = 例: 想一想: 若改变成员的赋值顺序: utag.v=36.7 utag.n=18 utag.c=t 则运行结果为:36.5 84 t 构造类型(数组,结构体,共用体)的定义可以嵌套。 struct priv int n; float f; char c; union publ int ns; float fs; struct priv mud; spe5; spe为共用体类型数组,每个数组元素所 占用的内存单元为: 2001 mud fs ns 2002 2003 2004 2005 2006 2007 注意 : 四、可对联合体变量进行的操作 (1) 同类型联合体变量之间的赋值运算 (2) 取某成员的地址 (3) 用指向联合体的指针运算符访问联 合体成员 联合体变量中起作用的成员 是最后一次存放的成员。 9.5 9.5 枚举数据类型 枚举数据类型 枚举是用标识符表示的整数常量的集合。 枚举类型定义形式: enum 标识符1, 标识符2, , 标识符n ; 枚举型常量的起始值为0。例: enum seasons spring, summer, autumn, winter; enum seasons spring=1, summer, autumn, winter; 枚举变量定义的一般形式如下: enum 变量名1,变量名2,,变量 名n; /* exam9_6.c 枚举类型的用法*/ #include enum monthsjan=1,feb,mar,apr,may,jun,jul,aug,sep,oct, nov,dec; main() enum months month; char *monthname=“,“january“,“february“,“march“,“april“, “may“,“june“,“july“,“auguest“,“september“,

温馨提示

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

评论

0/150

提交评论