13.11 编程练习

1.修改程序清单13.1中的程序,使之不采用命令行参数,而是请求用户输入文件名并读入用户的响应。

2.编写一个文件复制程序。程序需要从命令行获得源文件名和目的文件名。尽可能使用标准I/O和二进制模式。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

3.编写一个文件复制程序,提示用户输入源文件名和输出文件名。在向输出文件写入时,程序应当使用ctype.h中定义的toupper()函数将所有的文本转换成大写。使用标准I/O和文本模式。

4.编写一段程序,依次在屏幕上显示命令行中列出的全部文件。使用argc控制循环。

5.修改程序清单13.6中的程序,使用命令行参数(而不是交互式界面)获得文件名。

6.使用命令行参数的程序要求用户记住正确的使用方法。重写程序清单13.2中的程序,不使用命令行参数,而是提示用户键入所需的信息。

7.编写一个打开两个文件的程序。可以使用命令行参数或者请求用户输入来获得文件名。

a.让程序打印第一个文件的第一行、第二个文件的第一行、第一个文件的第二行、第二个文件的第二行,依此类推,直到打印完行数较多的文件的最后一行。
b.修改程序,把行号相同的行打印到同一行上。

8.编写一段程序,将一个字符、零个或多个文件名作为命令行参数。如果字符后没有参数跟随,程序读取标准输入文件。否则,程序依次打开每个文件,然后报告每个文件中该字符的出现次数。文件名和字符本身也与计数值一起报告。程序中包括错误检查,以确定参数数目是否正确和是否能打开文件。如果不能打开文件,程序要报告这一情况然后继续处理下一文件。

9.修改程序清单13.3中的程序,从1开始,根据加入列表的顺序为每个单词编号。当再次运行程序时,确保新的单词编号接着前面的编号开始。

10.编写一个程序,打开一个文本文件,文件名通过交互方式获得。建立一个循环,请求用户输入一个文件位置。然后程序打印文件中从该位置开始到下一换行符之间的部分。用户通过输入非数字字符来终止输入循环。

11.编写一个程序,接受两个命令行参数。第一个参数为一个字符串;第二个为文件名。程序打印文件中包含该字符串的所有行。因为这一任务是面向行而不是面向字符的,所以要使用fgets()而不是getc()。使用标准C库函数strstr()(在第11章的练习7中简要描述过)在每一行中搜索这一字符串。

12.创建一个包含20行,每行30个整数的文本文件。整数在0到9之间,用空格分开。该文件是一个图片的数字表示,从0到9的值代表逐渐增加的灰度。编写一个程序,将文件的内容读入到一个20*30的int数组中。一种将这种数字表示转化成图片的粗略方法就是让程序使用数组中的数值来初始化一个20*31的字符阵列。0对应空格字符,1对应句号字符,依此类推,较大的值对应占用空间较多的字符。比如,可以使用#代表9。每行的最后一个字符(第31个)为空字符,这样数组将包含20个字符串。然后程序显示结果图片(即打印这些字符串),并将结果存入一个文本文件中。例如,如果开始的数据为:

阅读 ‧ 电子书库

对于一种特定的输出字符的选择,输出是这样的:

阅读 ‧ 电子书库

13.数字图像,尤其是从宇宙飞船发回的数字图像可能会包含尖峰脉冲。为第12道编程练习题添加消除尖峰脉冲的函数。该函数应该将每一个值和它上下左右的相邻值比较,如果该值与它周围每个值的差都大于1,就用所有相邻值的平均值(取与其最接近的整数)取代这个值。注意到边界上的点的相邻点少于4个,所以它们需要特殊处理。