




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7讲数据文件及应用,任务计算奖学金,1,学习内容,学习C语言中文件的概念学习文件访问的流程和实现方法掌握C语言文件系统函数的使用方法文件打开、关闭的函数格式化访问文件函数判断文件末尾的函数阅读教材:第12章,2,案例描述,某学院在每学期的期末考试之后发放奖学金,发放的奖学金共有3种,获取的条件各不相同:(1)院士奖学金,每人4000元,期末平均成绩高于85分,并且在本学期发表1篇或1篇以上论文的学生均可获得。(2)五四奖学金,每人2000元,期末平均成绩高于85分,并且班级评议成绩高于80分的学生均可获得。(3)成绩优秀奖,每人1000元,期末平均成绩高于90分的学生均可获得。每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金,只要符合条件。请编写程序读入学生的相关数据,计算学生的获奖总数。,3,解决路径,4,1.键盘输入的一个学生信息,计算奖学金总数,(1)问题分析分析学生获奖的条件可以得到与奖学金相关的学生信息包括期末平均成绩班级评议成绩发表论文数。根据这三个数据的不同组合可以累加确定奖学金总额。,5,(2)算法设计,1.输入期末平均成绩班级评议成绩发表论文数2.奖学金总额置03.如果期末平均成绩853.1如果班级评议成绩80奖学金总额增加20003.2如果发表论文数0奖学金总额增加40004.如果期末平均成绩90奖学金总额增加10005.输出奖学金总额,6,(3)程序编码和运行sample07_01.cpp,运行示例:请输入期末平均成绩:92请输入班级评议成绩:81请输入发表论文数:2本学期奖学金为:7000.00,7,(4)测试用例设计,测试用例1:全奖期末平均成绩:92班级评议成绩:85发表论文数:2奖学金:7000测试用例2:无成绩优秀奖期末平均成绩:88班级评议成绩:82发表论文数:2奖学金:6000测试用例3:无院士奖学金有五四奖学金期末平均成绩:88班级评议成绩:82发表论文数:0奖学金:2000测试用例4:有院士奖学金无五四奖学金期末平均成绩:88班级评议成绩:78发表论文数:1奖学金:4000测试用例5:无奖学金期末平均成绩:80班级评议成绩:85发表论文数:2奖学金:0测试用例6:边界值测试1期末平均成绩:85班级评议成绩:80发表论文数:0奖学金:0测试用例7:边界值测试2期末平均成绩:90班级评议成绩:80发表论文数:1奖学金:4000,8,2.键盘输入的任意组学生信息,计算每个学生的奖学金总额,(1)问题分析本例的要求是输入任意组学生信息,即循环计算一批学生的奖学金。任意组的数目用输入一个特殊标记值例如期末平均成绩输入-1,停止输入和计算工作。即为标志型循环。,9,(2)算法设计,标志型循环结构的构建方式同样包括三个部分:循环控制变量的初值循环控制变量的终值改变循环控制变量的值,期末平均成绩作为循环控制变量,它的初值是键盘输入的第一个学生的期末平均成绩,判断是否是-1(-1就是循环的终止条件,也就是期末平均成绩的终值),输入下一个学生的期末平均成绩,改变循环控制变量的值。可以看到循环控制变量值通过输入操作获取和改变的。,10,算法,1.输入第一个学生的期末平均成绩2.循环当期末平均成绩不等于-12.1输入该学生的班级评议成绩和发表论文数2.2奖学金总额置02.3如果期末平均成绩852.3.1如果班级评议成绩80奖学金总额增加20002.3.2如果发表论文数0奖学金总额增加40002.4如果期末平均成绩90奖学金总额增加10002.5输出奖学金总额2.6输入下一个学生的期末平均成绩,11,(3)程序编码sample07_02.cpp,循环控制变量初值e1while(判终值e2)循环通项改变循环控制变量的值e3,printf(请输入第%d位学生期末平均成绩:,n);scanf(%f,12,(4)运行示例,测试时还需考虑第一次输入-1,程序能否正确响应。,13,3.文件输入的任意组学生信息,计算每个学生的奖学金总额,(1)问题分析批量的数据通过键盘输入输出,当程序运行结束后,数据都不复存在,使用文件可以永久保存数据,方便运行测试。将需要计算奖学金的学生信息事先准备好写在一个文本文件中,程序运行时,逐一读取文本文件中每一个学生的信息,计算后输出到屏幕上,或写入到另一个文本文件中长期保存。在此,文本文件起到组织保存数据的作用,也成为数据文件。本例需要操作两个文件,一个是学生信息文件info.txt,一个是计算结果文件result.txt。文件中数据按照一定结构和格式排列。例如本例中的文件,每行存放一位同学的信息,学生信息文件包括期末平均成绩、班级评议成绩和发表论文数三个数据,计算结果文件再增加一个奖学金,数据之间以空格或制表符(tab)间隔。,14,(2)算法设计-文件访问的算法,从文件读取数据的算法,将数据写入到文件的算法,1.以只读方式打开文件2.循环当文件没有到末尾读取数据3.关闭文件,1.以创建形式打开文件2.依次将数据写入到文件3.关闭文件,15,(2)算法设计-任务算法,1.以只读方式打开学生信息文件info.txt2.以创建形式打开结果文件result.txt3.循环当信息文件没有到末尾3.1从info.txt文件中读取一个学生的期末平均成绩、班级评议成绩和发表论文数3.2奖学金总额置03.3如果期末平均成绩853.3.1如果班级评议成绩80奖学金总额增加20003.3.2如果发表论文数0奖学金总额增加40003.4如果期末平均成绩90奖学金总额增加10003.5输出学生信息、奖学金总额到result.txt文件4.关闭信息文件info.txt5.关闭结果文件result.txt,16,(3)程序编码定义文件指针,定义一个FILE类型的文件指针为学生信息文件和结果文件定义两个文件指针fin和fout的语句为;FILE*fin,*fout;,FILE*,17,(3)程序编码打开文件,文件的操作通过一组文件操作系统函数,定义在stdio.h文件中,打开文件的函数是fopen(),它的调用方式:以只读方式打开学生信息文件的语句如下:if(fin=fopen(info.txt,r)=NULL)printf(不能打开学生信息文件);return-1;,文件指针=fopen(文件名,打开方式),18,(3)程序编码读取文件,读取文件时,判断是否到文件末尾的函数是feof(),当到达文件尾部时,返回1表示为真;如果没有到达文件尾部时,返回0表示为假。格式化读取文件数据的函数是fscanf(),第一个参数为读取文件的文件指针。它的调用方式:,feof(文件指针),fscanf(文件指针,格式控制串,地址序列),19,(3)程序编码读取文件,由feof()和fscanf()函数构成的从信息文件中读取数据的循环控制结构为:while(!feof(fin)fscanf(fin,%f%f%d,20,(3)程序编码将数据格式化写入文件,将一个学生数据写入到结果文件的语句为:fprintf(fout,%2d%13.0f%15.0f%15d%15.2fn,n,avgScore,clasScore,paperCount,scholarShip);,fprintf(文件指针,格式控制串,值序列),21,(3)程序编码关闭文件,文件操作结束,需要关闭文件,关闭文件的函数是fclose()函数,一条函数语句关闭一个文件,调用格式为:关闭学生信息文件和结果文件的语句为:fclose(fin);fclose(fout);,fclose(文件指针),22,(3)程序编码-sample07_03.cpp,23,独立任务ex7_1.cpp,数据文件(自己准备)中存放任意一组数值数据,请筛选有效数据(大于0,小于等于150)到一个新的数据文件,并统计这组有效数据的个数,总值和平均值。,24,提高任务ex7_2.cpp,编写程序用于气候学上判断入夏。入夏标志着春夏季节完成转换,入夏的标准是必须要连续5天稳定达到22以上,文件data.txt中存放了一个城市5月份一个月的最高气温,判断并输出提示信息:该城市在哪一天入夏,或者该月没有入夏。根据data.tx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论