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

上传人:tia****nde 文档编号:12706145 上传时间:2020-05-14 格式:PPT 页数:50 大小:418KB
返回 下载 相关 举报
C程序设计-第7章处理复杂数据.ppt_第1页
第1页 / 共50页
C程序设计-第7章处理复杂数据.ppt_第2页
第2页 / 共50页
C程序设计-第7章处理复杂数据.ppt_第3页
第3页 / 共50页
点击查看更多>>
资源描述
2020年5月14日星期四,第1页,第7章处理复杂数据,案例:处理“学生信息管理系统”的完整信息使用结构类型表示学生完整信息案例实施调试程序学生练习拓展小结,2020年5月14日星期四,第2页,处理“学生信息管理系统”完整信息,在本章,将继续完善“学生信息管理系统”案例程序,在上一章案例程序的基础上,可以实现对学生完整信息的管理。具体包括:(1)录入学生的完整信息,包括:姓名、学号、身份证号码、年龄、出生日期、家庭地址;(2)按姓名查询学生信息,并可列出查询得到的学生的完整信息;(3)修改学生信息,包括:姓名、学号、身份证号码、年龄、出生日期、家庭地址;(4)删除指定的学生信息;(5)列表显示所有学生的完整信息。,2020年5月14日星期四,第3页,使用结构表示学生信息-定义结构,为了表示复合数据,必须先定义一个复合结构类型,C语言提供了一个关键字struct来定义一个复合结构类型。复合结构类型是对C语言基本数据类型的扩充。在定义了复合结构类型以后,可以为定义的复合结构类型定义变量。,2020年5月14日星期四,第4页,为了表示一个“学生”,可以定义一个结构类型:structStudentcharname40;/学生姓名charsno20;/学号charsid20;/身份证号码intage;/年龄charaddress200;/家庭地址;,2020年5月14日星期四,第5页,使用结构表示学生信息-定义结构,结构类型定义的一般格式为:struct结构类型名成员类型成员名称;成员类型成员名称;,2020年5月14日星期四,第6页,注意,不要遗漏结构类型定义的“”后面的“;”。其中的“成员类型”可以是C语言基本数据类型,也可以是已经定义的其他结构类型。这也说明,结构类型的定义是可以嵌套的。,2020年5月14日星期四,第7页,使用结构表示学生信息-定义结构,为了更好的表示学生的基本信息,可用出生日期来替代“年龄”。structDateintyear;/年intmonth;/月intday;/日;,2020年5月14日星期四,第8页,structStudentcharname40;/学生姓名charsno20;/学号charsid20;/身份证号码structDatebirth;/出生日期charaddress200;/家庭地址;,2020年5月14日星期四,第9页,表示学生信息-定义结构类型变量,一旦定义了新的结构类型,可以定义该结构类型的变量。例如,为了表示一个学生信息,基于已经定义的结构类型Student,可以定义一个变量:structStudentstu;,2020年5月14日星期四,第10页,变量stu称为结构变量。定义结构变量的一般形式如下:struct结构类型名变量1,变量2,;,2020年5月14日星期四,第11页,表示学生信息-定义结构类型变量,可以使用typedef关键字重新定义Student结构类型如下:typedefstructintyear;/年intmonth;/月intday;/日Date;,2020年5月14日星期四,第12页,typedefstructcharname40;/学生姓名charsno20;/学号charsid20;/身份证号码Datebirth;/出生日期charaddress200;/家庭地址Student;定义后就可以直接用Date和Student表示结构类型了。,2020年5月14日星期四,第13页,表示学生信息-定义结构类型变量,可以在定义结构类型的同时定义结构变量:typedefstructintyear;/年intmonth;/月intday;/日Date;,2020年5月14日星期四,第14页,structStudentcharname40;/学生姓名charsno20;/学号charsid20;/身份证号码Datebirth;/出生日期charaddress200;/家庭地址stu;(1)可以使用也可以不使用typedef定义结构类型,它们可同时存在;(2)在定义结构类型的同时定义结构变量,则不能使用typedef关键字,2020年5月14日星期四,第15页,表示学生信息-访问结构变量成员,对结构变量的访问,就是分解为对结构变量各个成员的访问。访问结构变量成员的一般形式是:结构变量名.成员名,2020年5月14日星期四,第16页,strcpy(stu.name,张三);strcpy(stu.sno,2010060501);strcpy(stu.sid,410203199010123045);stu.birth.year=1990;stu.birth.month=10;stu.birth.day=12;,2020年5月14日星期四,第17页,strcpy(stu.address,广东省广州市天河区天河北路123号);printf(学生基本信息:姓名=%s,学号=%s,身份证=%s,出生日期=%d-%d-%d,家庭地址=%sn,stu.name,stu.sno,stu.sid,stu.birth.year,stu.birth.month,stu.birth.day,stu.address);,2020年5月14日星期四,第18页,表示学生信息-访问结构变量成员,在定义结构变量的同时,也可以对结果变量进行初始化。Studentstu=张三,2010060501,4102031990101245,1990,10,12,广东省广州市天河区天河北路123号;,2020年5月14日星期四,第19页,在定义结构变量的同时对结构变量进行初始化,只需在结构变量的后面加上赋值运算符,并把成员对应的值按定义结构类型时的顺序列出来,中间用逗号分隔开,并用一对“”括起来,放在赋值运算符的后面即可包含在“”中的值必须与结构变量成员的个数和类型相同。,2020年5月14日星期四,第20页,表示学生信息-结构类型作为参数,intdisplayStudent(Studentstu)printf(-n);printf(学生基本信息:姓名=%s,学号=%s,身份证=%s,出生日期=%d-%d-%d,家庭地址=%sn,stu.name,stu.sno,tu.sid,tu.birth.year,stu.birth.month,stu.birth.day,stu.address);printf(-);return0;,2020年5月14日星期四,第21页,Studentstu=张三,2010060501,410203199010123045,1990,10,12,广东省广州市天河区天河北路123号;displayStudent(stu);,2020年5月14日星期四,第22页,案例实施程序重构,C源文件包括两种类型:扩展名为.c的源文件和扩展名为.h头文件,它们都称为工程源文件。其中,扩展名为.c的源文件中主要放置一些C语句代码,包括预处理指令、函数定义等;扩展名为.h的头文件,也称为include文件,主要放置一些结构类型定义、函数说明、常量定义等。在C中,包括很多扩展名为.h的头文件。,2020年5月14日星期四,第23页,案例实施程序重构,添加Student.h头文件typedefstructintyear;/年intmonth;/月intday;/日Date;typedefstructcharname40;/学生姓名charsno20;/学号charsid20;/身份证号码Datebirth;/出生日期charaddress200;/家庭地址Student;,2020年5月14日星期四,第24页,案例实施程序重构,添加function.h头文件/函数说明intinsert();/*该函数添加新的学生信息*/intquery();intupdate();intdelete();intlist();intsave();intload();,2020年5月14日星期四,第25页,案例实施程序重构,将各个功能函数放置到function.c文件中需要在function.c源文件开头的预处理指令部分加上如下的#include预处理指令:#include#includeStudent.h“为StudentManager.c添加必要的头文件#includeStudent.h#includefunction.h“具体各文件代码请参考教材。,2020年5月14日星期四,第26页,案例实施修改函数完善程序功能,intinsert()if(current=50)printf(对不起,由于人数已满,不能再添加新学生信息n);return1;printf(请输入学生姓名:);scanf(%s,stucurrent.name);printf(请输入学生学号:);scanf(%s,stucurrent.sno);,2020年5月14日星期四,第27页,printf(请输入学生身份证号码:);scanf(%s,stucurrent.sid);printf(请输入学生出生日期:);scanf(格式(年-月-日):%d-%d-%d,2020年5月14日星期四,第28页,案例实施修改函数完善程序功能,intquery()charname40;inti;printf(请输入要查询的学生的姓名:);scanf(%s,name);for(i=0;icurrent;i+)if(strcmp(stui.name,name)=0)printf(学生信息如下n);printf(姓名:%sn,stui.name);,2020年5月14日星期四,第29页,printf(学号:%sn,stui.sno);printf(身份证号:%sn,stui.sid);printf(出生日期:%d-%d-%dn,stui.birth.year,stui.birth.month,stui.birth.day);printf(地址:%sn,stui.address);return0;printf(该学生不存在!nn);return1;,2020年5月14日星期四,第30页,案例实施修改函数完善程序功能,intupdate()charname40;inti;printf(请输入要修改的学生的姓名:);scanf(%s,name);for(i=0;icurrent;i+)if(strcmp(stui.name,name)=0)printf(请输入学生姓名:);scanf(%s,stui.name);printf(请输入学生学号:);scanf(%s,stui.sno);,2020年5月14日星期四,第31页,printf(请输入学生身份证号码:);scanf(%s,stui.sid);printf(请输入学生出生日期,格式(年-月-日):);scanf(%d-%d-%d,2020年5月14日星期四,第32页,案例实施修改函数完善程序功能,intdelete()charname40;inti;printf(请输入要删除的学生的姓名:);scanf(%s,name);for(i=0;icurrent;i+),2020年5月14日星期四,第33页,if(strcmp(stui.name,name)=0)if(i(current-1)memmove(,2020年5月14日星期四,第34页,调试程序,设置程序为可调试状态设置程序的断点启动程序调试单步跟踪你的程序结束调试,2020年5月14日星期四,第35页,学生练习,已经完成对完整学生信息的管理,包括:学生姓名、学号、身份证号、出生日期及家庭地址的管理,现在到了你管理完整图书信息的时候了。继续完善你的案例程序,使之可以管理图书的完整信息,包括:图书名称、图书ISBN号、作者、出版社、出版时间、价格。,2020年5月14日星期四,第36页,具体要求:(1)编写能管理图书的完整信息的案例程序;(2)将程序代码按照逻辑功能放置到不同的源文件中;(3)在CodeBlocks环境下调试你的程序,使之正确运行。,2020年5月14日星期四,第37页,拓展union共同体,共同体也是一种结构类型,只是共同体中的成员内容被存放到同一段内存单元中,共同体所占内存单元的大小按最大的成员决定。定义的共同体的关键字是union。定义如下一个用于表示身高的共同体Height如下:,2020年5月14日星期四,第38页,unionHeightdoubleheightInMeter;intheightInCentimeter;,2020年5月14日星期四,第39页,在这个共同体中,具有两个成员:heightInMeter及heightInCentimeter,它们占用同一段内存单元,因为double数据类型占用8个字节,而int数据类型值占用4个字节,所以Height共同体占用8个字节。定义一个变量:unionHeightcliton;cliton.heightInMeter=1.82;此时,你使用“米”来表示cliton的身高,cliton.heightInCentimeter=182;此时,你使用“厘米”来表示cliton的身高。,2020年5月14日星期四,第40页,拓展union共同体,在任何时刻,都只有一个成员是有效的#includeunionHeightdoubleheightInMeter;intheightInCentimeter;,2020年5月14日星期四,第41页,intmain()unionHeightcliton;cliton.heightInCentimeter=1.82;printf(Cliton的身高:%dn,cliton.heightInMeter);return0;运行该程序,将显示不正确的结果:1。,2020年5月14日星期四,第42页,拓展枚举类型,枚举类型也是一种结构类型。如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举”,就是将变量可能的值一一列举出来,这些被枚举出来的值称为枚举元素。使用enum关键字定义枚举类型。例如,定义一个表示一周所有天的名称的枚举类型:,2020年5月14日星期四,第43页,enumWeekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;,2020年5月14日星期四,第44页,基于这个枚举类型,可以定义变量:enumWeekdayworkday;并可以进行赋值:workday=Monday;,2020年5月14日星期四,第45页,拓展枚举类型,#includetypedefenumSunday,Monday,Tuesday,Wednesday,Thursday,Friday,SaturdayWeekday;,2020年5月14日星期四,第46页,intmain()Weekdayworkday;workday=Monday;printf(%dn,workday);return0;运行这个程序,将输出:1。这是因为C语言将枚举类型中的枚举元素作为整数来进行管理:将枚举类型中的第一个枚举元素赋以整数0,第二个枚举元素被赋以1,以此类推。,2020年5月14日星期四,第47页,拓展枚举类型,可以在定义枚举类型时强制某个枚举元素的整数值,例如:typedefenumSunday=10,Monday,Tuesday,Wednesday,Thursday,Friday,SaturdayWeekday;,2020年5月14日星期四,第48页,此时,如果定义枚举变量并输出其中的值,代码如下:Weekdayworkday;workday=Monday;printf(%dn,workday);则将输出11。,2020年5月14日星期四,第49页,枚举类型的变量可以参与数值运算,例如:Weekdayworkday;workday=Monday;printf(%dn,workday+1);将输出12。,2020年5月14日星期四,第50页,小结,本章介绍了C语言程序设计的“结构类型”,并应用结构类型完善了案例程序“学生信息管理系统”的设计,通过使用结构类型实现了对完整的学生信息的管理。同时,本章也介绍了如何在CodeBlocks中实现对多工程文件的管理,最后介绍了解决程序运行时Bug的利器-跟踪调试。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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