第11章C语言的结构体和共用体.ppt

上传人:本田雅阁 文档编号:2093230 上传时间:2019-02-13 格式:PPT 页数:53 大小:154.51KB
返回 下载 相关 举报
第11章C语言的结构体和共用体.ppt_第1页
第1页 / 共53页
第11章C语言的结构体和共用体.ppt_第2页
第2页 / 共53页
第11章C语言的结构体和共用体.ppt_第3页
第3页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第11章C语言的结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《第11章C语言的结构体和共用体.ppt(53页珍藏版)》请在三一文库上搜索。

1、11.1 概述,C语言的数据类型: 基本类型: int char float double 指针类型 构造类型:数组、结构体、共用体 枚举类型 空类型 void,结构体(structure)是一种数据类型, 它把互相联系的数据组合成一个整体。例、,一个学生的学号、姓名、性别、年龄、成绩、地址,是互相联系的数据,在C语言中用“结构体(structure)”来定义。 struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /* 年龄 */ float score; /* 成绩 */ cha

2、r addr30; /* 地址 */ ;,11.2 结构体变量的定义,结构体是一种数据类型 (像int、char、 flaot数据类型一样), 可以用它定义变量。 用结构体类型定义变量的方式有三种:,一、先定义结构体类型,再定义变量 例、 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student student1, student2;,结构体变量中的各成员,在内存中顺序存放。结构体变量所占内存大小用运算符sizeof计算。 例、 printf(“ %d %

3、d n“,sizeof(struct student),sizeof(student1);,为了方便,可以这样定义结构体变量:,#define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT student1, student2;,二、在定义类型的同时定义变量,struct student int num; char name20; char sex; int age; float score; char addr30; stu

4、dent1, student2;,三、直接定义变量,struct int num; char name20; char sex; int age; float score; char addr30; student1, student2;,四、成员是另一个结构体变量,struct date int month; int day; int year; ; struct student int num; char name20; char sex; int age; struct date birthday; char addr30; student1, student2;,11.3 结构体变量的

5、引用,1、一般情况下,不能将一个结构体变量作为整体来引用,只能引用其中的成员(分量)。引用结构体成员的方式: 结构体变量名.成员名 .是“成员运算符” 例1、 printf(“%d,%s,%c,%d,%f,%s“, student1.num, student1.name, student1.sex, student1.age, student1.score, sutdent1.addr); printf(“%d,%s,%c,%d,%f,%s“, student1);,例2、 student2.score = student1.score; sum = student1.score + stud

6、ent2.score; student1.age+; +student1.age; 例3、 scanf(“%d“, ,2、当成员是另一个结构体变量时,应一级一级地引用成员。 例4、 student1.num; student1.name; student1.birthday.month; student1.birthday.day; student1.birthday.year;,3、仅在以下两种情况下,可以把结构体变量作为一个整体来访问。 (1) 结构体变量整体赋值,例、 student2 = student1; (2)取结构体变量地址,例、 printf(“%x“, 返回本章目录,11.4

7、 结构体变量的初始化,struct student long int num; char name20; char sex; char addr20;a = 89031, “Li Lin“, M, “123 Beijing Road“; 注意:不能在结构体内赋初值。例、 struct student long int num = 89031; char name20 = “Li Lin“; char sex = M; char addr30 = “123 Bejing Road“; a;,11.5 结构体数组,一、结构体数组的定义 struct student int num; char na

8、me20; char sex; int age; float score; char addr30; ; struct student stu3;,二、结构体数组的初始化 (见课本P266),struct student int num; char name20; char sex; int age; float score; char addr30; stu3 = 10101,“Li Lin“, M, 18, 87.5, “103 Bejing Road“, 10102,“Zhang Fun“,M, 19, 99, “130 Shanghai Roaad“, 10104,“Wang Min“

9、, F, 20, 78.5, “1010 Zhongshan Road“ ;,三、举例,例11.2 对候选人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各候选人得票结果。,运行,11.6 结构体指针 一、结构体指针 结构体指针:指向结构体变量的指针。例、,struct student long int nnum; char name20; char sex; float score; ; struct student stu_1; struct student *p; p = ,结构体指针,通过指向运算符引用结构体中的成员。例、 p-num p-name p-s

10、ex p-score 因此结构体成员的引用方式有以下三种: 结构体变量.成员名 (*p).成员名 p-成员名,三、指向结构体数组的指针,例1: struct student stu3; struct student *p = stu; p+; p+;,struct student stu3; struct student *p ; p = stu; p-num; p+; p-num ; p+; p-num;,三、用结构指针作函数的参数 例11.5有一个结构体变量stu,内含学生学号、姓名和三门课程的成绩。要求在main中赋初值,在函数print中打印输出。,运行,说明:,1、结构体的成员作函数

11、的参数。 与普通变量作函数参数的用法相同。值传送,不能修改实参的值。 2、结构体指针作函数的参数。 将结构体的地址传送给函数,效率高,可以修改实参的值。 3、结构体作函数的参数。 将结构体的全部成员值传送给函数,效率低,不能修改实参的值。,四、举例,例11.6 有4个学生,每个学生包括学号、姓名和成绩。要求找出成绩最高者的姓名和成绩。 返回本章目录,运行,11.8 共用体,一、共用体的概念 当需要把不同类型的变量存放到同一段内存单元,或对同一段内存单元的数据按不同类型处理,则需要使用“共用体”数据结构。 例、把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中。 共用体的

12、定义形式: union 共用体名 成员列表; 变量列表; 例、,注意区分: “共用体”:各成员占相同的起始地址,所占内存长度等于最长的成员所占内存。 “结构体”:各成员占不同的地址,所占内存长度等于全部成员所占内存之和。,二、共用体变量的引用,只能引用共用体变量的成员,如、 union data a; a.i; a.ch; a.f;,三、共用体类型数据的特点 、共用体变量中的值是最后一次存放的成员的值,如: a.i = 1; a.ch = a; a.f = 1.5; 完成以上三个赋值语句后,共用体变量的值是1.5,而a.i=1和a.ch=a已无意义。,、共用体变量不能初始化,例、 union

13、data int i; char ch; float f; a=1,a, 1.5;,例11.11 设有若干个人员的数据,其中有学生和教师。学生数据包括:姓名、号码、性别、职业、班级。教师数据包括:姓名、号码、性别、职业、职务。如图、,分析:学生数据的class(班级)和教师数据的position(职务)类型不同,但在同一表格中,使用“共用体”数据结构。,运行,11.9 枚举类型,如果一个变量只有几种可能的值,可以定义为枚举类型。 “枚举”:将变量可能的值一一列举出来。变量的值只能取列举出来的值之一。,用关键字enum定义枚举类型:例、 enum weekday sun, mon, tue, w

14、ed, thu, fri, sat; weekday是枚举类型名,可以用于定义变量, 如、enum weekday workday, week_end; weekday = mon; week_end = sun; sun、mon、sat称为“枚举元素”或“枚举常量”。,说明:,1、枚举元素是常量。在编译器中,按定义的顺序取值0、1、2、.。 例、 weekday = mon; printf(“%d“, weekday); 输出整数1。 2、枚举元素是常量,不是变量,因此不能赋值。 sun = 0; mon = 1; 但在定义枚举类型时,可以指定枚举常量的 值,如、 enum weekday

15、sun=7, mon=1, tue, wed, thu, fri, sat; 此时,tue、wed、.的值从mon的值顺序加1。如,tue=2。,3、枚举值可以作判断,例、 if (weekday = mon) if (weekday sun) 4、整型与枚举类型是不同的数据类型,不能直接赋值,如、 workday = 2; /* workday是枚举类型 */ 但可以通过强制类型转换赋值,如、 workday = (enum weekday)2;,例11.12 口袋里有红、黄、蓝、白、黑五种颜色的球若干个。每次从口袋中取出三个球,打印出三种不同颜色球的可能取法。 分析:球的颜色只可能取五种值

16、,用枚举类型变量处理。,运行,11.10 用typedef定义类型,一、概念 关键字typedef用于定义一种新的数据类型,它代表已有数据类型,是已有数据类型的别名。例、 typedef int INTEGER; typedef float REAL; 定义新数据类型INTEGER,它代表已有数据类型int。 定义新数据类型REAL, 它代表已有数据类型float。 通过上述定义后,以下两行等价: int i, j ; float a, b; INTEGER i, j;REAL a, b;,二、典型用法:,1、定义一种新数据类型,专用于某种类型的变量,使程序更清晰明了。 例1、typedef

17、unsigned int size_t size_t size; /*定义size为无符号整型变量*/ 例2、typedef int COUNT COUNT i,j;,2、简化数据类型的书写。 例3、typedef struct int month; int day; int year; DATE ; DATE birthday; DATE *p; DATE d7; 例4、typdef unsigned int UINT; UINT i,j;,三、定义新类型的更一般形式: (1)typedef int NUM100; /*申明NUM为整型数组类型 */ NUM n; /* n为整型数组变量 *

18、/ (2)typedef char * STRING; /*申明 STRING是字符指针类型 */ STRING p, s10; /* p是字符指针变量,s10是字符指针数组 */,(3)typedef int (*POINTER)( ); /* POINTER是指向函数的指针,该函数返回整型 */ POINTER p1, p2; /*定义p1,p2为指向函数的指针*/,四、typedef 与 #define的区别,typedef int COUNT #define COUNT int typedef定义一种新的数据类型(COUNT),它是已有类型(int)的别名。在编译时COUNT类型与in

19、t类型相同。 #define定义一个宏(COUNT), 在预编译时,把字符串COUNT替换为字符串int。 返回本章目录,补充练习:,1、若有以下说明和定义 typedef int * INTEGER; INTEGER p,*q; 以下叙述正确的是:( ) A)p是int型变量 B)p是基类型为int 的指针变量 C)q是基类型为int 的指针变量 D)程序中可用INTEGER代替int类型名,B,2、设有以下说明语句 typedef struct int n; char ch8; PER; 则以下叙述中正确的是 A)PER是结构体变量名 B)PER是结构体类型名 C)typedef struct是结构体类型 D)struct是结构体类型名,B,3、 以下程序的输出是 A) 10 B) 11 C) 51 D) 60 struct st int x; int *y; *p; int dt4= 10,20,30,40 ; struct st aa4= 50, ,C,本章要求及作业,、结构体的概念,结构体指针,结构体数组。 2、共用体的概念。 3、枚举类型。 4、typedef定义新数据类型。 作业: 11.1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1