C程序设计与实践第5章.ppt

上传人:小飞机 文档编号:6503608 上传时间:2023-11-07 格式:PPT 页数:34 大小:667.50KB
返回 下载 相关 举报
C程序设计与实践第5章.ppt_第1页
第1页 / 共34页
C程序设计与实践第5章.ppt_第2页
第2页 / 共34页
C程序设计与实践第5章.ppt_第3页
第3页 / 共34页
C程序设计与实践第5章.ppt_第4页
第4页 / 共34页
C程序设计与实践第5章.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《C程序设计与实践第5章.ppt》由会员分享,可在线阅读,更多相关《C程序设计与实践第5章.ppt(34页珍藏版)》请在三一办公上搜索。

1、程序设计与实践,目录第5章结构体5.1概述5.2结构体应用实例5.3结构体类型的定义5.4结构体变量和结构体数组的定义5.5结构体变量的使用方法5.6结构体应用5.7本章小结,第5章结构体5.1概述数组只能保存一批类型相同的数据,但在很多场合下,会有一组类型不同的信息,例如:关于学生的一组信息,包括学生姓名(字符串)、学号(字符串)、课程成绩(实数)等,无法用数组来表示。这里可以使用C语言提供的另外一种构造数据类型来实现,就是结构体类型,也称之为结构数据类型。,5.2结构体应用实例例5.1图书销售清单打印,其中图书信息包括:书名、价格、册数等。#include void main()struc

2、t booktype/说明结构类型struct booktype,包含三个成员char name100;/书名,字符串型float price;/价格,实型int number;/册数,整型;,/分别定义结构体变量book1、book2、book3,并赋初值struct booktype book1”Learn C Programming”,40.4,20;struct booktype book2”c programming language”,43.1,15;struct booktype book3”History of C Programming Language”,37.8,28;/

3、定义中间变量用于计算部分金额和总金额float part1,part2,part3,total;printf(”书名单价数量金额nn”);part1 book1.price*book1.number;/结构变量字段值的应用,计算第一类书book1的金额,printf(”%35s%6.2f%4d%7.2fn”,book1.name,book1.price,book1.number,part1);part2 book2.price*book2.number;/计算第一类书book2的金额printf(”%35s%6.2f%4d%7.2fn”,book2.name,book2.price,book2

4、.number,part2);part3 book3.price*book3.number;/计算第一类书book3的金额printf(”%35s%6.2f%4d%7.2fn”,book3.name,book3.price,book3.number,part3);total part1 part2 part3;/计算三类书的总金额printf(”ntotal%53.2fn”,total);,程序输出结果:图51例5.1程序运行结果程序中定义了图书的信息,包括:字符数组类型的书名name、实数类型的价格price、整数类型的册数number等三个字段,涉及三种数据类型。在这个程序中,我们看到了结

5、构类型booktype的定义(struct booktype;部分),结构类型booktype的结构体变量book1.book2、book3的定义并赋初值,如:(struct booktype book1”Learn C Programming”,40.4,20;),结构体变量字段的引用如:(part1book1.price*book1.number;)。本程序中共有三类书的信息,制表输出每一类书的书名、单价、数量、金额,最后输出所有书的总价格。,5.3结构体类型的定义结构体类型是一种新的数据类型,与基本类型不同的是,结构体类型本身需要定义,而基本类型是C语言已经定义过的,不需要程序设计人员来

6、定义。结构体类型的定义包含如下信息:结构体类型名字(可以没有)、结构体全部成员的名字及其类型,结构体的成员有时也称之为字段,它们的类型可以相同也可以不同。结构体类型定义以后,就可以使用结构体类型名字来定义该结构体类型的变量了。结构体类型定义的一般形式:struct 结构体类型名 成员列表;,;例如结构体“图书”类型的定义如下:struct booktype char name100;/书名,字符数组类型float price;/单价,实数类型int number;/数量,整数类型;结构体成员的类型可以是简单类型,可以是数组类型,还可以是其他的结构体类型,也就是说,结构体类型的定义可以嵌套。例如

7、:struct date int year,month,day;,;struct booktype char name100;/书名,字符数组类型float price;/单价,实数类型int number;/数量,整数类型struct date delivery;/交付时间;在结构体中,各成员都占有自己的内存空间,一个结构体变量的长度等于所有成员长度之和。例5.2检测结构体类型占用的内存空间大小。,解题思路:直接使用sizeof运算符,对于结构体类型struct booktype求值。#include void main()struct booktype char name100;float

8、 price;int number;,printf(”%d”,sizeof(struct booktype);输出结果是108。说明:某些编译程序(如:VC6.0),为结构体类型分配空间时,可能会比其所有成员所占空间之和略长,例如:如果把“char name100;”改为“char name97;”、“char name98;”、“char name99;”程序结果都是108。占用空间值为4的倍数,并大于或等于各字段字节数之和。,5.4结构体变量和结构体数组的定义结构体类型变量可以是普通变量或者是数组元素,结构体类型的数组元素是指其元素的数据类型是结构体类型的数组,简称为结构体数组。结构体变量

9、、结构体数组定义有三种形式:struct 结构体类型名 变量、数组列表;struct 结构体类型名 成员列表 变量、数组列表;struct 成员列表 变量、数组列表;上述三种形式中,我们推荐使用第一种形式,它的特点是类型定义和变量定义分离,也便于对变量赋初值,结构清晰。下面分别介绍三种形式的写法和实例。,1.先定义结构体类型,再定义结构体变量或结构体数组,必要时还可以进行初始化例5.3对于例5.1程序的改进,注意结构体类型定义、结构体数组定义、结构体数组初始化、输出格式控制等用法。#include void main()struct booktype/说明结构体类型char name100;f

10、loat price;,int number;struct booktype books3/定义结构体类型数组,并赋初值”Learn C Programming”,40.4,20,”c programming language”,43.1,15,”History of C Programming Language”,37.8,28;int i;float part,total 0;printf(”书名 单价 数量 金额nn”);for(i 0;i 3;i),part booksi.price*booksi.number;/结构体变量字段值的应用printf(”%35s%6.2f%4d%7.2f

11、n”,booksi.name,booksi.price,booksi.number,part);total part;printf(”ntotal%53.2fn”,total);2.在定义结构体类型的同时定义结构体变量或结构体数组并初始化例如:,struct booktype char name100;/书名,字符数组类型float price;/单价,实数类型int number;/数量,整数类型struct date delivery;/交付时间abook,books1000;3.直接定义结构体变量或结构体数组并初始化 例如:struct char name100;/书名,字符数组类型,f

12、loat price;/单价,实数类型int number;/数量,整数类型struct date delivery;/交付时间abook,books1000;,5.5结构体变量的使用方法一、结构体变量的初始化1.结构体变量的初始化例如:struct booktype book1”Learn C Programming”,40.4,20;各字段依次获得初值,按字段类型对应的常量来书写,各常量之间用“,”分隔。2.结构体数组的初始化struct booktype books3”Learn C Programming”,40.4,20,”c programming language”,43.1,1

13、5,”History of C Programming Language”,37.8,28;按层次来写,先来看外层,数组共有三个元素,对应有三组“”,每组“”对应一个数组元素,是一个结构体类型。根据结构体类型“struct booktype”的定义,结构体有三个字段,所以里层的每组“”中,包含三个常量。二、结构体变量成员的表示方法结构体变量成员的表示方法有两种:结构体变量名.成员名结构体数组名下标.成员名例:,part1 book1.price*book1.number;printf(”%35s%6.2f%4d%7.2fn”,book3.name,book3.price,book3.numbe

14、r,part3);part booksi.price*booksi.number;printf(”%35s%6.2f%4d%7.2fn”,booksi.name,booksi.price,booksi.number,part);嵌套结构体类型对于结构体成员的引用实例:struct date int year,month,day;;,struct booktype char name100;/书名,字符数组类型float price;/单价,实数类型int number;/数量,整数类型struct date delivery;/交付时间abook;abook.delivery.year 201

15、0;abook.delivery.month 4;abook.delivery.day 18;,三、结构体变量的赋值对于结构体变量的赋值有两种方法,一种是对于成员变量分别引用,另一种是对于结构体变量整体赋值。(1)对于结构体成员变量分别引用如果结构体成员变量是简单类型,可以直接进行各种操作,例如:数据输入、输出、赋值、计算等。如果结构体成员变量是构造类型,如数组、结构体等,就需要根据数组、结构体等类型的具体要求来操作了。(2)对于结构变量整体赋值有些C编译环境(例如VC6.0)中允许两个结构体类型变量直接赋值,相当于它们对应的各成员变量的分别赋值。这种方法不推荐使用。,5.6结构体应用例 5.

16、4有一个班的学生,学生信息包括:姓名、性别和3门课程成绩。编写程序完成下列任务:(1)5名学生信息的录入;(2)计算并输出某门课程的最高分、最低分、平均分;(3)分别计算并输出男女同学中总分最高的同学的姓名和总成绩。#includestruct studentchar name20;char s;/M表示男,F表示女float course1;,float course2;float course3;main()struct student stu5;float maxpoint,minpoint,avepoint,sumpoint5,maxsumpoint1,maxsumpoint2;int

17、 i,mstu1;,/*录入学生数据*/for(i0;i5;i)printf(”请输入第%d个学生的信息”,i1);scanf(”%s%c%f%f%f”,stui.name,&stuxi.s,&stui.course1,&stui.course2,&stui.course3);/*计算course1的最高分*/maxpointstu0.course1;,for(i1;i maxpoint)maxpointstui.course1;printf(”course1的最高分是%f”,maxpoint);/*计算course1的最低分*/minpointstu0.course1;for(i1;i5;i

18、),if(stui.course1 minpoint)minpointstui.course1;printf(”course1的最低分是%f”,minpoint);/*计算course1的平均分*/avepointstu0.course1;for(i1;i5;i)avepointavepointstui.course1;,printf(”course1的平均分是%f”,avepoint/5);for(i0;i5;i)sumpointistui.course1stui.course2stui.course3;/*计算男同学中总分最高的同学的姓名和总成绩*/maxsumpoint10;for(i0

19、;i5;i),if(stui.sF)continue;if(sumpointimaxsumpoint1)mstui;if(mstu1)printf(”名单中无男同学”);else printf(”男同学中总分最高的同学的姓名是%s 总成绩是%f”,stumstu.name,sumpointmstu);,/*计算女同学中总分最高的同学的姓名和总成绩的过程参照男同学的处理方法*/,5.7本章小结结构体与数组的明显不同是结构体的成员可以具有不同的数据类型。注意结构体类型的定义、结构体变量的定义、结构体变量的初始化、结构体变量成员的引用方法等。还要学会结构体数组的定义和使用方法。练习五1.试利用结构体类型描述年、月、日,输入一个日期,统计该日期是本年度第多少天。2.定义一个职员结构体类型,其中包括职员姓名,参加工作时间和薪水。使用定义的结构体类型,写一段程序,从键盘读入一个职员的信息,并通过显示器显示出来。,推荐资料,更多图书信息请见星图书业:计算机各级在线考试试题见前程在线考试网:,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号