开发者社区> 贺利坚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C02-程序设计基础提高班(C++)第14周上机任务-文件操作

简介: 第14周:阅读教材第13章(p417-458),主要内容是输入输出,重点是文件的操作,完成第14周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 【任务1】涨工资从文件salary.txt中读入500名工人的工资,全部增加100元后进行排序,将排序后的结果在屏幕上输出,并保存到文件ordered_salary.txt中。[ 参考:涨工资了 - http://blog.cs
+关注继续查看

14周:阅读教材第13章(p417-458),主要内容是输入输出,重点是文件的操作,完成第14周上机任务;

(回到C02-程序设计基础提高班(C++)学习安排)



【任务1】涨工资
从文件salary.txt中读入500名工人的工资,全部增加100元后进行排序,将排序后的结果在屏幕上输出,并保存到文件ordered_salary.txt中。
[ 参考:涨工资了 - http://blog.csdn.net/sxhelijian/article/details/7632245 ]

【任务2】学生成绩排序
文件score.dat中保存的是100名学生的姓名和C++课、高数和英语成绩。
(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。
(2)读入这名学生的成绩,用对象数组进行存储。
(3)求出各科和总分的最高分。
(4)请按总分的降序(高成绩在前,低成绩在后)排序
(5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。
[ 参考:学生成绩排序 - http://blog.csdn.net/sxhelijian/article/details/7632249 ]

【任务3】电子词典
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word类的一个对象可以描述一个词,类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
拓展1:允许用户运行程序后,连续地查词典,直到输入”0000”结束。
拓展2:试着做一个窗口版的电子词典。
拓展3:使这个词典,读入一篇文章,输出其中的所有名词(或动词,或全部实词)。——搜索引擎用类似的功能,用于筛去虚词,因为并不是所有词都值得索引。


【任务4】文档的自动处理:要求编写C++程序,读WolfSheep.nls,去除其中所有的注释,并保存到文件WS_nocomment.nls中。
NetLogo(http://ccl.northwestern.edu/netlogo/)是一个用来对自然和社会现象进行仿真的可编程建模环境。NetLogo 特别适合对随时间演化的复杂系统进行建模。建模人员能够向成百上千的独立运行的“主体”(agent)发出指令,使探究微观层面上的个体行为与宏观模式之间的联系成为可能。NetLogo 有详尽的文档和教学材料。它还带着一个模型库,库中包含许多已经写好的仿真模型,可以直接使用也可修改。这些仿真模型覆盖自然和社会科学的许多领域,包括生物和医学,物理和化学,数学和计算机科学,以及经济学和社会心理学等。
NetLogo是我近年来科研工作常用的一个仿真平台,建议同学们不妨有时间玩一玩。本任务不是要让同学们用Netlogo编程,而是用C++编程去处理Netlogo源程序。
在NetLogo中,代码的注释以分号开始。例如,文件WolfSheep.nls中是一个模拟生态系统中狼、羊、草地保持生态平衡的一部分代码,其中,每一行分号之后的文字全是注释。
要次明确要求:编写C++程序,读WolfSheep.nls,去除其中所有的注释,并保存到文件WS_nocomment.nls中。
例如,WolfSheep.nls中下面的一段代码:
ask patches [ set pcolor green ]
; check GRASS? switch.
; if it is true, then grass grows and the sheep eat it. else, then the sheep don't need to eat
if grass? [
  ask patches [
    set countdown random grass-regrowth-time ; initialize grass grow clocks randomly
    set pcolor one-of [green brown]
  ]
]
经过处理后,在WS_nocomment.nls中,上面划线部分的注释将全部不存在。
提示1:任务的另一种直白的解读是:读入每一行,复制每一行分号前面的部分。或者说,读入每一行,逐个复制文件中的字符,如果出现分号,分号及其后的文字将不再复制。
提示2:任务0中的某些程序可供参考,它们做了本题中的部分工作。
任务的最低要求:去除注释,如果注释单独占一行,保留空行;
任务的较高要求:当注释单独占一行时,去除注释后,空行将不再保留。注释单独占一行,即本行在分号之前,除了空格与Tab(即’\t’)外,不出现其他任何符号。
任务的最高要求:见拓展三,消除出现这种Bug的可能。

任务4拓展提示:
这部分的思路和体会可以用于一切由计算机自动处理文档的场所合。想想目前互联网的热潮,包括搜索引擎、自然语言处理,甚至语音识别等,都要涉及到对文本的处理。
这部分拓展利用对源代码的处理进一步做些体验,让计算机自动处理源代码也是业内的一个重要领域(想想你提交一个C++程序,编译系统能为你检查语法错误,能将C++代码转换为计算机能够识别和执行的机器代码——将来学习到《编译系统》有关的知识时,千万别说没用和枯燥)。要处理的C++源程序请自己准备。
拓展一:读入一个C++程序,将其单行的注释(即 每一行“//”后面的内容)删除后保存;
拓展二:写一个程序,它能“剥”去C++源程序中的所有注释(包括//形式和/*...*/形式的)。
拓展三:修正上面所有程序中的一个Bug。如果字符串中包含表示注释的符号,如Netlogo程序中的字符串”this is a comment; that not”,C++程序中的字符串”words after // is comment.”,按照前面的处理会酿成大祸:将分号或//及其后面的符号全部删除后,表示字符串结束的双引号将不存在,破坏了字符串的完整性,同时程序将无法通过编译。
拓展四:基于上面的任一个程序,要处理的文件名和保存后的文件名由用户输入,并完成处理。
拓展五:跳出杀戮源代码中注释的行为,为程序的每一行后面都加上“//”,以方便程序员精心注释(练练而已,要每行代码后都写注释,勤奋过头了)。
拓展六:简单处理一般的文本。某些作者在写作中,无意中会在行首加入个数不定的各种非法符号,如多个空格、Tab符号、#、$等等。现在规定每一行必须以字母开头,请编程序让计算机自动整理这些不规矩的文本。提示:你要先做这么一个不规矩的文本。更高要求:规矩的文本每行前要有两个空格。


【任务5】学生成绩处理:保存为二进制文件
ASCII文件score.dat中保存的是100名学生的姓名和C++课、高数和英语成绩。
(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。
(2)读入学生的成绩,并求出总分,用对象数组进行存储。
(3)将所有数据保存到一个二进制文件binary_score.dat中,最后在文件中写入你自己的各科成绩(咱不谦虚,也求个好运,全100分)。
(4)为验证输出文件正确,再将binary_score.dat中的记录逐一读出到学生对象中并输出查看。


所用文件上传CSDN资源在遭删除,需要者私信告知Email,单独寄送。


  


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C02-程序设计基础提高班(C++)第12周上机任务-类的继承
第12周:阅读教材第11章(p347-394),主要内容是类的继承,完成第12周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 【任务1】定义一个名为CPerson的类,有以下私有成员:姓名、身份证号、性别和年龄,成员函数:构造函数、析构函数、输出信息的函数。并在此基础上派生出CEmployee类,派生类CEmployee增加了两个新的数据成员,分别用于表示部门和薪水。要
881 0
C02-程序设计基础提高班(C++)第11周上机任务-运算符重载
第11周:阅读教材第10章(p314-346),掌握用运算符重载解决问题,完成第11周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 【任务1】实现复数类中的运算符重载定义一个复数类重载运算符+、-、*、/,使之能用于复数的加减乘除。(1)方案一:请用类的成员函数完成运算符的重载; class Complex { public: Complex(){real=0;imag
1181 0
C02-程序设计基础提高班(C++)第10周上机任务-类和对象之二
第10周:阅读教材第9章(p263-313),主要内容是构造和析构函数、对象数组、对象指针、共用数据的保护等,完成第10周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: 【任务1】设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化 #include<iostream> using namespace std; class Triangle
1126 0
C02-程序设计基础提高班(C++)第9周上机任务-类和对象
第9周:阅读教材第8章(p231-262),主要内容是类和对象,学会定义类和对象解决问题,完成第9周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: 【任务1】阅读、运行下面的程序后,按要求编制新的成员函数,并增加类的功能 #include <iostream> using namespace std; class Time { public: v
1020 0
C02-程序设计基础提高班(C++)第8周上机任务-结构体
第8周:阅读教材第7章(p201-230),主要内容是结构体与自定义类型,同时也希望将同学们将第3-7章的内容整理一下,完成第8周上机任务,本周任务将增加一些对用结构化程序设计技术解决问题的综合性题目; (回到C02-程序设计基础提高班(C++)学习安排) 实践任务(需要的数据文件score.txt在本文后,自行复制后,用记事本保存为score.txt):【任务1】结构体数据组  score
1211 0
C02-程序设计基础提高班(C++)第7周上机任务-指针
第7周:阅读教材第6章(p164-200),主要内容是指针,完成第7周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 实践内容: 1. (数组的排序) 按模板中的要求,用指向数组的指针变量作为形式参数编写函数,完成冒泡排序。重点体会:(1)冒泡排序算法;(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内
814 0
C02-程序设计基础提高班(C++)第6周上机任务-数组
第6周:阅读教材第5章(p134-163),主要内容是数组,完成第6周上机任务; (回到C02-程序设计基础提高班(C++)学习安排) 任务内容: 1. 创建一个长度为20的数组,其中存放斐波那契数列的前20项。 2. 筛法求素数。筛法求素数是一种快速的求素数的方法,其思路是以空间换时间,利用额外的数组作为中介,能够显著降低运行的时间。现在要求列出10000以内的素数。 (筛法求素数的算
1299 0
C02-程序设计基础提高班(C++)第5周上机任务
第5周:阅读教材第4章(p88-133),主要内容是函数 (回到C02-程序设计基础提高班(C++)学习安排) 1. 求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘。 参考程序: #include <iostream> using namespace std; long fac(int n); //函数的声明 //下面定义main
1091 0
C02-程序设计基础提高班(C++)第4周上机任务
第4周:下载并阅读 C++程序设计入门同步实践宝典(v0.5)中的1.2节及第3章的内容(下载积分不足的同学可以通过校园网到我的BB平台下载,账号2009helijian),在程序调试技术、解题方法方面加深理解 (回到C02-程序设计基础提高班(C++)学习安排) 1、分别用3种循环(while~、for(;;)~、do~while)计算下式 要求用单重循环完成,以强化关注效率的意识。
1009 0
C02-程序设计基础提高班(C++)第3周上机任务
第3周安排:阅读教材第1-3章(p1-87),主要内容是数据类型、表达式、控制结构 回到C02-程序设计基础提高班(C++)学习安排   0.试将下列问题的解决算法用传统流程图和N-S盒图分别表示出来。   提示:传统流程图和N-S盒图是要学着画一画的。   (1)将输入的任意三个整数a、b、c,按从小到大的顺序输出。   (2)输入一个三位数n,判断输出n是否为水仙花数。若各位数的立方和等
1194 0
+关注
贺利坚
烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
文章
问答
文章排行榜
最热
最新
相关电子书
更多
给运维工程师的Python实战课
立即下载
属兔的处子——Clojure太灵活,臣妾驾驭不住啊
立即下载
Go语言路上踩过的坑
立即下载