8.1 单项选择题 1.若与文件型指针中相关联的文件的当前读位置已到了文件的末尾,则函数feof(fp)的返回值是( ) ①0 ②-l ③非零值 ④NULL 【解】当调用fopen函数时,系统将为实参文件设定一个存放文件读写控制信息的控制块。该控制块记录有关文件持征、使用方式,当前读写位置等文件状态,并将该控制块的指针返回,作为文件指针变量的值。以后程序通过该指针调用函数时,系统能访问到这个控制块,利用该文件控制块中的控制信息,正确完成文件的读或写。所以文件指针并不真正指向文件当前读写位置,但通过文件指针,系统能在文件控制块中访问文件的当前读写位置。若某文件与文件指针中相关联着,该文件的当前读写位置在文件的末尾时,函数调用feof(fp)的返回值是一个非零值。所以正确解答是③。
2.下列语句中,将C定义为文件型指针的是( ) ① FILE c; ② FILE *c; ③ file c; ④ file *c; 【解】如上题所述,文件控制块的类型已由系统命名为FILE。所以定义文件指针变量是C,就得用代码:“FILE *c;”。所以正确解答是②。
3.标准库函数fputs(pl,p2)的功能是( ) ①从pl指向的文件中读一个字符率存入p2指向的内存 ②从p2指向的文件中读一个字符串存入pl指向的内存 ③从pl指向的内存中的一个字符串输出到p2指向的文件 ④从p2指向的内存中的一个字符串输出到pl指向的文件 【解】标准函数调用fputs(p1,p2)完成的功能是将由字符指针pl所指的字符串内容输出到与文件指针p2相关联的文件中,即将从pl所指的内存中的字符串内容输出到p2所指向的文件中。所以正确解答是③。 8.2 填充题 1."FILE *p"的作用是定义一个______,其中的"FILE"是在________头文件中定义的。 【解】代码"FILE *p"的作用是定义一个文件指针变量,其中的FILE是在标准输入输出头文件stdio.h中定义的。
2.在对文件进行操作的过程中,若要求文件的现行位置回到文件的开头,应当调用的函数是_______函数。 【解】若要让文件随机地从某个现行位置回到文件的开头,可调用库函数rewind( )。
3.下面的程序用来统计文件中字符的个数,请填空。 # include # include main() { FILE *fp; long num=0; if(( fp =fopen("fname.day","r"))== NULL) { printf("Cann’t open file! \n"); etit(0); } while________ { fgetc(fp); num++; } printf("num =%d \n". num); fclose(fp); } 【解】若要统计文件中的字符个数,程序设计一个计数器,并预置该计数器为0值,并打开文件。在正确打开情况下,接着是一个循环。循环在文件未结束的情况下,反复读人字符,并增加字符计数器。所以循环条件可写成:!feof(fp)。程序有一个错误,由于num变量的类型是long型的,输出它的值应在格式符d之前加上格式修饰符’l’,不加这个修饰符只有在long型与int型实现相同的系统才是正确的。另外,要统计文件的长度,最好用二进制方式打开,通过读入的字节数求出文件的长。这是因为正文文件方式打开时,文件中的双字符(回车字符和换行字符)读入后将被当作一个字符存储,二进制方式不进行这样的转换。 8.3 程序分析题 1.读程序,写功能。 # include # include main() { FILE *f1,* f2; int k; if(( f1= fopen("c:\\tc \\ pl.c","r" )== NULL) { printf("Can not open file! \n"); exit(0); } if((f2= fopen("a:\\ pl.c","w" ))== NULL) { printf("Can not open file! \n" ); exit(0) ; } for( k=1;k<=l000;k++) { if( feof(f1)) break; fputc( fgetc(f1), f2); } fclose(f1); fclose(f2); } 【解】程序首先以读方式打开文件pl.c,以写方式打开文件P2.c。程序在文件pl.c未结束之前读入l000个字符复制到文件p2.c。然后关闭这两个文件。所以程序的功能是将文件pl.c的前l000个字符复制到文件p2.c。子目录字符’\’在C语言中作为转义字符的引导字符,若在字符串中要用这个字符,必须双写该字符。如C盘根目录tc子目录文件p1.c,在C程序中应写成字符串"c:\\tc \\pl.c。 |