分享

文件操作

 running_to_you 2017-05-17

文件操作

.选择题

1.若与文件型指针中相关联的文件的当前读位置已到了文件的末尾,则函数feoffp)的返回值是(  

  0                   ②-l                  ③非零值                   NULL 

  

2.下列语句中,将c定义为文件型指针的是(    

   FILE c             FILE *c               file c                 file *c 

   

3.标准库函数fputsplp2)的功能是(    

 ①从pl指向的文件中读一个字符串存入p2指向的内存 

  ②从p2指向的文件中读一个字符串存入pl指向的内存 

  ③从pl指向的内存中的一个字符串输出到p2指向的文件 

  ④从p2指向的内存中的一个字符串输出到pl指向的文件 

  

二.填充题 

 1.设有定义“# define FN 2*N”,则表达式 F23)的值是_____. 

     

2.设有下列程序:   

#include<stdio.h> 

  mainint argcint *argv[] 

{  

while--argc> 0  

printf(“%s”,argv[argc]); 

         printf(“\n”);   

  假定上述程序编译连接成目标程序名为p.exe,如果输入如下的命令: 

  P 123 AAA BBB ↓(其中的↓表示回车)   则输出结果是_____. 

 

三.程序分析题 

  1.阅读下面程序,写出程序运行结果。   

# define PRar 

printf(“%d,”, ar   

main() 

int  ja[] ={1357 91115}; 

int * p a5 

          forj3 j j--     

switchj 

{  

case 1

case 2 PR * p++); break    

case 3 PR*--p));      

         printf(“\n”);   

    

2.设下面的程序经编译连接后生成的目标程序名为: ABC.EXE,写出输入以下命令行后的输出:   ABC FILE1 FILE2 ↓(其中的↓表示回车)   

# include<stdio.h>   

main int argc char *argv[]  

 { 

int i 

         printf(“%d \n”,argc);    

fori0i<argci++  

printf(“%s”,argv[i]); 

         printf(“\n”);  

 } 

    

3.读程序,写功能。   

# include<stdio.h>   

# include<string.h>   

mainint argc char *argv[]   

FILE *fl*f2    

char ch    

ifargc< 3 

         {   

printf(“Parameters missing \n”); 

exit0);  

}    

if(((f1 =fopenargv[1],“r”))== NULL||((f2fopenargv[2],“w”))== NULL)) 

{  

printf(“Can not open file \n”);  

exit0);  

         while(!feoff1)) fputcfgetcf1),f2);   fclosef1);   fclosef2); 

  } 

    

四.程序设计题 

  1.设计一个复制文本文件的程序,源文件名和目标文件名随程序启动执行命令输入。   「解」直接写出程序如下:   

 

2.设计一个程序,将随启动程序执行时输入的两个整数的和、差、积、整除商、模运算的结果输出。  

 

3.设计一个比较字符串的程序,两个字符串随启动程序执行的命令输入,输出其中大的字符串。   

  

4.下面的程序用来统计文件中字符的个数,请填空。 

  # include<stdio.h>  

 # include<stdlib.h>   

main()   

FILE *fp    

 long num0    

 if((fp =fopen(“fname.day”,“r”))== NULL     

{  

 printf(“Cannt open file \n”);  

exit0);  

         while________ 

fgetcfp); 

num++ 

}     

printf(“num =%d \n, num);     

fclosefp);  

 } 

 

  

 

答案解析

1.③「解」当调用fopen函数时,系统将为实参文件设定一个存放文件读写控制信息的控制块。该控制块记录有关文件持征、使用方式,当前读写位置等文件状态,并将该控制块的指针返回,作为文件指针变量的值。以后程序通过该指针调用函数时,系统能访问到这个控制块,利用该文件控制块中的控制信息,正确完成文件的读或写。所以文件指针并不真正指向文件当前读写位置,但通过文件指针,系统能在文件控制块中访问文件的当前读写位置。若某文件与文件指针中相关联着,该文件的当前读写位置在文件的末尾时,函数调用feoffp)的返回值是一个非零值。所以正确解答是③。

 

2.②「解」如上题所述,文件控制块的类型已由系统命名为FILE. 所以定义文件指针变量是c,就得用代码:“FILE *c;”。所以正确解答是②。

 

3.③「解」标准函数调用fputsp1p2)完成的功能是将由字符指针pl所指的字符串内容输出到与文件指针p2相关联的文件中,即将从pl所指的内存中的字符串内容输出到p2所指向的文件中。所以正确解答是③。

 

二.填空题

1.「解」FN)被定义成2*N,表达式F23)被替换成2*23,其值是7.

 

2.「解」程序启动时,参数argc的值是4,由于循环条件是一即组>0,是先减1后判大于0,循环共进行三次,顺序输出argv[3]argv[2]argv[1],即输出BBBAAAl23. 

 

三.程序分析题

1.「解」程序的宏定义PRd格式输出参数的值和远号字符。程序给数组赋初值,并由指针p指向元素a[5].程序让j3减至1,共循环三次。当j3时,让p1,并输出p所指元素的值9;当 j21时,输出p所指的数组元素的值,并让p1,顺序输出911.所以   程序输出:   9911 

 

2.「解」程序首先输出参数argv的值3,然后循环三次,顺序输出ABCFILE1FILE2,并回车  3 

 ABC FILE1 FILE2 

 

3.「解」程序在argc小于3时,报告出错信息结束。当argc大于2时,以程序启动时的第一和第二参数为文件名打开文件,共用循环将第一参数的文件内容复制到第二参数的文件。

 

四.程序设计题 

  1.设计一个复制文本文件的程序,源文件名和目标文件名随程序启动执行命令输入。   「解」直接写出程序如下:   

# include<stdio.h>  

 int main int argc char *argv[] 

FILE *rfp*wfp     

if argc < 3

 { 

                    printf(“Parameters missing  \n”);  

return 0  

         }     

if(((rfp fopenargv[1],“r”))==NULL ||((wfpfopenargv[2],“w”))== NLILL)) 

{    

printf(“不能打开文件\n”);    

return 0     

 } 

         while  feofrfp))       

 fputc fgetcrfp), wfp);    

 fclosewfp); 

fcloserfp); 

         printf(“程序结束\n”);     return l   

 

2.设计一个程序,将随启动程序执行时输入的两个整数的和、差、积、整除商、模运算的结果输出。  

解」直接写出程序如下: 

# include<stdio.h> 

#include<stdlib.h>   

main int argcchar *argv[]   

int tlt2 

         if argc < 3 

                   rintf(“Parmenters missing\n”);  

return 0 

      } 

         t1atoi argv[l] ); 

t2atoi argv[2] ); 

         printf(“%d+%d%d\n, t1, t2,t1t2);     

printf(“%d-%d%d\n”, t1t1t1-t2);

printf(“%d*%d%d \n”,t1t2t1*t2);     

printf(“%d/%d%d\n”,t1t2 t1/t2);     

printf(“%d% %d%d\n”,t1t2 t1%t2);   

  

3.设计一个比较字符串的程序,两个字符串随启动程序执行的命令输入,输出其中大的字符串。   

「解」直接写出程序如下:   

# include<stdio.h> 

  mainint argcchar *argv[]   

char *s1*s2   

     if argc < 3

 { 

                   printf(“Parameters missing \n”); 

return 0 

          } 

     fors1argv[1]s2argv[2]*s1 && *s1==*s2s1++s2++ );     

   printf(“%s\n”,*s1< *s2 argv[2]argv[1]);   

  

4.下面的程序用来统计文件中字符的个数,请填空。 

  # include<stdio.h>  

 # include<stdlib.h>   

main()   

FILE *fp    

 long num0    

 if((fp =fopen(“fname.day”,“r”))== NULL     

{  

 printf(“Cannt open file \n”);  

exit0);  

         while________ 

fgetcfp); 

num++ 

}     

printf(“num =%d \n, num);     

fclosefp);  

 } 

  「解」若要统计文件中的字符个数,程序设计一个计数器,并预置该计数器为0值,并打开文件。在正确打开情况下,接着是一个循环。循环在文件未结束的情况下,反复读人字符,并增加字符计数器。所以循环条件可写成:(feoffp)。程序有一个错误,由于num变量的类型是long型的,输出它的值应在格式符d之前加上格式修饰符‘l’,不加这个修饰符只有在long型与int型实现相同的系统才是正确的。另外,要统计文件的长度,最好用二进制方式打开,通过读入的字节数求出文件的长。这是因为正文文件方式打开时,文件中的双字符(回车字符和换行字符)读入后将被当作一个字符存储,二进制方式不进行这样的转换。

 

 

 

   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多