结构体类型.ppt
《结构体类型.ppt》由会员分享,可在线阅读,更多相关《结构体类型.ppt(42页珍藏版)》请在三一办公上搜索。
1、重庆电力高等专科学校,10.1 结构体类型,10.3 结构体指针,10.4 枚举类型,10.2 自定义类型,10.5 共用体,10.6 程序综合举例,10.7 上机实训,重庆电力高等专科学校,10.1 结构体类型10.1.1 结构体类型的用途理解结构体类型的意义并掌握结构体类型的用法,对进一步学习C+、Java等面向对象编程语言是有帮助的。考虑这样一个问题:定义a、b、c 三个变量存放三个人通讯信息。每个通讯信息含有:姓名、生日、电子邮箱和手机号这四项内容。具体情况如如下图所示:a、b、c三个变量每一个都包含了三个整型和三个字符串,重庆电力高等专科学校,再举一例:学生班级考试成绩排名次的问题。
2、定义一个数组:数组每个元素(一个学生)都包含一个学生的姓名(一个字符串)、学号(一个字符串)及各科成绩(若干个整数)。数组的结构如下图所示:从以上两个问题可知:每一个变量(或元素)都是由基本类型复合而成的多类型。C语言中允许用户在程序里自己构建程序所需要的这种类型由基本类型复合而成的类型,在C语言里称为结构体(structure)类型。,重庆电力高等专科学校,10.1.2结构体类型的构建及结构体变量的定义1.结构体类型的构建构建一个结构体类型的一般形式为:struct 类型名数据类型 成员名1;数据类型 成员名2;数据类型 成员名n;,注意:在“”后不要忘了写“;”,每个成员的数据类型可以是简
3、单数据类型或复杂类型。,重庆电力高等专科学校,【例10.1】构建通讯录问题所需要的结构体类型。struct info/*通讯录类型*/char name50;/*姓名*/int year;/*年*/int month;/*月*/int day;/*日*/char email100;/*电子邮箱*/char mobile_num12;/*手机号*/;这段代码构建了通讯录问题所需要的结构体类型,结构类型名为info。,重庆电力高等专科学校,【例10.2】构建学生成绩单问题所需要的结构体类型。struct student/*学生成绩类型*/char name30;/*姓名*/char num20;/
4、*学号*/int c_lang;/*C语言成绩*/int english;/*英语成绩*/int math;/*数学成绩*/;这段代码构建了通讯录问题所需要的结构体类型,类型名为student。,重庆电力高等专科学校,2结构体变量的定义结构体变量定义的一般形式:struct 类型名 变量名表列;注意:初学者在概念上必须认识清楚:结构体类型虽然由基本类型复合而成,但它也是一种类型,而不是一个变量实体。注意区别结构体类型和结构体变量。请比较:两个定义相比较得:struct info相当于int的地位,二者都是类型,只不过struct info是结构体类型,是一种复合类型,而int是基本类型。,重庆
5、电力高等专科学校,【例10.3】用例10.1所构建的struct info类型定义a、b、c三个变量,以备存储王晓明、李大伟和张欣欣三个好友的资料。struct info a;struct info b;struct info c;或:struct info a,b,c;【例10.4】用例10.2所构建的struct student类型定义数组soft1以备存储软件一班的所有学生的期末考试成绩。struct student soft130;,重庆电力高等专科学校,3构建结构体类型的同时定义结构体变量【例10.5】构建结构体类型struct info的同时定义struct info类型的变量a、
6、b和c。struct info char name50;int year;int month;int day;char email100;char mobile_num12;a,b,c;上面定义中的类型名“info”可以省略不写:,重庆电力高等专科学校,struct char name50;int year;int month;int day;char email100;char mobile_num12;a,b,c;,注意:,注意:虽然允许在定义结构体类型的同时定义结构体变量,但先定义结构体类型,再用结构体类型定义结构体变量,则更加规范一些;如果能把结构体类型定义在所有的函数之外,并放在文件
7、的开始处则更好;如果自定义类型较多,最好把它们集中放在一个头文件中。,重庆电力高等专科学校,4 结构体变量作为结构体类型的成员【例10.6】用新的方式构建例10.1构建的struct info类型。struct date int year;int month;int day;struct info char name50;struct date bith;char email100;char mobile_num12;结构体类型的成员不但可以是基本类型的变量,也可以是结构体类型变量。,重庆电力高等专科学校,【例10.7】用新的方式构建例10.2构建的struct student类型。struc
8、t student char name30;/*姓名*/char num20;/*学号*/struct/*定义结构体类型的同时定义结构体变量score*/int c_lang;/*C语言成绩*/int english;/*英语成绩*/int math;/*数学成绩*/score;注意:结构体类型的成员还可以是其所在的结构体类型的指针。这样就可以实现复杂的数据结构。,重庆电力高等专科学校,10.1.3 结构体变量的使用1结构体变量成员的引用结构体变量的成员需要通过分量运算符“.”来引用。引用格式:结构体变量.成员名【例10.8】给例10.3所定义的变量a赋值并输出:strcpy(a.name,王
9、晓明);a.year=1988;a.month=5;a.day=16;strcpy(a.email,);strcpy(a.mobile_num,19801020304);printf(姓名:%s 出生时期:%d年%d月%d日 e-mail:%s 手机号:%s,a.name,a.year,a.month,a.day,a.email,a.mobile_num);,重庆电力高等专科学校,【例10.9】为例10.4定义的soft1的数组的元素soft10赋值:strcpy(soft10.name,李文星);strcpy(soft10.num,0705231);soft10.c_lang=86;soft
10、10.english=72;soft10.math=93;如果结构体变量的成员又是一个结构体变量,则需要再加一级分量运算符来引用成员变量的成员变量。请看下例:【例10.10】用例10.6构建的结构体类型定义变量a并赋值。strcpy(a.name,王晓明);a.birth.year=1988;a.birth.month=5;a.birth.day=16;strcpy(a.email,);strcpy(a.mobile_num,19801020304);,重庆电力高等专科学校,2结构体变量之间的赋值结构体变量之间可以直接赋值,而不必用分量运算符一个一个地赋值。【例10.11】定义struct s
11、tudent类型的变量b,并把例10.10中里每个成员都赋了值的a变量的值赋给b变量。只需写成:struct student b;b=a;而不必像下面这样,为对应的成员之间一个一个地赋值:strcpy(b.name,a.name);b.birth.year=a.b.year;,重庆电力高等专科学校,3结构体变量的初始化有两种方式:用赋值语句逐一对结构体变量成员赋值(如例10.8-10.10)。在定义结构体变量的同时为结构体变量指定初始值。【例10.12】用例10.1和例10.6构建的struct info类型定义变量a,并初始化。例10.1构建:struct info a=王晓明,1988,5
12、,16,19801020304;例10.6构建:struct info a=王晓明,1988,5,16,19801020304;,重庆电力高等专科学校,4结构体数组的初始化【例10.13】用例10.7构建的struct student类型定义数组soft1并初始化:struct student soft130=李文星,0705231,86,72,93,王功名,0705215,75,84,79,刘建业,0705226,58,95,99.;或:struct student soft130=李文星,0705231,86,72,93,王功名,0705215,75,84,79,刘建业,0705226,5
13、8,95,99.;,重庆电力高等专科学校,10.1.4 结构体数组应用实例【例10.14】编程实现对候选人投票并统计票数的程序。具体要求:有三个候选人,程序运行时,用户要投哪个候选人的票,就输入哪个候选人的代号,程序最后统计并输出每个候选人的得票数。程序代码:#include struct cand/*定义候选人类型*/char name30;/*候选人姓名*/int cnt;/*候选人票数*/;,重庆电力高等专科学校,void main()/*三个候选人未投票之前票数都为0*/struct cand p3=张三,0,李四,0,王五,0;int i;/*投票次数循环变量*/int j;/*候选
14、人数组元素下标循环变量*/int n;/*投票人数*/int m;/*被赞成的候选人的代号*/printf(投票人数:);/*输入投票人数*/scanf(%d,重庆电力高等专科学校,printf(n(还有%d票未投)输入您要选的候选人的代号:,n-i);while(1)scanf(%d,重庆电力高等专科学校,程序运行结果(斜粗体表示用户输入文字):投票人数:101 张三 2 李四 3 王五(还有10票未投)输入您要选的候选人的代号:11 张三 2 李四 3 王五(还有9票未投)输入您要选的候选人的代号:21 张三 2 李四 3 王五(还有8票未投)输入您要选的候选人的代号:31 张三 2 李四
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 类型
链接地址:https://www.31ppt.com/p-5313842.html