C语言及应用第6章

上传人:平*** 文档编号:46191355 上传时间:2018-06-23 格式:PPT 页数:99 大小:1.56MB
返回 下载 相关 举报
C语言及应用第6章_第1页
第1页 / 共99页
C语言及应用第6章_第2页
第2页 / 共99页
C语言及应用第6章_第3页
第3页 / 共99页
C语言及应用第6章_第4页
第4页 / 共99页
C语言及应用第6章_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《C语言及应用第6章》由会员分享,可在线阅读,更多相关《C语言及应用第6章(99页珍藏版)》请在金锄头文库上搜索。

1、第6章 结构与联合 第6章 结构与联合 6.1 结构 6.2 联合 6.3 位字段 6.4 枚举 6.5 自定义类型 习题6 第6章 结构与联合 6.1 结 构 6.1.1 结构类型的定义例如, 某公司职工的基本情况包括如下内容: 姓名、性别、年龄、家庭住址、联系电话、邮政编码习惯上用字符串形式保存姓名、性别、家庭住址、联系电话,用数值形式保存年龄和邮政编码。 如果对上述数据进行存储和操作, 应首先定义一个结构类型作为存储这些数据的数据类型。 第6章 结构与联合 1. 结构类型定义的一般形式struct 结构类型名成员类型1 成员名1; 成员类型2 成员名2; 成员类型 成员名; ; 第6章

2、结构与联合 2. 结构类型定义的说明(1) struct是结构类型定义的保留字, 必须原样照写。 (2) 结构类型名的构成应符合标识符的规定, 它与struct一起构成特定的结构类型,在以后的结构变量说明中可以被引用。 (3) 大括号内是由结构成员组成的结构体,每个成员由数据类型和成员名组成,每个成员的数据类型可以是基本数据类型, 也可以是构造类型。 第6章 结构与联合 例 6.1 将上例中的职工基本情况,定义成如下形式: struct employee char name8; /*姓名定义*/char sex4; /*性别定义*/int age; /*年龄定义*/char home30; /

3、*家庭住址定义*/char tel20; /*联系电话定义*/long int postcode; /*邮编定义*/; 第6章 结构与联合 例6.1定义了一个结构类型,类型名为struct employee,它与int、char等类型名是同等的。该结构类型由6种数据类型的成员组成, 其中,name、sex、age、 home、tel、postcode称为结构成员。 第6章 结构与联合 6.1.2 结构变量1. 结构变量的说明要说明一个结构类型的变量, 可以采用如下三种形式: (1) 用变量说明语句来说明结构变量, 一般形式如下: struct 结构类型名 变量表; 例如, 说明变量s1、 s2

4、、 s3为struct employee类型。 struct employee s1, s2, s3; 第6章 结构与联合 (2) 在定义结构类型的同时说明结构变量, 一般形式如下: struct 结构类型名结构成员表; 变量表; 例如,定义结构类型struct employee并说明变量s1、 s2、 s3为struct employee类型。 第6章 结构与联合 struct employee char name8; char sex4; int age; char home30; char tel20; long int postcode; s1, s2, s3; 第6章 结构与联合 (

5、3) 在定义结构类型的同时说明结构变量, 但不设结构类型名, 一般形式如下: struct结构成员表; 变量表; 第6章 结构与联合 2. 结构变量的初始化如同其它类型的变量一样,结构变量也可以在说明的同时进行初始化。其初始化的条件与数组相似,即只有静态存储或外部存储的结构变量才能进行初始化。 例如,对上例中的变量s1进行初始化: static struct employee s1=ZK(何燕, 女, 20, 劲松小区100号楼702室,010-88985566, 100058; 在进行结构变量的初始化时,数据与其对应的结构成员的 类型应一一对应。 第6章 结构与联合 6.1.3 结构成员1.

6、 结构成员的引用结构变量一旦说明,即可以对其进行操作。需要说明的是, 引用结构变量时,只能对其成员进行引用,而不能对整个结构进行引用。结构成员的一般引用形式如下: 结构变量名.成员名例如, 对上例中的变量s2进行赋值操作: 第6章 结构与联合 s2.name=李力; s2.sex=男; s2.age=21; s2.home=花乡李村57号; s2.tel=66788765; s2.postcode=100451; 第6章 结构与联合 2. 结构变量的使用说明(1) 结构变量具有存储性质,它可以被说明为外部、 自动、静态等存储类型,但不能是寄存器类型。 (2) 结构成员名可与程序中的变量名相同,

7、 结构变量名可与结构类型名相同。例如: struct employee employee;结构变量名和结构类型名都是employee,这是允许的。 第6章 结构与联合 例 6.2 编程序, 输出一个职工的姓名、性别、年龄 、 住址、电话和邮编。 include void main () struct employee char name8;char sex4;int age;char home30;char tel20;long postcode; 第6章 结构与联合 static struct employee s1= 何燕,女,20,劲松小区100号楼702室, 010-88985566,

8、 100058;printf(姓名:%sn,s1.name);printf(性别:%sn,s1.sex);printf(年龄:%dn,s1.age);printf(住址:%sn,s1.home);printf(电话:%sn,s1.tel);printf(邮编:%ldn,s1.postcode); 第6章 结构与联合 程序的运行结果如下: 姓名: 何燕性别: 女年龄: 20住址: 劲松小区100号楼702室电话: 010-88985566邮编: 100058 第6章 结构与联合 6.1.4 结构数组1. 结构数组的定义结构类型与其它类型一样,当需要存储一组数据时可以定义成一个数组,即结构数组。

9、例如,当需要对全公司职工的基本情况进行存储与操作时, 可以进行如下定义: struct employee ss150;以上定义了一个数组ss1,ss1数组含有50个数组元素, 其数 组元素为struct employee类型。 第6章 结构与联合 2. 结构数组的初始化结构数组的初始化, 只能对全局的或静态存储类型的数组进行。 第6章 结构与联合 3. 结构数组的引用与其它数组一样,结构数组的引用只能引用数组元素而不能引用整个数组。 例 6.3 编写程序,输出某商店的电器库存情况。 第6章 结构与联合 struct jglx char name10;int No;main() static s

10、truct jglx jg= 电视机,36,电冰箱,28,洗衣机,110,VCD机,40,照相机,21,微波炉,60,电风扇,130,空调机,38, 录像机,15,586计算机,60; int i;printf( 库存情况:n);printf( 商品名称 数量n); 第6章 结构与联合 程序的运行结果如下: 库存情况:商品名称 数量电视机 36电冰箱 28洗衣机 110VCD机 40照相机 21微波炉 60电风扇 130空调机 38录像机 15586计算机 60 第6章 结构与联合 例6.4 编写程序,输入5名学生的姓名、语文成绩、 数学成绩、C语言成绩,计算平均成绩并输出平均成绩最高学生的成

11、绩。 程序的执行过程如图6-1所示。 第6章 结构与联合 图 6-1 例6.4程序的执行过程 第6章 结构与联合 程序如下: main() struct jieg char name10;int yuwen;int shuxue;int c;float aver;j15;int i,j;for(i=0;i main () union lianhe int i;char ch;x;x.i=111;printf(%d,%cn,x.i,x.ch);x.ch=a;printf(%d,%cn,x.i,x.ch); 第6章 结构与联合 程序的运行结果如下:111,o97,a例 6.6 程序中,定义并说明了

12、一个联合类型变量x, 它的两个成员i和ch分别为int类型和char类型, 共用 2 个字节的内存。 因为C语言中整型与字符型是互相通用的, 所以当x.i被赋值为 111 时, x.ch的值为字符o; 而当x.ch被赋值为a时, x.i的值为 97。 从例 6.6 程序可以看出,一旦联合变量的某个成员被赋值, 那么在其之前已赋值的成员的内容将被破坏。 第6章 结构与联合 6.3 位 字 段 6.3.1 位运算位运算是对操作数以二进制位(bit)为单位进行的数据处理。C语言中,位运算包括逻辑位运算和移位位运算。 参加位运算的操作数必须是整型常量或变量。 1. 逻辑位运算逻辑位运算分为4种:位反、

13、位与、 位或和位异或。 其运算功能如表6-1和表6-2 所示。 第6章 结构与联合 表 6-1 逻辑位运算符 第6章 结构与联合 表 6-2 逻辑位运算的功能 第6章 结构与联合 例 6.7 逻辑位运算示例。 已知a=0xf0=(11110000)2b=0xff=(11111111)2a=0x0f=(00001111)2 aa=0xf0;b=0xff;printf(a=%xn,a);printf(aprintf(a|b=%xn,a|b);printf(ab=%02xn,ab); 第6章 结构与联合 程序的运行结果如下: a=ff0faa=-16;b=240;c=44;printf(a=%d右移

14、二位a=%dn,a,a2);printf(b=%d右移二位b=%dn,b,b2);printf(c=%d左移二位c=%dn,c,c1)printf(%dn,wz1.w1);此外, 位字段变量还可以进行位运算。 第6章 结构与联合 例 6.10 位字段的应用示例。 weizi(int m) struct jg int i;int b:2;n;n.i=m;if(n.i0)n.b=1;else if(n.iwest)if(loc=0)枚举变量进行比较的规则是: 以序号的大小相互比较, 序号大, 则变量的值就大。 (4) 枚举变量可以作为函数的参数或函数的返回值。 第6章 结构与联合 (5) 枚举变量的值不能由输入输出函数直接进行输入输出。 例如: printf(%sn,loc); 编译时不会出错, 但是不输出内容。 第6章 结构与联合 例 6.11 已知98年1月1日是星期四,当输入今年任意一天 的日期时,计算是星期几并输出。 main()enum weekdaysunday,monday,tuesday,wednesday,

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

最新文档


当前位置:首页 > 高等教育 > 大学课件

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