第9章 结构体、共用体与自定义类型课件.ppt
《第9章 结构体、共用体与自定义类型课件.ppt》由会员分享,可在线阅读,更多相关《第9章 结构体、共用体与自定义类型课件.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第9章结构体、共用体与自定义类型-2-结构体的概念结构体数组指向结构体类型数据的指针共用体用typedef定义类型程序设计举例本章教学内容:本章教学内容:本章教学目标:本章教学目标:理解和掌握结构体类型的定义、结构体变量的定义与初始 化、 结构体变量成员的引用。 理解和掌握结构体数组的定义、初始化及应用。 理解和掌握指向结构体变量的指针及指向结构体数组的指针。了解共用体类型的定义、共用体变量的定义及引用。 能够熟练用typedef定义数据类型。-3- 9.1 结构体的概念结构体的概念 有时需要使用由多种类型数据组合而成的一种构造型数据。例如,要反映一个学生的基本情况,需要表示出的数据有学生的学
2、号、姓名、性别、年龄、成绩等数据项,这些数据项相互联系,共同构成一个整体。而这些数据项的数据类型又各不相同,这就要求定义出一种构造型数据,该构造型数据中的每一个分项的数据类型可以各不相同。在这种情况下,结构体类型便应运而生。-4- 结构体类型的定义结构体类型的定义 结构体类型是用户在程序中自己定义的一种数据类型。结构型必须先定义,然后利用已经定义好的结构型来定义变量、数组、指针等。 定义结构体类型的一般形式为: struct 结构体类型名结构体类型名 数据类型数据类型1 成员名成员名1; 数据类型数据类型2 成员名成员名2; 数据类型数据类型3 成员名成员名3; 数据类型数据类型n 成员名成员
3、名n; ;-5-结构体类型的定义结构体类型的定义例如,定义一个结构体类型student,如下:struct student int number; char name10; char sex; int age; float score;-6-结构体类型的定义结构体类型的定义【例题例题9-1】结构体型嵌套的例子。 为了存放一个人的姓名、性别,出生日期、年龄,可以定义以下的嵌套结构体型。 struct birthday int y; int m; int d; ; struct person char name10; char sex; struct birthday bir; double wa
4、ge; ;-7-9.1.2 结构体类型变量的定义及初始化结构体类型变量的定义及初始化结构体类型变量的定义一般有三种形式:(1) 先定义结构体类型,再定义结构体类型的变量。先定义结构体类型,再定义结构体类型的变量。 定义结构体类型变量的一般形式为:定义结构体类型变量的一般形式为: 结构体类型名结构体类型名 结构体变量名;结构体变量名; 例如:例如:【例题例题9-2】定义描述学生信息(学号、姓名、性别、年龄、成绩)的结 构型及2个该结构型的变量,程序代码段如下: struct student int number; char name10; char sex; int age; float sco
5、re; ; struct student stu1,stu2;-8-结构体类型变量的定义及初始化(续)(2) 定义结构型的同时定义结构体变量及初始化定义结构型的同时定义结构体变量及初始化 可以在定义结构型的同时定义结构体变量及初始化,这种定义的一般形式为:-9- struct 结构体名结构体名 数据类型数据类型1 成员名成员名1; 数据类型数据类型2 成员名成员名2; 数据类型数据类型3 成员名成员名3; 数据类型数据类型n 成员名成员名n; 变量名表列及赋初值;变量名表列及赋初值;struct student int number;char name10;char sex;int age;f
6、loat score;stu1=1001,“yang”,F,21, 98.5, stu2=1002,“zhang”,M,20, 86.0;结构体类型变量的定义及初始化结构体类型变量的定义及初始化(续)(续) (3)可以省略结构体名,定义结构体型的同时定义变量并赋初值可以省略结构体名,定义结构体型的同时定义变量并赋初值。 这种定义的一般形式为:-10- struct 数据类型1 成员名1; 数据类型2 成员名2; 数据类型3 成员名3; 数据类型n 成员名n; 变量名表列及赋初值;struct int number; char name10; char sex; int age; float s
7、core;stu1=1001,“yang”,F,21, 98.5, stu2=1002,“zhang”,M,20, 86.0;9.1.3 结构体类型变量成员的引用结构体类型变量成员的引用 定义好结构体变量后,就可以使用变量了。一般不能直接使用结构体变量,只能引用结构体变量的成员。 引用结构体变量成员的一般形式如下: 结构体变量名结构体变量名.成员名成员名-11-9.1.3 结构体类型变量成员的引用结构体类型变量成员的引用(续)(续)-12-【例例9-3】引用结构体变量成员的例子。 #include #include int main() struct student int number; c
8、har name10; char sex; double score2; ; struct student s1; s1.number=2015001; strcpy(s1.name, yang);s1.sex=F;s1.score0=94.5;s1.score1=87.5;printf(number=%d,name=%s,sex=%c,s1.number,s1.name,s1.sex);printf(score1=%.2lf,score2=%.2lfn,s1.score0,s1.score1);return 0; 程序的运行结果如下图9-1所示:9.1.3 结构体类型变量成员的引用结构体类型
9、变量成员的引用(续)(续)在引用结构体变量的成员时,应注意以下几点:(1) 不能整体引用结构体变量,只能对结构体变量的成员分别引用。如上例9-3中,输出语句若写 成下列形式,则是错误的。 printf(number=%d,name=%s,sex=%c, score1=%.2lf,score2=%.2lfn ,s1);(2)结构体变量的成员可以象普通的变量一样参加各种运算。例如: s1.score0=s1.score0+10; s1.score0=s1.score1;(3)可以引用结构体变量的地址,也可以引用结构体变量成员的地址。下列表示都是正确的。 scanf(“%d”,&s1.number)
10、; /输入s1.number(学生的学号)值。 printf(“%x”,&s1); /输出s1的起始地址。 但注意,要输入结构体变量成员的值,应该分别输入各个成员值,不能整体读入结构体变量。下列形式是错误的: scanf(“%d,%s,%c,%lf,%lf”,s1);(4)对于嵌套的结构体变量,应用成员运算符,一级一级引用,直到找到最低一级成员,只能对最低级成员进行各种运算。例如, stu1.name; stu1.bir.y; /表示学生stu1出生的年份。-13-嵌套的结构体变量成员引用-14-【例【例9-4】嵌套的结构体变量成员引用的例子】嵌套的结构体变量成员引用的例子。#include#
11、includestruct birthday int year; int month; int day; ;struct person char name10; char sex; struct birthday bir; char address30; p;int main() strcpy(p.name, zhang); p.sex=M; p.bir.year=1995; p.bir.month=10; p.bir.day=21; strcpy(p.address, shanghai);printf(name=%s,sex=%c,address=%sn,p.name, p.sex, p.a
12、ddress);printf(birthday=%4d年%2d月%2d日n, p.bir.year, p.bir.month, p.bir.day); return 0; 9.2 结构体数组结构体数组 结构体数组中的每一个元素相当于一个具有相同结构体类型的变量,结构体数组是具有相同类型的结构体变量的集合。 9.2.1 结构体数组的定义结构体数组的定义 定义结构体数组的方法与定义结构体变量的方法一样,把变量名改为数组即可,定义结构体数组也有三种方式。在此省去。-15-9.2.2 结构体数组的初始化结构体数组的初始化对结构体数组的初始化,要分别对每一个数组元素初始化。struct student
13、int number; char name10; char sex; double score2; ;struct student stu5=2015001,“zhang”,T,67.5,89.5, 2015002,“liu”,F,80.0,86.5, 2015003,“sun”,T,85.0,81.0, 2015004,“yang”,F,72.0,75.5, 2015005,“li”,T,86.0,75.0;-16- 9.2.3 结构体数组应用举例结构体数组应用举例-17-【例【例9-4】设有如下学生信息:学号、姓名、出生年月】设有如下学生信息:学号、姓名、出生年月(包含整型的年、月、日包含
14、整型的年、月、日)。编写一程序,输入编写一程序,输入5个学生的信息,输出所有学生的学号和姓名个学生的信息,输出所有学生的学号和姓名。#define N5#includeint main() struct birthday int year; int month; int day; ;struct date long num; char name10; struct birthday bir; stuN;for(int i=0;iN;i+) printf(请输入第%d个学生信息 n,i+1);scanf(%ld,&stui.num);scanf(%s,stui.name);scanf(%d,%d
15、,%d,&stui.bir.year, &stui.bir.month, &stui.bir.day);printf(n);printf(学号 姓名n);for(i=0;i结构体成员名结构体成员名 (3) 结构体变量结构体变量.成员名成员名-19-指向结构体变量的指针指向结构体变量的指针-20-【例【例9-6】使用指向结构体变量的指针输出学生信息。】使用指向结构体变量的指针输出学生信息。 #include #includestruct student long num; char name10; char sex; int age; double score;int main( ) struc
16、t student stu1; struct student *p; p=&stu1; stu1.num=20150101; strcpy(stu1.name,”Zhang Jun”); stu1.sex=M; stu1.age=21; stu1.score=92.5;printf(“第一次输出学生信息:n”);printf(“num:%ld,name:%s,sex:%c,age:%d,score:%ldn”,p-num,p-name,p-sex,p-age,p-score);printf(“第二次输出学生信息:n”);printf(“num:%ld,name:%s,sex:%c,age:%d
17、,score:%ldn”,(*p).num,(*p).name,(*p).sex,(*p).age,(*p).score);printf(“第三次输出学生信息:n”);printf(“num:%ld,name:%s,sex:%c,age:%d,score:%ldn”,stu1.num,stu1.name,stu1.sex,stu1.age,stu1.score);return 0; 9.3.2 指向结构体数组的指针指向结构体数组的指针 指针变量可以指向一个结构体数组,此时结构体指针变量的值是整个结构体数组的首地址。结构体指针变量也可指向结构体数组中的某一个元素,此时结构体指针变量的值是该数组元
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第9章 结构体、共用体与自定义类型课件 结构 共用 自定义 类型 课件
限制150内