




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计与实践,目录第5章结构体5.1概述5.2结构体应用实例5.3结构体类型的定义5.4结构体变量和结构体数组的定义5.5结构体变量的使用方法5.6结构体应用5.7本章小结,第5章结构体5.1概述数组只能保存一批类型相同的数据,但在很多场合下,会有一组类型不同的信息,例如:关于学生的一组信息,包括学生姓名(字符串)、学号(字符串)、课程成绩(实数)等,无法用数组来表示。这里可以使用C语言提供的另外一种构造数据类型来实现,就是结构体类型,也称之为结构数据类型。,5.2结构体应用实例例5.1图书销售清单打印,其中图书信息包括:书名、价格、册数等。#includevoidmain()structbooktype/说明结构类型structbooktype,包含三个成员charname100;/书名,字符串型floatprice;/价格,实型intnumber;/册数,整型;,/分别定义结构体变量book1、book2、book3,并赋初值structbooktypebook1”LearnCProgramming”,40.4,20;structbooktypebook2”cprogramminglanguage”,43.1,15;structbooktypebook3”HistoryofCProgrammingLanguage”,37.8,28;/定义中间变量用于计算部分金额和总金额floatpart1,part2,part3,total;printf(”书名单价数量金额nn”);part1book1.price*book1.number;/结构变量字段值的应用,计算第一类书book1的金额,printf(”%35s%6.2f%4d%7.2fn”,,book1.price,book1.number,part1);part2book2.price*book2.number;/计算第一类书book2的金额printf(”%35s%6.2f%4d%7.2fn”,,book2.price,book2.number,part2);part3book3.price*book3.number;/计算第一类书book3的金额printf(”%35s%6.2f%4d%7.2fn”,,book3.price,book3.number,part3);totalpart1part2part3;/计算三类书的总金额printf(”ntotal%53.2fn”,total);,程序输出结果:图51例5.1程序运行结果程序中定义了图书的信息,包括:字符数组类型的书名name、实数类型的价格price、整数类型的册数number等三个字段,涉及三种数据类型。在这个程序中,我们看到了结构类型booktype的定义(structbooktype;部分),结构类型booktype的结构体变量book1.book2、book3的定义并赋初值,如:(structbooktypebook1”LearnCProgramming”,40.4,20;),结构体变量字段的引用如:(part1book1.price*book1.number;)。本程序中共有三类书的信息,制表输出每一类书的书名、单价、数量、金额,最后输出所有书的总价格。,5.3结构体类型的定义结构体类型是一种新的数据类型,与基本类型不同的是,结构体类型本身需要定义,而基本类型是C语言已经定义过的,不需要程序设计人员来定义。结构体类型的定义包含如下信息:结构体类型名字(可以没有)、结构体全部成员的名字及其类型,结构体的成员有时也称之为字段,它们的类型可以相同也可以不同。结构体类型定义以后,就可以使用结构体类型名字来定义该结构体类型的变量了。结构体类型定义的一般形式:struct结构体类型名成员列表;,;例如结构体“图书”类型的定义如下:structbooktypecharname100;/书名,字符数组类型floatprice;/单价,实数类型intnumber;/数量,整数类型;结构体成员的类型可以是简单类型,可以是数组类型,还可以是其他的结构体类型,也就是说,结构体类型的定义可以嵌套。例如:structdateintyear,month,day;,;structbooktypecharname100;/书名,字符数组类型floatprice;/单价,实数类型intnumber;/数量,整数类型structdatedelivery;/交付时间;在结构体中,各成员都占有自己的内存空间,一个结构体变量的长度等于所有成员长度之和。例5.2检测结构体类型占用的内存空间大小。,解题思路:直接使用sizeof运算符,对于结构体类型structbooktype求值。#includevoidmain()structbooktypecharname100;floatprice;intnumber;,printf(”%d”,sizeof(structbooktype);输出结果是108。说明:某些编译程序(如:VC6.0),为结构体类型分配空间时,可能会比其所有成员所占空间之和略长,例如:如果把“charname100;”改为“charname97;”、“charname98;”、“charname99;”程序结果都是108。占用空间值为4的倍数,并大于或等于各字段字节数之和。,5.4结构体变量和结构体数组的定义结构体类型变量可以是普通变量或者是数组元素,结构体类型的数组元素是指其元素的数据类型是结构体类型的数组,简称为结构体数组。结构体变量、结构体数组定义有三种形式:struct结构体类型名变量、数组列表;struct结构体类型名成员列表变量、数组列表;struct成员列表变量、数组列表;上述三种形式中,我们推荐使用第一种形式,它的特点是类型定义和变量定义分离,也便于对变量赋初值,结构清晰。下面分别介绍三种形式的写法和实例。,1.先定义结构体类型,再定义结构体变量或结构体数组,必要时还可以进行初始化例5.3对于例5.1程序的改进,注意结构体类型定义、结构体数组定义、结构体数组初始化、输出格式控制等用法。#includevoidmain()structbooktype/说明结构体类型charname100;floatprice;,intnumber;structbooktypebooks3/定义结构体类型数组,并赋初值”LearnCProgramming”,40.4,20,”cprogramminglanguage”,43.1,15,”HistoryofCProgrammingLanguage”,37.8,28;inti;floatpart,total0;printf(”书名单价数量金额nn”);for(i0;i3;i),partbooksi.price*booksi.number;/结构体变量字段值的应用printf(”%35s%6.2f%4d%7.2fn”,,booksi.price,booksi.number,part);totalpart;printf(”ntotal%53.2fn”,total);2.在定义结构体类型的同时定义结构体变量或结构体数组并初始化例如:,structbooktypecharname100;/书名,字符数组类型floatprice;/单价,实数类型intnumber;/数量,整数类型structdatedelivery;/交付时间abook,books1000;3.直接定义结构体变量或结构体数组并初始化例如:structcharname100;/书名,字符数组类型,floatprice;/单价,实数类型intnumber;/数量,整数类型structdatedelivery;/交付时间abook,books1000;,5.5结构体变量的使用方法一、结构体变量的初始化1.结构体变量的初始化例如:structbooktypebook1”LearnCProgramming”,40.4,20;各字段依次获得初值,按字段类型对应的常量来书写,各常量之间用“,”分隔。2.结构体数组的初始化structbooktypebooks3”LearnCProgramming”,40.4,20,”cprogramminglanguage”,43.1,15,”HistoryofCProgrammingLanguage”,37.8,28;按层次来写,先来看外层,数组共有三个元素,对应有三组“”,每组“”对应一个数组元素,是一个结构体类型。根据结构体类型“structbooktype”的定义,结构体有三个字段,所以里层的每组“”中,包含三个常量。二、结构体变量成员的表示方法结构体变量成员的表示方法有两种:结构体变量名.成员名结构体数组名下标.成员名例:,part1book1.price*book1.number;printf(”%35s%6.2f%4d%7.2fn”,,book3.price,book3.number,part3);partbooksi.price*booksi.number;printf(”%35s%6.2f%4d%7.2fn”,,booksi.price,booksi.number,part);嵌套结构体类型对于结构体成员的引用实例:structdateintyear,month,day;;,structbooktypecharname100;/书名,字符数组类型floatprice;/单价,实数类型intnumber;/数量,整数类型structdatedelivery;/交付时间abook;abook.delivery.year2010;abook.delivery.month4;abook.delivery.day18;,三、结构体变量的赋值对于结构体变量的赋值有两种方法,一种是对于成员变量分别引用,另一种是对于结构体变量整体赋值。(1)对于结构体成员变量分别引用如果结构体成员变量是简单类型,可以直接进行各种操作,例如:数据输入、输出、赋值、计算等。如果结构体成员变量是构造类型,如数组、结构体等,就需要根据数组、结构体等类型的具体要求来操作了。(2)对于结构变量整体赋值有些C编译环境(例如VC6.0)中允许两个结构体类型变量直接赋值,相当于它们对应的各成员变量的分别赋值。这种方法不推荐使用。,5.6结构体应用例5.4有一个班的学生,学生信息包括:姓名、性别和3门课程成绩。编写程序完成下列任务:(1)5名学生信息的录入;(2)计算并输出某门课程的最高分、最低分、平均分;(3)分别计算并输出男女同学中总分最高的同学的姓名和总成绩。#includestructstudentcharname20;chars;/M表示男,F表示女floatcourse1;,floatcourse2;floatcourse3;main()structstudentstu5;floatmaxpoint,minpoint,avepoint,sumpoint5,maxsumpoint1,maxsumpoint2;inti,mstu1;,/*录入学生数据*/for(i0;i5;i)printf(”请输入第%d个学生的信息”,i1);scanf(”%s%c%f%f%f”,,&stuxi.s,&stui.course1,&stui.course2,&stui.course3);/*计算course1的最高分*/maxpointstu0.course1;,for(i1;imaxpoint)maxpointstui.course1;printf(”course1的最高分是%f”,maxpoint);/*计算course1的最低分*/minpointstu0.course1;for(i1;i5;i),if(stui.course1minpoint)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;imaxsumpoint1)mstui;if(mstu1)printf(”名单中无男同学”);elseprintf(”男同学中总分最高的同学的姓名是%s总成绩是%f”,,sumpointmstu);,/*计算女同学中总分最高的同学的姓名和总成绩的过程参照男同学的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年城市公共汽电车客运服务项目规划申请报告
- 昆明艺术职业学院《建筑力学实验》2024-2025学年第一学期期末试卷
- 大连装备制造职业技术学院《科技方法论-土木》2024-2025学年第一学期期末试卷
- 山东工程职业技术大学《新制度经济学》2024-2025学年第一学期期末试卷
- 山东中医药高等专科学校《Python综合实训》2024-2025学年第一学期期末试卷
- 城市广场地面改造施工方案范例
- 2025年酞菁颜料项目提案报告
- 山东职业学院《运动解剖学(一)》2024-2025学年第一学期期末试卷
- 哈尔滨华德学院《动物微生物学》2024-2025学年第一学期期末试卷
- 民事诉讼强制执行课件
- DB31/T 477-2018旅行社服务质量要求及等级划分
- 2025年中国振动筛设备行业市场分析及投资可行性研究报告
- 急性有机磷农药中毒规范化治疗及进展
- 江苏盐城2025年公开招聘农村(村务)工作者笔试题带答案分析
- 班费收支统计表
- 建行善担贷合同协议
- 餐饮研发中心管理制度
- 2024年版中华民族共同体概论专家大讲堂课件全集第10章至16章节讲根据高等教育出版社教材制作
- 国网公司合规管理
- 上海宝冶合同范例
- 区块链在房地产交易中的应用-全面剖析
评论
0/150
提交评论