【说明】 编写程序,生成一个新文本文件,它由一个已知文本文件的所有偶数行组成。要求已知文本文件名和新文本文件名均从键盘输入。请填空完善程序。 【C语言程序】 #include<stdio.h> main() { FILE *oldf,*newf; char ch,fname[20]; int i; do{ printf("Enter name of existed text file to be read:"); scanf("%s",fname); if((oldf=fopen(fname,"r"))==NULL) printf("File %s can’t open!\n",fname); }while(oldf==NULL); do{ printf("Enter mane of new text file to be written:"); scanf("%s",fname); if(( (1) ==NULL) printf("File %s can’t open!\n",fname); }while( (2) ); i=1; while(!feof(oldf)) { while((ch=fgetc(oldf))!= (3) ) { if(i%2== (4) ) fputc(ch,newf); } fputc(’\n’,newf); (5) ; } fclose(oldf); fclose(newf); }
参考答案:
解析:(1)newf=fopen(fname,"w") (2)newf==NULL (3)’\n’ (4)0 (5)i=i+1(或i++)
[分析]: 本题考查用C语言实现对文本文件的操作。 题目要求程序生成一个新文本文件,它的内容由一个已知文本文件的所有偶数行组成,而已知文本文件名和新文本文件名均从键盘输入,题目的关键在于对文件的操作。下面来具体分析代码。 第(1)空在一个循环体中,是条件判断语句的条件,此循环的作用我们不难从程序中看出,是用来打开新文本文件的,在C语言中要打开一个文件应该用函数fopen(),它的两个参数分别是其文件名和对文件操作的属性,根据题目意思,对这个文件的操作只有写操作。因此,此空答案为newf=fopen(fname,"w")。 第(2)空是一个循环的判断条件,上面我们已经分析了该循环的作用,是用来打开新文本文件的,结合第一个文件的打开程序,我们很容易发现此空的答案为newf==NULL。 第(3)空是一个二重循环第二层循环的判断条件,这个二重循环的作用是用来实现将已知文本文件的所有偶数行内容写到新文件中,这里需要注意每次取到的内容都是偶数行的内容,在对已知文本文件进行取内容时是逐行取的,那么条件判断语句是用来判断是否取完了一行内容,在C语言中,一般用换行符’\n’来标志一行的结束,因此此空答案为’\n’。 第(4)空是循环下条件判断语句的条件,根据题目要求可以知道每次对新文件进行写的数据都是已知文本文件的偶数行的内容,那么在写之前应该首先判断内容是否是偶数行的内容。此空所在语句就是用来实现这一功能的,而偶数对2取余的结果都为0,因此此空答案为0。 第(5)空是二重循环的最后一条语句,在上面的空中我们已经分析到,在对新文件进行写内容时要首先判断其内容所在行是否为偶数行,而当前行号存放在变量i中,整个程序都没有改变变量i的值,那么此空应该是用来改变变量i的值的,因此此空答案为i++。