C程序设计-第7章处理复杂数据.ppt

上传人:wuy****n92 文档编号:70106943 上传时间:2023-01-16 格式:PPT 页数:50 大小:331KB
返回 下载 相关 举报
C程序设计-第7章处理复杂数据.ppt_第1页
第1页 / 共50页
C程序设计-第7章处理复杂数据.ppt_第2页
第2页 / 共50页
点击查看更多>>
资源描述

《C程序设计-第7章处理复杂数据.ppt》由会员分享,可在线阅读,更多相关《C程序设计-第7章处理复杂数据.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第7章 处理复杂数据v案例:处理“学生信息管理系统”的完整信息v使用结构类型表示学生完整信息v案例实施v调试程序v学生练习v拓展v小结1/16/20231处理“学生信息管理系统”完整信息v在本章,将继续完善“学生信息管理系统”案例程序,在上一章案例程序的基础上,可以实现对学生完整信息的管理。具体包括:v(1)录入学生的完整信息,包括:姓名、学号、身份证号码、年龄、出生日期、家庭地址;v(2)按姓名查询学生信息,并可列出查询得到的学生的完整信息;v(3)修改学生信息,包括:姓名、学号、身份证号码、年龄、出生日期、家庭地址;v(4)删除指定的学生信息;v(5)列表显示所有学生的完整信息。1/16/

2、20232使用结构表示学生信息-定义结构v为了表示复合数据,必须先定义一个复合结构类型,C语言提供了一个关键字struct来定义一个复合结构类型。v复合结构类型是对C语言基本数据类型的扩充。在定义了复合结构类型以后,可以为定义的复合结构类型定义变量。1/16/20233v为了表示一个“学生”,可以定义一个结构类型:vstruct Studentvvchar name40;/学生姓名vchar sno20;/学号vchar sid20;/身份证号码vint age;/年龄vchar address200;/家庭地址v;1/16/20234使用结构表示学生信息-定义结构v结构类型定义的一般格式为:

3、struct 结构类型名 成员类型 成员名称;成员类型 成员名称;1/16/20235v注意,不要遗漏结构类型定义的“”后面的“;”。其中的“成员类型”可以是C语言基本数据类型,也可以是已经定义的其他结构类型。这也说明,结构类型的定义是可以嵌套的。1/16/20236使用结构表示学生信息-定义结构v为了更好的表示学生的基本信息,可用出生日期来替代“年龄”。struct Dateint year;/年int month;/月int day;/日;1/16/20237struct Studentchar name40;/学生姓名char sno20;/学号char sid20;/身份证号码stru

4、ct Date birth;/出生日期char address200;/家庭地址;1/16/20238表示学生信息-定义结构类型变量v一旦定义了新的结构类型,可以定义该结构类型的变量。例如,为了表示一个学生信息,基于已经定义的结构类型vStudent,可以定义一个变量:v struct Student stu;1/16/20239v变量stu称为结构变量。定义结构变量的一般形式如下:struct 结构类型名 变量1,变量2,;1/16/202310表示学生信息-定义结构类型变量v可以使用typedef关键字重新定义Student结构类型如下:typedef structint year;/年i

5、nt month;/月int day;/日 Date;1/16/202311typedef structchar name40;/学生姓名char sno20;/学号char sid20;/身份证号码Date birth;/出生日期char address200;/家庭地址 Student;v定义后就可以直接用Date和Student表示结构类型了。1/16/202312表示学生信息-定义结构类型变量v可以在定义结构类型的同时定义结构变量:vtypedef structvvint year;/年vint month;/月vint day;/日v Date;1/16/202313struct S

6、tudentchar name40;/学生姓名char sno20;/学号char sid20;/身份证号码Date birth;/出生日期char address200;/家庭地址 stu;v(1)可以使用也可以不使用typedef定义结构类型,它们可同时存在;v(2)在定义结构类型的同时定义结构变量,则不能使用typedef关键字 1/16/202314表示学生信息-访问结构变量成员v对结构变量的访问,就是分解为对结构变量各个成员的访问。访问结构变量成员的一般形式是:v 结构变量名.成员名1/16/202315vstrcpy(stu.name,张三);vstrcpy(stu.sno,201

7、0060501);vstu.birth.year=1990;vstu.birth.month=10;vstu.birth.day=12;1/16/202316vstrcpy(stu.address,广东省广州市天河区天河北路123号);vprintf(学生基本信息:姓名=%s,学号=%s,身份证=%s,出生日期=%d-%d-%d,家庭地址=%sn,stu.name,stu.sno,stu.sid,stu.birth.year,stu.birth.month,stu.birth.day,stu.address);1/16/202317表示学生信息-访问结构变量成员v在定义结构变量的同时,也可以对

8、结果变量进行初始化。vStudent stu=张三广东省广州市天河区天河北路123号;1/16/202318v在定义结构变量的同时对结构变量进行初始化,只需在结构变量的后面加上赋值运算符,并把成员对应的值按定义结构类型时的顺序列出来,中间用逗号分隔开,并用一对“”括起来,放在赋值运算符的后面即可v包含在“”中的值必须与结构变量成员的个数和类型相同。1/16/202319表示学生信息-结构类型作为参数vint displayStudent(Student stu)vv printf(-n);v printf(学生基本信息:姓名=%s,学号=%s,身份证=%s,出生日期=%d-%d-%d,家庭地址

9、=%sn,stu.name,stu.sno,tu.sid,stu.address);v printf(-);v return 0;v1/16/202320vdisplayStudent(stu);1/16/202321案例实施程序重构vC源文件包括两种类型:扩展名为.c的源文件和扩展名为.h头文件,它们都称为工程源文件。v其中,扩展名为.c的源文件中主要放置一些C语句代码,包括预处理指令、函数定义等;v扩展名为.h的头文件,也称为include文件,主要放置一些结构类型定义、函数说明、常量定义等。在C中,包括很多扩展名为.h的头文件。1/16/202322案例实施程序重构v添加Student.

10、h头文件 vtypedef structv int year;/年v int month;/月v int day;/日v Date;vtypedef structv char name40;/学生姓名v char sno20;/学号v char sid20;/身份证号码v Date birth;/出生日期v char address200;/家庭地址v Student;1/16/202323案例实施程序重构v添加function.h头文件v/函数说明vint insert();/*该函数添加新的学生信息*/vint query();vint update();vint delete();vin

11、t list();vint save();vint load();1/16/202324案例实施程序重构v将各个功能函数放置到function.c文件中v需要在function.c源文件开头的预处理指令部分加上如下的#include预处理指令:#include#include Student.h“v为StudentManager.c添加必要的头文件#include Student.h#include function.h“v具体各文件代码请参考教材。1/16/202325案例实施修改函数完善程序功能vint insert()v if(current=50)v printf(对不起,由于人数已满

12、,不能再添加新学生信息n);v return 1;v v printf(请输入学生姓名:);v scanf(%s,stucurrent.name);v printf(请输入学生学号:);v scanf(%s,stucurrent.sno);1/16/202326v printf(请输入学生身份证号码:);v scanf(%s,stucurrent.sid);v printf(请输入学生出生日期:);v scanf(格式(年-月-日):%d-%d-%d,&stucurrent.birth.year,v&stucurrent.birth.month,&stucurrent.birth.day);v

13、 printf(请输入学生家庭地址:);v scanf(%s,stucurrent.address);v current+;v return 0;v1/16/202327案例实施修改函数完善程序功能vint query()v char name40;v int i;v printf(请输入要查询的学生的姓名:);v scanf(%s,name);v for(i=0;icurrent;i+)v if(strcmp(stui.name,name)=0)v printf(学生信息如下n);v printf(姓名:%sn,stui.name);1/16/202328v printf(学号:%sn,st

14、ui.sno);v printf(身份证号:%sn,stui.sid);v printf(出生日期:%d-%d-%dn,stui.birth.year,v stui.birth.month,stui.birth.day);v printf(地址:%sn,stui.address);v return 0;v v v printf(该学生不存在!nn);v return 1;v1/16/202329案例实施修改函数完善程序功能vint update()vchar name40;vint i;vprintf(请输入要修改的学生的姓名:);vscanf(%s,name);vfor(i=0;icurre

15、nt;i+)vif(strcmp(stui.name,name)=0)vprintf(请输入学生姓名:);vscanf(%s,stui.name);vprintf(请输入学生学号:);vscanf(%s,stui.sno);1/16/202330vprintf(请输入学生身份证号码:);vscanf(%s,stui.sid);vprintf(请输入学生出生日期,格式(年-月-日):);vscanf(%d-%d-%d,&stui.birth.year,v&stui.birth.month,&stui.birth.day);vprintf(请输入学生家庭地址:);vscanf(%s,stucurr

16、ent.address);vreturn 0;vvvprintf(该学生不存在n);vreturn 1;v1/16/202331案例实施修改函数完善程序功能vint delete()vvchar name40;vint i;vprintf(请输入要删除的学生的姓名:);vscanf(%s,name);vfor(i=0;icurrent;i+)v1/16/202332v if(strcmp(stui.name,name)=0)v v if(i(current-1)v memmove(&stui,&stui+1,(current-1-i)*sizeof(Student);vcurrent-;vre

17、turn 0;v v v printf(该学生不存在n);vreturn 1;v1/16/202333调试程序v设置程序为可调试状态 v设置程序的断点 v启动程序调试 v单步跟踪你的程序 v结束调试 1/16/202334学生练习v已经完成对完整学生信息的管理,包括:学生姓名、学号、身份证号、出生日期及家庭地址的管理,现在到了你管理完整图书信息的时候了。v继续完善你的案例程序,使之可以管理图书的完整信息,包括:图书名称、图书ISBN号、作者、出版社、出版时间、价格。1/16/202335v具体要求:v(1)编写能管理图书的完整信息的案例程序;v(2)将程序代码按照逻辑功能放置到不同的源文件中;

18、v(3)在Code Blocks环境下调试你的程序,使之正确运行。1/16/202336拓展union共同体v共同体也是一种结构类型,只是共同体中的成员内容被存放到同一段内存单元中,共同体所占内存单元的大小按最大的成员决定。定义的共同体的关键字是union。v定义如下一个用于表示身高的共同体Height如下:1/16/202337union Height double heightInMeter;int heightInCentimeter;1/16/202338v在这个共同体中,具有两个成员:heightInMeter及heightInCentimeter,它们占用同一段内存单元,因为dou

19、ble数据类型占用8个字节,而int数据类型值占用4个字节,所以Height共同体占用8个字节。定义一个变量:v union Height cliton;v cliton.heightInMeter=1.82;此时,你使用“米”来表示cliton的身高,v cliton.heightInCentimeter=182;此时,你使用“厘米”来表示cliton的身高。1/16/202339拓展union共同体v在任何时刻,都只有一个成员是有效的#include union Heightdouble heightInMeter;int heightInCentimeter;1/16/202340int

20、 main()union Height cliton;cliton.heightInCentimeter=1.82;printf(Cliton的身高:%dn,cliton.heightInMeter);return 0;v运行该程序,将显示不正确的结果:1。1/16/202341拓展枚举类型v枚举类型也是一种结构类型。如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举”,就是将变量可能的值一一列举出来,这些被枚举出来的值称为枚举元素。使用enum关键字定义枚举类型。例如,定义一个表示一周所有天的名称的枚举类型:1/16/202342enum Weekday Sunday,Monday

21、,Tuesday,Wednesday,Thursday,Friday,Saturday;1/16/202343v基于这个枚举类型,可以定义变量:v enum Weekday workday;v并可以进行赋值:v workday=Monday;1/16/202344拓展枚举类型#include typedef enum Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,SaturdayWeekday;1/16/202345int main()Weekday workday;workday=Monday;printf(%dn,workday);retu

22、rn 0;v运行这个程序,将输出:1。这是因为C语言将枚举类型中的枚举元素作为整数来进行管理:将枚举类型中的第一个枚举元素赋以整数0,第二个枚举元素被赋以1,以此类推。1/16/202346拓展枚举类型v可以在定义枚举类型时强制某个枚举元素的整数值,例如:vtypedef enumvvSunday=10,Monday,Tuesday,Wednesday,Thursday,Friday,SaturdayvWeekday;1/16/202347v此时,如果定义枚举变量并输出其中的值,代码如下:Weekday workday;workday=Monday;printf(%dn,workday);v则将输出11。1/16/202348v枚举类型的变量可以参与数值运算,例如:Weekday workday;workday=Monday;printf(%dn,workday+1);v将输出12。1/16/202349小结v 本章介绍了C语言程序设计的“结构类型”,并应用结构类型完善了案例程序“学生信息管理系统”的设计,通过使用结构类型实现了对完整的学生信息的管理。同时,本章也介绍了如何在Code Blocks中实现对多工程文件的管理,最后介绍了解决程序运行时Bug的利器-跟踪调试。1/16/202350

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁