《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型

上传人:E**** 文档编号:89400528 上传时间:2019-05-24 格式:PPT 页数:31 大小:194.50KB
返回 下载 相关 举报
《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型_第1页
第1页 / 共31页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型_第2页
第2页 / 共31页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型_第3页
第3页 / 共31页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型_第4页
第4页 / 共31页
《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型》由会员分享,可在线阅读,更多相关《《C语言程序设计教程(第二版)》-徐新华-电子教案 第10章 结构类型(31页珍藏版)》请在金锄头文库上搜索。

1、2019/5/24,1,第10章 结构体,为整合不同数据类型、但相互关联的一组数据,C语言提供一种称为“结构体”的数据结构。 教学目的: 掌握结构体类型的定义,结构体变量的定义与引用,指向结构体数据的指针变量的应用; 了解结构体数组 ,链表,枚举型,共用型,已有类型的别名定义等。,2019/5/24,2,教学内容: 10.1* 结构体类型与结构体变量的定义 10.2* 结构体变量的引用与初始化 10.3 结构体数组 10.4* 指向结构体数据的指针 本章要点 本章作业与上机实践,2019/5/24,3,10.1* 结构体类型与结构体变量的定义,案例10.1 定义一组反映学生基本情况的结构类型,

2、用以存储学生的相关信息。 struct date /*日期结构类型*/ int year ; int month ; int day ; ; struct date /*日期结构类型*/ int year, month, day ; ;,2019/5/24,4,struct std_info /*学生信息结构类型*/ char no7; char name9; char sex3; struct date birthday; ; struct score /*成绩结构类型*/ char no7; int score1, score2, score3; ;,字符数组的长度 = 实际长度 +1 (

3、存储结束标志),允许是已定义的另一个结构体类型,2019/5/24,5,1、 结构体类型的定义 struct 结构体类型名 数据类型 数据项1; 数据类型 数据项2; 数据类型 数据项; ;,分号不能少!,结构体类型关键字,2019/5/24,6,(1)“结构体类型名”和“数据项”的命名规则,与变量名相同。 (2)相同数据类型的数据项,既可逐个、逐行分别定义,也可合并成一行定义。 例如,案例10.1中的结构体类型date。 (3)结构体类型中的数据项,允许是已定义的另一个结构体类型。 例如, 案例10.1中、结构体类型std_info的数据项“birthday” 。,2019/5/24,7,2

4、、结构体变量的定义 (1)间接定义先定义类型、再定义变量 例如,利用案例10.1中、结构体类型std_info,定义结构体变量student: struct std_info student ; 则结构体变量student拥有结构体类型std_info的全部数据项。,结构体类型名不可缺!下列写法是错误的: struct student ;,2019/5/24,8,(2)直接定义定义类型的同时,定义变量 struct 结构类型名 结构变量表; 说明:结构类型中的数据项名(又称成员名),可以与程序中的变量同名。 返回,2019/5/24,9,10.2* 结构体变量的引用与初始化,案例10.2 利用

5、案例10.1中的结构体类型std_info,定义结构体变量student,用于存储和显示1个学生的信息。,2019/5/24,10,#include “struct.h “ struct std_info student =“000102“,“张三“,“男“,1980,9,20 ; #include “stdio.h“ #include “conio.h“ void main( ) printf(“No: %sn“, student . no); printf(“Name: %sn“, student . name); printf(“Sex: %sn“, student . sex); pr

6、intf(“Birthday: %d-%d-%dn“, student.birthday. year, student.birthday. month, student.birthday. day ) ; getch(); ,案例10.1中定义的结构体类型,成员运算符,2019/5/24,11,程序运行结果: No: 000102 Name: 张三 Sex: 男 Birthday: 1980-9-20,2019/5/24,12,1、结构体变量成员的引用规则 (1) 基本类型: 结构变量.成员 例如,student.no,student.name等。 (2) 结构体类型:结构变量.成员.成员 例

7、如:student.birthday.year student.birthday.month student.birthday.day,本身是结构类型,只能访问它的成员,2019/5/24,13,(3) 最低1级成员,等价同类型的普通变量。 (4) 既可引用结构体变量成员的地址,也可引用结构变量的地址。 例如,&student.name ,&student 。,2019/5/24,14,2、结构体变量的初始化 结构体变量=初值表 与1维数组相似,但结构体类型成员的初值,是一个初值表。 例如,struct std_info student = “000102“, “张三“, “男“ , 1980

8、,9,20 。 注:初值的数据类型,应与结构变量中相应成员所要求的一致,否则会出错。 返回,2019/5/24,15,10.3 结构体数组,结构体数组的每一个元素,都是结构体类型数据,均包含结构体类型的所有成员。 案例10.3 利用struct std_info,定义一个结构体 数组student3,用于存储和显示3个学生的基本情况。 #include “stdio.h“ #include “conio.h“ #include “struct.h“ struct std_info student3 = “000102”,“张三”,“男”,1980,9,20, “000105”,“李四”,“男”

9、,1980,8,15, “000112”,“王五”,“女”,1980,3,10 ;,2019/5/24,16,void main( ) int i; /*打印表头: “表示1个空格字符*/ printf(“No.NameSexBirthdayn“); for(i=0; i3; i+) printf(“%-7s“, studenti.no); printf(“%-9s“, studenti.name); printf(“%-4s“, studenti.sex); printf(“%d-%d-%dn“, studenti.birthday.year, studenti.birthday.month

10、, studenti.birthday.day); getch(); 思考: studenti.no student.noi?,数组元素是结构变量,2019/5/24,17,程序运行结果: No. Name Sex Birthday 000102 张三 男 1980-9-20 000105 李四 男 1980-8-15 000112 王五 女 1980-3-10,2019/5/24,18,1、结构体数组的定义 与结构体变量的定义类似,可以直接或间接定义,只需说明为数组即可。 2、结构体数组的初始化 结构体数组n初值表1,初值表2,. 思考:与2维数组初始化相似吗? 返回,2019/5/24,1

11、9,10.4* 指向结构体数据的指针,10.4.1 指向结构体变量的指针 案例10.4 使用指向结构体变量的指针,访问其各个成员。,2019/5/24,20,#include “stdio.h“ #include “conio.h“ #include “struct.h” struct std_info student = “000102”,“张三”,“男”,1980,9,20; void main( ) struct std_info *p_std = ,-:指向结构变量成员运算符,2019/5/24,21,如果指针变量pointer已指向结构体变量var,则以下三种形式等价: (1) va

12、r.成员 (2) pointer -成员 (3) (*pointer).成员 思考:如果要求从键盘上输入student的各成员数据,如何修改程序?,var只能是结构体变量名,pointer只能是指针变量,括号不能缺!,2019/5/24,22, void main( ) struct std_info *p_std = 注:无论输入或输出,最低级成员的性质(变量/指针),决定输入项或输出项表达式的性质。,取birthday.year的地址,此处不能加&。为什么?,2019/5/24,23,10.4.2 指向结构体数组的指针 例10.5 使用指向结构数组的指针来访问结构数组。 #include

13、“stdio.h“ #include “conio.h“ #include “struct.h“ struct std_info student3=“000102“,“张三“,“男“,1980,5,20, “000105“,“李四“,“男“,1980,8,15, “000112”,“王五”,“女”,1980,3,10 ; void main() struct std_info *p_std = student; int i=0;,指向结构数组student的指针,2019/5/24,24,/*打印表头*/ printf(“No.NameSexBirthdayn“); /*输出*/ for( ;

14、 ino, p_std-name, p_std-sex, p_std-birthday.year, p_std-birthday.month, p_std-birthday.day); getch(); ,指向结构数组的下一个元素,而不是当前元素的下一个成员,2019/5/24,25,10.4.3 指向结构数据的指针作函数参数 例10.6 编写显示函数display(),通过主函数调用来实现例10.5的显示。 #include “stdio.h“ #include “conio.h“ #include “struct.h“ struct std_info student3=“000102“,“

15、张三“,“男“,1980,5,20, “000105“,“李四“,“男“,1980,8,15, “000112”,“王五”,“女”,1980,3,10 ;,2019/5/24,26,void display( struct std_info *p_std ) printf(“%-7s%-9s%-4s“, p_std-no, p_std-name, p_std-sex); printf(“%4d-%2d-%2dn“, p_std-birthday.year, p_std-birthday.month, p_std-birthday.day); ,2019/5/24,27,void main() int i = 0; printf(“No.NameSexBirthdayn“); for( ; i 3; i+) display( student + i ); printf(“n“);

展开阅读全文
相关资源
相关搜索

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

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