第8章练习
  1. 写一个程序打印乘法九九表。利用格式控制保证表的的项能很好对齐。


  2. 写一个程序,其命令行要求有三个参数。该程序把这些参数看成文件名,完成的工作是把前两个文件的内容连接起来,存放到第三个文件里(文件连接)。


  3. 将前面一些程序改写为采用文件输入输出的实现的,通过命令行或者输入语句为程序提供运行的数据或输入输出的文件名。


  4. 修改前一章有关猜单词游戏的练习,让程序从文件中读入一批单词,文件的名字从命令行得到。如果调用函数时未提供文件名,则向用户要求文件名。


  5. 修改前面的学生成绩统计和直方图生成程序。假定成绩文件中的每一行是一个学生的姓名(例如,连续字符序列表示的汉语拼音姓名)和相应成绩。程序首先输入文件,而后先输出成绩不及格的学生姓名和成绩,再输出成绩及格的学生姓名和成绩。


  6. 修改学生成绩统计和直方图生成程序。假定文件里的每行记录了一个学生的姓名和几门课程的成绩,程序读入这种文件,计算出每个同学的平均成绩,而后:首先输出平均成绩不及格的同学名单和对应成绩;而后输出及格的同学名单和对应成绩。


  7. 假设电价分段计费,不同时段每度电的单价不同。每个用户的用电记录在文件里存为一段,其中的第一行是用户名,随后的每个记录项包括两个浮点数据,第一个数据是一段时间的用电度数,第二个数据是每度的单价,都由空格或者换行分隔。请写出一个完整的程序,它不断要求人提供输入文件的名字,对每个文件算出各个用户应付的电费并输出结果。程序结束时输出所有用户应付的总电费额。这个程序在启动后应能处理任意多个文件,并使用户能在处理完希望处理的文件之后控制程序结束。


  8. 写一个程序,其命令行有两个文件名参数,在第一个文件里是一个单词表,第二个文件是被处理的文件。程序生成一个新文件,其中包含单词表中的每个单词,并附以各单词在被处理文件里出现位置的行号(可能有多个行号,但应当避免重复)。


  9. 文中的背单词程序用两维数组记录单词。为了防止单词超出范围,那里定义了一个很大的常量WDLEN,而实际上许多单词和对应正文词所需的存储都远远小于这个量。请修改这一程序,用一个指针char* 的数组代替那里的两维数组。在读入英文单词和中文词时用较大的char数组作为临时存储,而后通过动态分配的方法为每个英文或正文单词字符串建立适当大小的数组,并将字符串复制进去。为了这种改动,程序的其他部分还可以保持原样吗?