第9章结构体与共同体

上传人:cn****1 文档编号:585531479 上传时间:2024-09-02 格式:PPT 页数:44 大小:242.52KB
返回 下载 相关 举报
第9章结构体与共同体_第1页
第1页 / 共44页
第9章结构体与共同体_第2页
第2页 / 共44页
第9章结构体与共同体_第3页
第3页 / 共44页
第9章结构体与共同体_第4页
第4页 / 共44页
第9章结构体与共同体_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第9章结构体与共同体》由会员分享,可在线阅读,更多相关《第9章结构体与共同体(44页珍藏版)》请在金锄头文库上搜索。

1、第第9 9章章 结构体与共同体结构体与共同体9.1 9.1 结构体结构体9.2 9.2 结构体数组结构体数组9.4 9.4 共用体共用体9.1 9.1 结构体结构体 确定该类型数据的表示形式、取值范围、存确定该类型数据的表示形式、取值范围、存储结构及其允许参加的运算。储结构及其允许参加的运算。 在程序中每个变量在使用前要确定其类型,在程序中每个变量在使用前要确定其类型,在前面所定义的类型都是标准类型。在前面所定义的类型都是标准类型。 在前面介绍的内容均为系统定义类型,用户只在前面介绍的内容均为系统定义类型,用户只要按要求用这些类型说明变量即可。要按要求用这些类型说明变量即可。 类型的作用类型的

2、作用例如:例如: int x; float y; char a30; 这些基本类型只能解决简单的问题,这些基本类型只能解决简单的问题,而实际而实际应用中的类型是千变万化的。应用中的类型是千变万化的。 简单类型(整、实、字)的变量是独立的,简单类型(整、实、字)的变量是独立的,变量之间无内在的联系;数组类型虽能同时存放变量之间无内在的联系;数组类型虽能同时存放多个数据,但必须是同类型的多个数据,但必须是同类型的。 C允许用户按需求自己定义类型。允许用户按需求自己定义类型。例如:例如:在计算机等级考试管理系统中,若每个考生在计算机等级考试管理系统中,若每个考生 都有如下信息都有如下信息 :考号考号

3、 : : 长整型长整型姓名姓名 :字符串字符串性别性别 :字符字符年龄年龄 :无符号整型:无符号整型报考等级:报考等级:字符串字符串成绩成绩 :实型:实型 数据分属不同的数据分属不同的类型,显然不能采用类型,显然不能采用前面已介绍过的类型前面已介绍过的类型来处理。来处理。 C语言提供语言提供了解决这类问题的类了解决这类问题的类型型结构体类型结构体类型。 struct student1 int num; char name20; char class10; char sex; float score; struct student2 int num; char name20; char clas

4、s10; date birth; struct date short year;short month ; short day; 结构类型的定义结构类型的定义struct student1 stu1, stu2方法方法1 1:方法方法2 2: struct student2 int num; char name20; char class10; date birth; stu1,stu2 在在VC中若文件名中若文件名*.cpp,用结构类型说明变用结构类型说明变量时可省略量时可省略struct。结构类型变量的定义结构类型变量的定义 1. 由于结构类型是一个复合类型,由于结构类型是一个复合类型,其

5、由多个其由多个成员组成,因此不能访问结构体变量成员组成,因此不能访问结构体变量(同数组同数组),只能按如下方法访问变量的成员。只能按如下方法访问变量的成员。 变量名变量名 . 成员名成员名 变量名变量名 . 一级成员一级成员 . 二级成员二级成员 (嵌套时)(嵌套时)结构类型变量的访问结构类型变量的访问struct student1 stu1= 2001802,李李, 计计011,女女,85.2 ;struct student2 stu2= 2001802,李李, 计计011,女女, 12, 3, 1986, 85.2 ; scanf(%d, stu1.num ); gets( stu2.na

6、me ); stu1.sex=getchar( ); stu1.birth.day=12; printf(“%d”, stu1.birth.day ); puts( stu2.name )2.2.对成员对成员, ,可根据其类型进行相应的运算。可根据其类型进行相应的运算。 3. 3.由于结构型变量的成员多,由于结构型变量的成员多,C C允许两个同允许两个同 类型的结构变量可互相整体赋值。类型的结构变量可互相整体赋值。 例如:例如: struct s int no; float score; stu1,stu2= 200123, 76.5 ; stu1=stu2; 4. 结构体变量中的各成员在内存

7、中占一片连结构体变量中的各成员在内存中占一片连续的单元,其长度为:续的单元,其长度为: 各成员所占单元之和各成员所占单元之和stu numname class sexbirthdaymonth dayyearscore 5. 不能在定义类型时给成员赋值。不能在定义类型时给成员赋值。struct stu long num=97031; char name20 =li ming; char sex=m; student;错,不能错,不能对类型赋对类型赋值!值! 可用结构类型定义指针。即存放结构对象的首可用结构类型定义指针。即存放结构对象的首地址。地址。例如:例如: struct student i

8、nt num; char name20; char sex; float score; ;struct student x,*p;p=&x;由于结构类型变由于结构类型变量占用连续单元,量占用连续单元,故故p存放存放num成员成员的首地址的首地址指向结构体的指针指向结构体的指针 结构型变量结构型变量 . 成员名成员名 结构型指针结构型指针成员名成员名 访问成员时,有两种表示:访问成员时,有两种表示:见见P.198 例例9.3结构体变量作为函数参数结构体变量作为函数参数 因为结构体变量中的每个成员都被分配了存因为结构体变量中的每个成员都被分配了存储单元储单元, 故当参数是结构体变量时故当参数是结构

9、体变量时, 采用值传递采用值传递方式方式, 将实参的每个成员对应传递给形参成员。将实参的每个成员对应传递给形参成员。 见见P.200 例例9.4,9.59.2 9.2 结构体数组结构体数组 单个结构型变量没有实际的意义,可用简单变单个结构型变量没有实际的意义,可用简单变量来完成工作。仅当结构体与数组相结合时,才能量来完成工作。仅当结构体与数组相结合时,才能解决复杂问题,弥补数组的缺点。解决复杂问题,弥补数组的缺点。 用结构类型定义数组。即每个数组元素是结构用结构类型定义数组。即每个数组元素是结构类型。类型。 见见P.202-203P.202-203结构体数组的定义结构体数组的定义stu1=97

10、001; 错误错误 stu1.num=97001; 正确正确 1. 可引用数组元素的成员,不能引用数组元素。因为每可引用数组元素的成员,不能引用数组元素。因为每 个数组元素是结构类型。个数组元素是结构类型。 2. 2. 同一结构体类型变量及数组元素之间可整体赋值。同一结构体类型变量及数组元素之间可整体赋值。 struct student s1,s10; s1=s2; s1=s0; 正确正确 结构体数组的访问结构体数组的访问 struct student int num; char name20; char class10; char sex; float score4; void main()

11、 struct student stu3; int j ;例如:输入例如:输入/出出3个学生的信息,每个学生的信个学生的信息,每个学生的信息如下:学号,姓名,班级,性别,息如下:学号,姓名,班级,性别,4门成绩。门成绩。 for( j=0; j3; j+) scanf(“%d”, &stuj . num) ;getchar(); gets(stuj . name ); getchar(); gets(stuj . clase ); getchar(); scanf(“%c”, &stuj . sex); for( k=0;k p1num )&( p1next != NULL ) p=p1; p

12、1=p1next; 寻找插入点寻找插入点 if( newnum =p1num ) if (head = p1) head=new; 插入在表头插入在表头 else pnext=new; 插入在表中插入在表中 newnext=p1; else p1next=new ; newnext=NULL; 插入在表尾插入在表尾 n+; return( head ); 9-4.c 9-5.c9.4 9.4 共有体共有体二、共用体数据类型的特点二、共用体数据类型的特点 几个不同类型的数据共用同一个存储单元。几个不同类型的数据共用同一个存储单元。共共用体变量所占内存长度用体变量所占内存长度= =最长成员的长度,

13、各成员最长成员的长度,各成员轮流使用一个单元,所以共同体变量及其各成员地轮流使用一个单元,所以共同体变量及其各成员地址相同。每一瞬间只能存放一个成员,共用体中起址相同。每一瞬间只能存放一个成员,共用体中起作用的是最后一次存入的成员。作用的是最后一次存入的成员。一、共用体类型定义一、共用体类型定义把结构体类型中的关键字把结构体类型中的关键字struct换成换成union即可。即可。例如例如: struct memb float v;int n;char c; stag; stag占内存占内存7个个字节的空间字节的空间union memb float v;int n;char c; ustag;

14、utag分配分配 4字节字节100110051007vnc2001vnc200220032004 共用体类型变量每次只能存放一个成员的值。共用体类型变量每次只能存放一个成员的值。三、共用体类型变量的引用三、共用体类型变量的引用(共用体类型变量名). 成员名 1、共用体类型变量的访问同结构体类型变量。、共用体类型变量的访问同结构体类型变量。 2、不能对共同体变量初始化。不能对共同体变量初始化。 union int i; char ch; x=6, A 错误错误例程例程 #includeunion memb float v; int n; char c;main( ) union memb uta

15、g; utag.v=36.7 utag.c=T utag.n=18 printf(%5.1fn%dn%cn, utag.v, utag.n, utag.c); 运行结果:运行结果:36.7 13107例程例程9-3: 某某单单位位有有3名名职职工工参参加加计计算算机机办办公公应应用用技技能能考考试试。设设每每个个人人的的数数据据包包括括考考号号、姓姓名名、年年龄龄、和和成成绩绩。单单位位规规定定年年龄龄为为25岁岁以以下下的的职职工工进进行行笔笔试试,成成绩绩为为百百分分制制,60分分以以上上为为及及格格。而而25岁岁以以上上的的职职工工进进行行操操作作考考试试,考考试试成成绩绩为为A、B、C 、D,C级级以以上上为为及及格格。请请统统计计考考试试及及格格的的人人数数,并并输出每位考生考试的成绩。输出每位考生考试的成绩。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号