第七章-结构体共用体和枚举类型数据余课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第七章-结构体共用体和枚举类型数据余课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 结构 共用 枚举 类型 数据 课件
- 资源描述:
-
1、第七章第七章 结构体、共用体和枚举类型数据结构体、共用体和枚举类型数据(教材P244)7.1 结构体类型数据概述结构体类型数据概述 一、结构体类型的引入一、结构体类型的引入 简单变量:简单变量:数组:数组:结构体类型:结构体类型:2022-11-111二、结构体类型的不确定性二、结构体类型的不确定性结构体类型中包含的数据项因问题而异,是不确定的。结构体类型必须由用户自行定义。结构体类型中的数据项称为结构体的成员(或称为域)。2022-11-112三、结构体类型的定义三、结构体类型的定义 struct 结构体名结构体名结构体成员;结构体成员;struct studentchar name20;c
2、har sex;int age;float score;;结构体类型的定义形式为结构体类型的定义形式为 类型标识符2022-11-113struct timeint hour;int minute;int second;类型标识符struct time int hour,minute,second;注意,此处成员不是变量,程序中完全可以用这些名字作为其它的变量名来使用(但必须另行定义)。2022-11-1147.2 结构体类型变量结构体类型变量 一、结构体类型变量的定义一、结构体类型变量的定义 结构体类型在一个函数内只能定义一次,如结构体类型在一个函数内只能定义一次,如果是全局的,则在整个源程
3、序中只能定义一果是全局的,则在整个源程序中只能定义一次。而结构体类型变量则可以定义多个。次。而结构体类型变量则可以定义多个。结构体类型变量的定义方式有三种:结构体类型变量的定义方式有三种:2022-11-115struct student stud1,stud2;struct time t1,t2,t3;struct studentchar name20;char sex;int age;float score;;1、单独定义单独定义:即先定义结构体类型,然后单独定即先定义结构体类型,然后单独定义结构体类型的变量。义结构体类型的变量。注意,结构体关键字struct和结构体名必须作为一个整体使用
4、。struct timeint hour;int minute;int second;2022-11-116struct student stud3,stud4;struct time t;struct studentchar name20;char sex;int age;float score;stud1,stud2;2、同时定义同时定义:即在定义结构体类型时,同时即在定义结构体类型时,同时给出变量名。给出变量名。struct timeint hour;int minute;int second;t1,t2,t3;2022-11-1173、直接定义直接定义:即在定义结构体类型时不指定结即在
5、定义结构体类型时不指定结构体名,只给出变量名。构体名,只给出变量名。这时结构体类型变量必须一次定义完,因为没有结构体名,不可能再单独定义。struct char name20;char sex;int age;float score;stud1,stud2;struct int hour;int minute;int second;t1,t2,t3;2022-11-118(1)不要将结构体名与变量名混淆。(2)结构体成员的类型可以是另一个已定义的结构体类型,形成嵌套结构。例如在定义结构体类型变量时,应注意以下几点:在定义结构体类型变量时,应注意以下几点:2022-11-119struct da
6、teint month;int day;int year;;struct studentchar name20;char sex;struct date birthday;float score;;若定义若定义struct student stud1;则则stud1的数据结构为的数据结构为namesexbirthdayscoremonthdayyear2022-11-1110二、结构体变量的初始化二、结构体变量的初始化 struct time t1=14,35,55,t2;struct student stud=“zhangsan”,m,11,25,1980,95.5;2022-11-1111
7、三、结构体变量的引用三、结构体变量的引用 结构体变量的成员可被作为普通的变量结构体变量的成员可被作为普通的变量使用,包括赋值、运算、使用,包括赋值、运算、I/O等操作。等操作。成员的引用形式为成员的引用形式为:结构体变量结构体变量.成员名成员名 1、结构体变量中成员的引用、结构体变量中成员的引用 2022-11-1112main()struct studentchar name20;char sex;int age;float score;struct student stud1=“zhangsan”,m,20,95.5,stud2;gets(stud2.name);stud2.sex=f;s
8、tud2.age=stud1.age-2;stud2.score=stud1.score;stud2.age+;printf(“%s is”,stud2.name);if(stud2.sex=f)printf(“female”);else printf(“male”);printf(“whose age is%d and score is%6.2fn”,stud2.age,stud2.score);scanf(“%s”,stud2.name);输入:输入:lili显示:显示:lili is female whose age is 19 and score is 95.50 2022-11-11
9、13一般仅限于赋值。一般仅限于赋值。2、结构体变量作为整体的引用、结构体变量作为整体的引用 main()struct dateint month,day,year;olddate=4,30,2007;struct date newdate;newdate=olddate;newdate.year+=10;printf(“The date of ten years later is%d.%d.%dn”,newdate.year,newdate.month,newdate.day);显示:显示:The date of ten years later is 2017.4.30 2022-11-111
10、4通常结构体变量作为整体使用时不用于输入输出。通常结构体变量作为整体使用时不用于输入输出。四、结构体的输入输出四、结构体的输入输出 main()struct timeint hour;int minute;int second;t;scanf(“%d,%d,%d”,&t.hour,&t.minute,&t.second);printf(“%d:%d:%dn”,t);虽然输入:虽然输入:14,35,55可正确显示:可正确显示:14:35:55但不提倡使用但不提倡使用.2022-11-1115main()struct studentchar name20;char sex;int age;floa
11、t score;stud=“zhangsan”,m,20,95.5;printf(“%s,%c,%d,%fn”,stud);可将printf函数中stud改为stud.name,stud.sex,stud.age,stud.score。输出时将产生错误。为什么?如何改正?输出时将产生错误。为什么?如何改正?2022-11-1116五、位运算及位段五、位运算及位段 位位(bit):每一个):每一个0或或1称为一个称为一个“位位”(bit)字节字节(byte):):8位构成一个字节(位构成一个字节(byte)内存地址内存地址:每一个字节均有一个编号:每一个字节均有一个编号一)、位运算一)、位运算
12、2022-11-11171、按位与运算符、按位与运算符&参与运算的两个量按照对应的位进行与运算,且参与运算的两个量按照对应的位进行与运算,且0&00,0&10,1&00,1&112、按位或运算符、按位或运算符|参与运算的两个量按照对应位进行或运算,且参与运算的两个量按照对应位进行或运算,且0|00,0|11,1|01,1|113、按位异或运算符、按位异或运算符 参与运算的两个量按照对应的位进行异或运算,且参与运算的两个量按照对应的位进行异或运算,且000,011,101,110 2022-11-11184、按位取反运算符、按位取反运算符 位运算符中唯一的位运算符中唯一的单目单目运算符,即将数的
13、每一位取运算符,即将数的每一位取反(反(01,10)。)。5、左移运算符、左移运算符将一个数的各二进制位全部将一个数的各二进制位全部右移若干位右移若干位。右移后,右边。右移后,右边移出的位被舍弃移出的位被舍弃,左边补入的位分两种情况:,左边补入的位分两种情况:对对无符号无符号数,左边补入数,左边补入0对对有符号有符号数,若符号位为数,若符号位为0(正数)则补入(正数)则补入0;若符号位;若符号位为为1(负数)则补入(负数)则补入1。每右移一位相当于除以每右移一位相当于除以2,由于上述规则,对于负数亦,由于上述规则,对于负数亦成立。但仅适用于成立。但仅适用于右边没有右边没有1被移出被移出的情况。
14、的情况。2022-11-11201、位段及其定义、位段及其定义位段位段是一种特殊的结构体成员,这些成员允许以是一种特殊的结构体成员,这些成员允许以位位为单位进行定义和存储,可以作为独立的量参与操为单位进行定义和存储,可以作为独立的量参与操作和运算。作和运算。二)、二)、位段位段 教材教材P253例例7.4、7.5、7.6 2022-11-11212、位段的引用方法、位段的引用方法引用方法与结构体成员的引用相同。例如引用方法与结构体成员的引用相同。例如word.a,word.b使用位段应注意以下几方面:使用位段应注意以下几方面:1、位段只能是、位段只能是int或或unsigned int型型2、
15、不能引用位段的地址(如、不能引用位段的地址(如&word.a)3、若给位段赋的值超出其最大值,则仅截取其有效位、若给位段赋的值超出其最大值,则仅截取其有效位 2022-11-1122复习1、结构体类型的引入、结构体类型的引入2、结构体类型的不确定性、结构体类型的不确定性1、结构体类型变量的定义结构体类型变量的定义3、结构体类型的定义、结构体类型的定义 2、结构体变量的初始化、结构体变量的初始化 3、结构体变量的引用、结构体变量的引用 4、结构体的输入输出、结构体的输入输出 重重 点点二、结构体类型变量二、结构体类型变量 一、结构体类型数据概述一、结构体类型数据概述 2022-11-1123一、
16、结构体数组的定义一、结构体数组的定义 二、结构体数组的初始化二、结构体数组的初始化三、结构体数组的引用三、结构体数组的引用四、输入数据时容易出现的问题四、输入数据时容易出现的问题7.3 结构体数组结构体数组 7.4 结构体与函数结构体与函数 一、结构体变量作为函数参数一、结构体变量作为函数参数 二、结构体类型函数二、结构体类型函数2022-11-1124一、结构体数组的定义一、结构体数组的定义 struct studentchar name20;char sex;int age;float score;;struct student stud50;单独定义单独定义 同同时时定定义义 struc
17、t time int hour;int minute;int second;t120,t240;struct int month;int day;int year;date30;直直接接定定义义 2022-11-1125二、结构体数组的初始化二、结构体数组的初始化 struct date_of_birthint year;int month;int day;struct date_of_birth birthday50=1979,3,12,1978,8,23,1980,4,8;为数组为数组birthday的前的前3个元素赋个元素赋了初值,其余元素未赋初值,了初值,其余元素未赋初值,系统将系统将
18、数值型成员赋以数值型成员赋以0,对,对字符型数据赋以字符型数据赋以0。即在定义数组时提供初值。即在定义数组时提供初值。2022-11-1126若初始化时提供的数据组的个数与数组若初始化时提供的数据组的个数与数组的元素个数相同,则元素个数可省略。的元素个数相同,则元素个数可省略。教材教材P255下例下例 2022-11-11271、引用某元素的一个成员例如 接上例birthday3.year=birthday0.year;birthday3.month=birthday1.month;birthday3.day=birthday2.day;三、结构体数组的引用三、结构体数组的引用 遵从一般数组和
19、结构体变量的规定。遵从一般数组和结构体变量的规定。2022-11-11282、引用某一个元素、引用某一个元素这时一般用于赋值,与结构体变量用法类似。这时一般用于赋值,与结构体变量用法类似。struct date_of_birth d;d=birthday0;birthday0=birthday2;birthday2=d;例如例如 接上例接上例2022-11-1129四、输入数据时容易出现的问题四、输入数据时容易出现的问题#include“stdio.h”main()structchar name20;int age;char sex;stud;scanf(“%s,%d,%c”,stud.nam
20、e,&stud.age,&stud.sex);printf(“%sn%dn%cn”,stud.name,stud.age,stud.sex);若输入:若输入:zhang san,20,m 若输入:若输入:zhangsan,20,m2022-11-1130 可将输入改为:可将输入改为:gets(stud.name);scanf(“%d,%c”,&stud.age,&stud.sex);这时输入:这时输入:zhangsan 20,m 结果正确:结果正确:zhangsan 20 m2022-11-1131 但若将输入改为:但若将输入改为:gets(stud.name);scanf(“%d”,&stu
21、d.age);scanf(“%c”,&stud.sex);则输入:则输入:zhangsan 20 若再改为:若再改为:gets(stud.name);scanf(“%d”,&stud.age);stud.sex=getchar();为了吸收前一个输入中的为了吸收前一个输入中的回车符对后一个输入的影回车符对后一个输入的影响,通常增加一个语句。响,通常增加一个语句。gets(stud.name);scanf(“%d”,&stud.age);getchar();stud.sex=getchar();则正确。则正确。还未及输入还未及输入m,程序已运行,程序已运行,且且stud.sex得到的是换行符。得
22、到的是换行符。2022-11-1132综上所述,为了避免不同类型引起的混乱,可以将综上所述,为了避免不同类型引起的混乱,可以将各种类型的数据都用各种类型的数据都用gets函数函数输入(单个字符则用输入(单个字符则用getchar函数函数),然后利用),然后利用C的库函数将数据转换成的库函数将数据转换成原来的类型。原来的类型。转换函数有:(须包含头文件转换函数有:(须包含头文件“stdlib.h”)atoi(字符串)(字符串)转换为整型转换为整型atof(字符串)(字符串)转换为实型转换为实型atol(字符串)(字符串)转换为长整型转换为长整型2022-11-1133 7.4 结构体与函数结构体
展开阅读全文