结构、联合、位运算和枚举类型.ppt
《结构、联合、位运算和枚举类型.ppt》由会员分享,可在线阅读,更多相关《结构、联合、位运算和枚举类型.ppt(124页珍藏版)》请在三一办公上搜索。
1、2023/10/30,1,主讲教师:*个人主页:*,C语言程序设计(C99版),四川大学计算机学院,四川大学计算机学院,2023/10/30,2,教材:C语言程序设计(C99版),陈良银 游洪跃 李旭伟 主编李志蜀 唐宁九 李 涛 主审清华大学出版社2006年9月出版,2023/10/30,3,本书内容,第1章 基础知识第2章 C语言的基本要素第3章 变量名、数据类型、运算符和表达式第4章 C程序基本控制结构第5章 函数第6章 数组和指针第7章 递归第8章 结构、联合、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题第12章 C89 Vs C99实验(待安排),2023
2、/10/30,4,枚举类型,本章主要内容,ARM Vector Table,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,1,3,2,联合,结构,4,类型定义:typedef,5,位段,2023/10/30,5,本章的节本要求,本章主要介绍C语言的结构、联合、枚举类型、类型定义:typedef和段位的基本概念和使用方法。本章要求读者能使用结构、联合、枚举类型、类型定义:typedef和段位的编写简单的应用程序。希望读者在计算机上调试运行教材中的程序。在网页:
3、http:/,2023/10/30,6,8.1 结构 8.1.1概述,在解决实际问题中,一组数据一般具有不同的数据类型。结构是一种构造类型,它由若干成员组成的。,2023/10/30,7,8.1.2结构的声明,一、结构类型的定义定义一个结构的一般形式为:struct 结构类型名 成员表列;成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:类型说明符 成员名;成员名的命名应符合标识符的书写规定。,2023/10/30,8,8.1.2结构的声明,例如:struct StudentType/*定义结构类型*/int num;/*学号*/char*name
4、;/*姓名*/char sex3;/*性别*/float score;/*成绩*/;,2023/10/30,9,在上面的结构定义中,结构名为StudentType,此结构由4个成员组成,如下图所示。第一个成员为num,整型变量;第二个成员为name,字符指针;第三个成员为sex,字符数组;第四个成员为score,实型变量。注意在括号后的分号是不可缺少的。结构定义后,即可进行变量说明。凡说明为结构StudentType的变量都由上述4个成员组成。结构是一种构造的数据类型,是数目固定,类型不同的若干有序变量的集合。,2023/10/30,10,二、结构类型变量的定义以上面定义的SttudentTy
5、pe为例来加以说明1先定义结构类型,再说明结构变量。这种定义一个结构变量的一般形式如下:struct 结构类型名 成员表列;结构类型名 结构变量列表;,2023/10/30,11,上面结构变量列表中不同结构变量之间用逗号,隔开,例如:struct StudentType/*定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/float score;/*成绩*/;struct StudentType boy,girl;/*定义结构变量*/上面定义了两个变量boy和girl为StudentType结构类型。,2023/10/30,12,2在定
6、义结构类型的同时说明结构变量。这种定义一个结构变量的一般形式如下:struct 结构类型名 成员表列 结构变量列表;,2023/10/30,13,例如:struct StudentType/*定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/float score;/*成绩*/boy,girl;/*定义结构类型变量*/上面的定义与第一种方法相同,也定义了两个变量boy和girl为StudentType结构类型。,2023/10/30,14,3直接说明结构变量这种定义一个结构变量的一般形式如下:struct 成员表列 结构变量列表;例如:
7、structint num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/float score;/*成绩*/boy,girl;/*定义结构类型变量*/,2023/10/30,15,结构类型的成员也可以又是一个结构,即构成了嵌套的结构类型。例如,按下图可给出以下结构定义:,2023/10/30,16,struct DateType/*定义结构类型*/int year;/*年*/int month;/*月*/int day;/*日*/;定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/struct DateT
8、ype birthday/*生日*/float score;/*成绩*/boy,girl;/*定义结构类型变量*/,2023/10/30,17,在ANSI C中除了允许具有相同类型的结构变量相互赋值以外,一般对结构变量的使用,包括赋值、输入、输出、运算等都是通过结构变量的成员来实现的。,2023/10/30,18,8.1.3结构类型变量的引用,表示结构变量成员的一般形式是:结构变量名.成员名结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成,下面通过示例进行说明。,2023/10/30,19,例8.1 试编写为结构变量赋值并输出其值的程序。S8_1.C/*为结构变量student赋值
9、*/student.num=10101;/*为num赋值*/student.name=德华刘;/*为name赋值*/strcpy(student.sex,男);/*为sex复制赋值*/student.birthday.year=1962;/*为year赋值*/student.birthday.month=8;/*为month赋值*/student.birthday.day=18;/*为day赋值*/student.score=98.1;/*为score赋值*/,2023/10/30,20,/*输出结构变量student*/printf(学号:%dn,student.num);/*输出num*/
10、printf(姓名:%sn,student.name);/*输出name*/printf(性别:%sn,student.sex);/*输出sex*/printf(生日:%d年,%d月,%d日n,/*输出birthday*/student.birthday.year,student.birthday.month,student.birthday.day);printf(成绩:%4.1fn,student.score);/*输出score*/,2023/10/30,21,程序运行结果如下:,2023/10/30,22,8.1.4结构变量的初始化,结构体变量也与其他为变量一样,可以在定义的同时进行初
11、始化,下面通过示例加以说明。例 8.2 对结构变量初始化并输出其值。S8_2.Cstruct StudentType student=/*定义结构类型变量并同时进行初始化*/10168,/*初始化num*/学友张,/*初始化name*/男,/*初始化sex*/1963,6,18,/*初始化birthday*/99.8/*初始化score*/;,2023/10/30,23,8.1.4结构变量的初始化,/*输出结构变量student*/printf(学号:%dn,student.num);/*输出num*/printf(姓名:%sn,student.name);/*输出name*/printf(性
12、别:%sn,student.sex);/*输出sex*/printf(生日:%d年%d月%d日n,/*输出birthday*/student.birthday.year,student.birthday.month,student.birthday.day);printf(成绩:%4.1fn,student.score);/*输出score*/,2023/10/30,24,8.1.4结构变量的初始化,程序运行结果如下:,2023/10/30,25,8.1.5结构数组,数组元素也可以是结构类型的。可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。在实际应用中,经常用结构
13、数组来表示具有相同结构的一个群体。如一个班的学生信息,一个车间职工信息等。,2023/10/30,26,一、结构数组的定义结构数组的定义方法和结构变量相似,只需说明它为数组类型即可。例如:#define N 3struct StudentType/*定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/int age;/*年龄*/float score;/*成绩*/;struct StudentType studentN;/*定义结数组*/,2023/10/30,27,上面定义了数组student,元素类型为StduentType,数组共有
14、N个元素,读者也可象定义结构类型变量一样进行直接定义,例如:#define N 3struct StudentType/*定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/int age;/*年龄*/float score;/*成绩*/studentN;/*定义结构数组*/,2023/10/30,28,或#define N 3structint num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/int age;/*年龄*/float score;/*成绩*/studentN;/*定义结构数组*/,202
15、3/10/30,29,如下图所示。,2023/10/30,30,二、结构数组的初始化与其他类型的数组一样,对结构数组可以作初始化赋值,下面通过示例加以说明。例 8.3 对结构数组初始化并输出结构变量。S8_3.Cstruct StudentType studentN=/*定义结数组并进行初始化*/10101,德华刘,男,42,98.1,10102,靓影张,女,22,99.8,10103,学友张,男,43,96.5;/*输出结构数组student*/for(i=0;i N;i+)/*输出第i个学生信息*/printf(%8d,studenti.num);/*输出num*/printf(%12s,
16、studenti.name);/*输出name*/printf(%6s,studenti.sex);/*输出sex*/printf(%6d,studenti.age);/*输出age*/printf(%8.1fn,studenti.score);/*输出score*/,2023/10/30,31,程序运行结果如下:,2023/10/30,32,定义结构数组时,可不指定元素个数,例如struct StudentType student=/*定义结数组并进行初始化*/10101,德华刘,男,42,98.1,10102,靓影张,女,22,99.8,10103,学友张,男,43,96.5;,2023/
17、10/30,33,在编译时,系统将根据初始结构个数自动地确定数组元素个数,当然也可采用如下的直接定义结构数组并初始化的形式:struct StudentType/*定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/int age;/*年龄*/float score;/*成绩*/student=/*定义结数组并进行初始化*/10101,德华刘,男,42,98.1,10102,靓影张,女,22,99.8,10103,学友张,男,43,96.5;,2023/10/30,34,或structint num;/*学号*/char*name;/*姓
18、名*/char sex3;/*性别*/int age;/*年龄*/float score;/*成绩*/student=/*定义结数组并进行初始化*/10101,德华刘,男,42,98.1,10102,靓影张,女,22,99.8,10103,学友张,男,43,96.5;,2023/10/30,35,三、结构数组实例下面将举一些简单的说明性示例说明结构数组的使用方法。例8.4计算学生的平均成绩以及及格的人数。S8_4.C/*计算平均成绩及及格学生人数*/for(i=0;i=60)/*及格,numOfPass自加1*/countOfPass+;av=sum/N;,2023/10/30,36,程序运行
19、结果如下:,2023/10/30,37,例8.5 建立同学通讯录。S8_5.Cfor(i=0;i NUM;i+)/*输入通讯信息*/printf(n输入第%d个人通讯信息:n,i+1);printf(输入姓名:);gets(menberi.name);printf(输入电话号码:);gets(menberi.phone);printf(nn姓名ttt电话号码nn);for(i=0;i NUM;i+)/*输出个人通讯信息*/printf(%sttt%sn,menberi.name,menberi.phone);,2023/10/30,38,程序参考运行结果如下:,2023/10/30,39,8.
20、1.5指向结构类型的指针,一、指向结构变量的指针当指针变量用来指向一个结构变量时,这样的指针变量称之为结构指针变量。结构指针变量中的值就是所指向的结构变量的首地址。读者可通过结构指针访问该结构变量,结构指针变量说明的一般形式为:结构类型名*结构指针变量名 例如,在前面的例8.1定义了StudentType这个结构类型,如要说明一个指向StudentType的指针变量pStudent,可写为:struct StudentType*pStudent;,2023/10/30,40,也可在定义结构类型的同时说明pStudent,例如:struct StudentType/*定义结构类型*/int nu
21、m;/*学号*/char*name;/*姓名*/char sex3;/*性别*/DateType birthday;/*生日*/float score;/*成绩*/*pStudent;,2023/10/30,41,或structint num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/DateType birthday;/*生日*/float score;/*成绩*/*pStudent;,2023/10/30,42,结构指针变量必须要赋值之后才能使用,赋值是将结构变量的首地址赋予该指针变量,不能将结构类型名的地址赋值给指针变量,例如:struct Studen
22、tType/*定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3;/*性别*/DateType birthday;/*生日*/float score;/*成绩*/;struct StudentType boy,*pStudent;/*boy为结构变量,pStudent为 结构指针变量*/pStudent=错误,不能将结构类型名的地址赋值给pStudent*/,2023/10/30,43,有了结构指针变量,就能更方便地访问结构变量的各个成员。其访问的一般形式为:(*结构指针变量).成员名或结构指针变量-成员名,2023/10/30,44,例如:(*pS
23、tudent).num或pStudent-num注意:(*pStudent)两侧的括号不可少,这是由于成员符.的优先级高于*。如去掉括号写作*pStudent.num则等效于*(pStudent.num),意义是完全不对了。下面通过例子来说明结构指针变量的具体说明和使用方法。,2023/10/30,45,例8.6 结构指示使用示例。S8_6.C说明:在C语言中,pStudent-num与(*pStudent).num等价,但前者更直观,希望读者多使用前者的形式。struct StudentType/*定义结构类型*/int num;/*学号*/char*name;/*姓名*/char sex3
24、;/*性别*/struct DateType birthday;/*生日*/float score;/*成绩*/;struct StudentType student;/*定义结构类型变量student*/struct StudentType*pStudent;/*结构指针变量pStudent*/,2023/10/30,46,pStudent=/*为score赋值*/,2023/10/30,47,/*输出学生信息*/printf(学号:%dn,pStudent-num);/*输出num*/printf(姓名:%sn,pStudent-name);/*输出name*/printf(性别:%sn,
25、pStudent-sex);/*输出sex*/printf(生日:%d年,%d月,%d日n,/*输出birthday*/pStudent-birthday.year,pStudent-birthday.month,pStudent-birthday.day);printf(成绩:%4.1fn,pStudent-score);/*输出score*/说明:在C语言中,pStudent-num与(*pStudent).num等价,但前者更直观,希望读者多使用前者的形式。,2023/10/30,48,二、指向结构数组变量的指针前面已介绍过可使用指向数组元素的指针,同样地对于结构数组,也可用指针来指向结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 联合 运算 枚举 类型
链接地址:https://www.31ppt.com/p-6428091.html