8.1 单项选择题
4 U9 ?+ O3 E' b# [+ h# ~ 1.若与文件型指针中相关联的文件的当前读位置已到了文件的末尾,则函数feof(fp)的返回值是( )( J" r4 x p" W; |: v: v
①0 ②-l
% q+ x4 a2 ?9 B* v% B ③非零值 ④NULL
: J8 T% j% e9 N) r: E) b( M 【解】当调用fopen函数时,系统将为实参文件设定一个存放文件读写控制信息的控制块。该控制块记录有关文件持征、使用方式,当前读写位置等文件状态,并将该控制块的指针返回,作为文件指针变量的值。以后程序通过该指针调用函数时,系统能访问到这个控制块,利用该文件控制块中的控制信息,正确完成文件的读或写。所以文件指针并不真正指向文件当前读写位置,但通过文件指针,系统能在文件控制块中访问文件的当前读写位置。若某文件与文件指针中相关联着,该文件的当前读写位置在文件的末尾时,函数调用feof(fp)的返回值是一个非零值。所以正确解答是③。9 u" g0 j G' W+ t) }' w) Q' H. E
2.下列语句中,将C定义为文件型指针的是( )
' q* L* m# p4 |! O- c1 ], r# ^ ① FILE c; ② FILE *c; ③ file c; ④ file *c;4 {/ ~$ {! G0 D4 f
【解】如上题所述,文件控制块的类型已由系统命名为FILE。所以定义文件指针变量是C,就得用代码:“FILE *c;”。所以正确解答是②。
8 V1 H8 \0 n; \, `% z+ S- g7 E 3.标准库函数fputs(pl,p2)的功能是( )
4 I E1 c' b- a8 G4 Y p9 l% D( v ①从pl指向的文件中读一个字符率存入p2指向的内存
2 y5 H% D* I: E. _0 f2 \' ~) j ②从p2指向的文件中读一个字符串存入pl指向的内存& T% D. J$ \1 h) |
③从pl指向的内存中的一个字符串输出到p2指向的文件 K. R) ]+ j9 \7 i9 Z
④从p2指向的内存中的一个字符串输出到pl指向的文件
C1 }5 z E& L 【解】标准函数调用fputs(p1,p2)完成的功能是将由字符指针pl所指的字符串内容输出到与文件指针p2相关联的文件中,即将从pl所指的内存中的字符串内容输出到p2所指向的文件中。所以正确解答是③。& Q; f2 ^( r' f8 A6 H; S' z
8.2 填充题6 n4 p1 R7 P# B+ I% ?7 F7 y; O
1."FILE *p"的作用是定义一个______,其中的"FILE"是在________头文件中定义的。" u& m# f9 s; ~. d
【解】代码"FILE *p"的作用是定义一个文件指针变量,其中的FILE是在标准输入输出头文件stdio.h中定义的。
& J+ p9 `8 H! w% z 2.在对文件进行操作的过程中,若要求文件的现行位置回到文件的开头,应当调用的函数是_______函数。* O( r M+ Q# E/ j; s
【解】若要让文件随机地从某个现行位置回到文件的开头,可调用库函数rewind( )。# _! W7 i& _2 q% o+ V! }
3.下面的程序用来统计文件中字符的个数,请填空。
0 v9 t$ G& h0 |: r o" ` # include E( I% ?. A7 i
# include4 w) o& ?4 Q5 ?9 x7 a) R
main()
1 R4 j& d" `. e' g8 w$ ? { FILE *fp;" c! L0 v! t1 W. \3 X& c* v
long num=0;8 e- c% w% U( }/ _
if(( fp =fopen("fname.day","r"))== NULL)$ r, ]" Q2 q" l$ L. B
{ printf("Cann’t open file! \n"); etit(0); }
' C" W; H; O1 X$ l5 d7 H. l while________ { fgetc(fp); num++; }8 m: h' a$ G( S8 ]2 n
printf("num =%d \n". num);, |, z" C4 l& N2 T! o( S `6 Z0 S
fclose(fp);' f7 N" a# J& Q5 O% R7 V
}
* {) m. W3 @/ z 【解】若要统计文件中的字符个数,程序设计一个计数器,并预置该计数器为0值,并打开文件。在正确打开情况下,接着是一个循环。循环在文件未结束的情况下,反复读人字符,并增加字符计数器。所以循环条件可写成:!feof(fp)。程序有一个错误,由于num变量的类型是long型的,输出它的值应在格式符d之前加上格式修饰符’l’,不加这个修饰符只有在long型与int型实现相同的系统才是正确的。另外,要统计文件的长度,最好用二进制方式打开,通过读入的字节数求出文件的长。这是因为正文文件方式打开时,文件中的双字符(回车字符和换行字符)读入后将被当作一个字符存储,二进制方式不进行这样的转换。
- Z$ x; J9 I; |% l } 8.3 程序分析题
! ]: b, C" r; ~: E# @* d: x 1.读程序,写功能。 & N% ?' J2 c% p/ v/ p4 O) l! I9 [9 H
# include
$ u& f0 p' p6 B$ T4 g" V # include, m2 P" d! i$ c. Q+ T; o
main()+ R2 O% h! V; o4 r7 M# l) i
{ FILE *f1,* f2;, [9 s9 A9 `9 [1 H* L4 Y q: v
int k;( S8 I+ R: P" I# O6 u/ ?
if(( f1= fopen("c:\\tc \\ pl.c","r" )== NULL)8 E- }4 t! `2 |& R( l
{ printf("Can not open file! \n");
% ?8 a7 j# e, N: J1 I exit(0);! Q! ]/ c/ F8 N
}
' ^4 B; i0 b7 n8 {4 }3 T if((f2= fopen("a:\\ pl.c","w" ))== NULL)
U! ^( Q6 q0 G3 Y5 X8 S { printf("Can not open file! \n" );, ]! t& E7 ~- O6 Z5 }
exit(0) ;
0 S3 ^8 F! T$ r }
+ e$ b3 f$ Y8 d# T; a# h9 L& a; ` for( k=1;k |