用户定制数据类型.ppt_第1页
用户定制数据类型.ppt_第2页
用户定制数据类型.ppt_第3页
用户定制数据类型.ppt_第4页
用户定制数据类型.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

C 程 序 设 计 | 第 六 章,用户定制数据类型,第六章,C 程 序 设 计 | 第 六 章,用户定制数据类型的基本概念 枚举 结构体 共用体 练习,本讲主要内容,C 程 序 设 计 | 第 六 章,在程序设计中,会遇到一些关系密切,但据类型不同的数据,用基本数据类型和数组都难以表示 C语言提供了三种可以让用户自己定制的数据类型框架: 枚举:可用名字称呼一组整型数 结构体:可以将一组不同类型的数据组合在一起 共用体:可让一组不同类型的数据共享同一内存空间。,用户定制数据类型,C 程 序 设 计 | 第 六 章,枚举,“枚举”是指一个变量只有几种可能的值,将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。 枚举可以将一组整型数分别命名,这样在程序中可以用名字代替数字,提高程序的可读性,定义枚举类型的形式: enmu 枚举类型名 变量值列表; 例如:enum weekday sun,mon,tue,wed,thu,fri,sat; 说明:变量值列表是一序列的标识符,默认情况下系统用0,1,2代替这些标识符,也可在定义时直接指定,C 程 序 设 计 | 第 六 章,main() enum weekdaysun,mon,tue,wed,thu,fri,sat; /*定义类型*/ enum weekday workday; /*定义变量*/ workday=mon; /*变量赋值*/ If(workday=mon) printf(“星期一”); workday=(enum weekday)3; /*类型转换*/ printf(“%d”,workday); /*引用变量*/ ,枚举型变量的定义和引用,C 程 序 设 计 | 第 六 章,问题:在进行学生学籍管理的程序设计中,一个学生的数据和数据类型如下: 学号(num10): char 姓名(name20) char 性别(sex): char 年龄(age): int 分数(score3): float 平均分(ave): float 如何完整的访问一个学生的数据? 为了方便处理此类数据,把这些关系密切但类型不同的数据项组织(封装)在一起,并为其取一个名字,在C语言中就称其为结构体,结构体,C 程 序 设 计 | 第 六 章,例如 struct student char num10; char name20; char sex; int age; float score3; float ave; ;,定义结构体类型,student有六个成员,定义结构类型: struct 结构名 数据类型 成员名 1; : 数据类型 成员名 n; ;,成员名的定义规则与变量名相同 结构体的成员可以是简单变量、数组、指针、结构体、共用体,C 程 序 设 计 | 第 六 章,定义结构体变量,变量定义形式: struct 结构名 结构变量名;,struct student char num10; char name20; char sex; int age; float score3; float ave;; struct student str1,str2;,struct date int year; int month; int day; birthday; struct join;,结构变量占内存大小可用 sizeof 求出,结构变量的存储类型、作用域、可见性及使用范围与普通变量、数组等完全一致,C 程 序 设 计 | 第 六 章,结构体类型与结构体变量,定义结构体类型,只是说明了结构的组织形式,并不占用存储空间 要定义结构体变量,必须先定义结构类型,才能将变量说明为该结构体类型,整型: int x,y; 结构型:struct st t1,t2;,struct st char num10; char name20;,C 程 序 设 计 | 第 六 章,定义时进行初始化。例如: struct student char num10; char name20; char sex; int age; float score3; float ave; str1=“200408”,”Zhang Li”,M,18,98.6 ,87.3,76.2 ;,结构体变量初始化,数据间用逗号分隔 数据的个数一般与成员的个数相同,若小于成员个数,则剩余的成员将被自动初始化为0或空格 数据的类型要与相应成员的类型一致 初始化时只能对整个结构体变量进行,C 程 序 设 计 | 第 六 章,引用结构体变量成员的一般形式为: 结构体变量.成员 其中:“.”是结构体成员运算符,其优先级别最高,结合性为自左至右,例如: str1.num=“200409”; strcpy(,“wang yi”); str1.sex=m; str1.age=19; str1.score2=89.8;,结构体变量的引用,str2 = str1,?,struct student str1,str2;,C 程 序 设 计 | 第 六 章,struct student char num10; char name20; char sex; int age; float score3; float ave; ;,例6.1 输入1个学生信息,包括学号、姓名、性 别、年龄、3门成绩,并显示各项数据。,结果: Num Name Sex Age Mathematics English Computer 2008001 LiNing F 18 84.3 82.5 89.4,结构体变量举例,例6.1,C 程 序 设 计 | 第 六 章,结构的成员可以是数组(一维、二维、多维) 如:描述学生情况的结构数据 struct student char num10; char name20; int age; char sex; float score15; ; struct student st1,st2;,结构中数组成员的引用可通过逐个引用数组元素来实现,如: st1.score1=92.5; gets();,结构体中的数组成员,如何保存全班同学的数据,C 程 序 设 计 | 第 六 章,将数组的类型定义为结构类型就构成了结构体数组。结构数组的每个元素都是一个结构变量 结构体数组的定义形式: struct 结构名 结构数组名元素个数; 结构体数组初始化 struct 结构名 结构数组名=初始数据; 结构体数组元素的引用:数组名下标.成员名 数组元素占用字节数:sizeof(结构类型),结构体数组,C 程 序 设 计 | 第 六 章,#include “stdio.h” main() struct student long num; char name10; char sex; int age; float score; int xfgd; ,例6.2 用结构体数组保存3个学生的学籍数据,结构体数组举例,程序运行结果为: Num Name Sex Age Score Xfgd 200401 Gao pin m 18 96.6 6 200402 li yiang m 19 88.5 5 200403 wu ming m 20 76.9 4,不能对结构体数组元素直接操作,C 程 序 设 计 | 第 六 章,结构变量可作为函数参数,函数的返回值也可以是结构变量 用结构体变量成员作为函数的参数时,函数间传递的是单个成员 用结构体变量作为函数的参数时,函数间传递的是整个结构体 用结构体数组作为函数的参数时,传递的是结构体数组的首地址,例6.3 从键盘输入整班学生的信息。信息包括学号、姓名、学习成绩,要求输出学生成绩排行榜,结构体变量作函数参数,C 程 序 设 计 | 第 六 章,共用体能使不同数据类型共用同一存储区域,共用体的定义与引用,共用体的定义形式: union 共用体类型名 数据类型 成员名 1; 数据类型 成员名 2; : 数据类型 成员名 n; ; 共用体的引用形式: 共用体变量名成员名,共用体变量不能用作函数参数,不能初始化。 共用体变量可以出现在结构中,结构成员也可以是共用体类型,C 程 序 设 计 | 第 六 章,共用体所有成员共用同一段存储空间,空间按照占用存储区最大的成员来分配。任一时刻只有一个成员有效,定义与引用方式类似结构。,共用体的存储空间,例如: union uarea char c_data; short s_data; long l_data; ;,C 程 序 设 计 | 第 六 章,例6.4 阅读下列程序,写出运行结果。,union dd long x; float y; int z; char c; x,y; main() x.x=1234567; y.x=168; x.y=128.98; y=x; x.c=65; printf(“x=%c,y=%fn”,x.c,y.y); ,运行结果: x=A, y=128.979996,共用体举例,共用体采用覆盖技术,成员的最后一次赋值起作用,C 程 序 设 计 | 第 六 章,#include “stdio.h” struct tt int n; char ch; ; main() struct tt lex1=9,a; fun(lex1); printf(“%d,%cn”,lex1.n,lex1.ch); ,读程序写结果,fun(struct tt lex2) lex2.n+=16; lex2.ch=1;,运行结果为:?,C 程 序 设 计 | 第 六 章,结构体、共用体和枚举构造型数据类型,必须先定义才能使用这些类型 定义结构体类型只是告知编译系

温馨提示

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

评论

0/150

提交评论