C语言程序设计应用 练习与思考 题目及答案Word下载.docx
《C语言程序设计应用 练习与思考 题目及答案Word下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计应用 练习与思考 题目及答案Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
/*读取文件test1.txt中字符*/
b)fprintf(__fp2__,"
%c\n"
__ch__);
/*把ch写入文件test2.txt中*/
c)fclose(__fp2__);
/*关闭文件test2.txt*/
d)while(!
__feof(fp1)__)fscanf(fp1,__”%c”__,__&
ch__);
/*依次读入文件test1.txt中所有字符*/
e)nNumRead=fread(__str__,__sizeof(char)__,1,fp1);
f)fseek(fp1,__0L__,__SEEK_END/2__);
/*将文件内部读写位置指针定位到文件尾*/
1.2选择题
(1)在C语言中对文件操作的一般步骤是(A)。
(A)打开文件—操作文件—关闭文件
(B)操作文件—修改文件—关闭文件
(C)读写文件—打开文件—关闭文件
(D)读文件—写文件—关闭文件
(2)fscanf()函数的正确调用形式为(B)。
(A)fscanf(fp,格式字符串,读入变量列表);
(B)fscanf(文件指针,格式字符串,读入变量列表);
(C)fscanf(格式字符串,文件指针,读入变量列表);
(D)fscanf(格式字符串,读入变量列表,fp);
(3)已知函数的调用形式:
fread(buffer,size,count,fp);
其中buffer代表的是(C)。
(A)一个整型变量,代表要读入的数据项总数
(B)一个文件指针,指向要读入的文件
(C)一个指针,指向要存放读入数据的地址
(D)一个存储区,存放要读入的数据项
(4)以下可作为函数fopen中的第一参数的是(D)。
(A)c:
user\text.txt(B)c:
\user\text.txt
(C)"
c:
\user\text.txt"
(D)"
\\user\\text.txt"
(5)若执行fopen函数发生错误,则函数的返回值是(B)。
(A)地址值(B)NULL(C)1(D)EOF
(6)函数调用语句:
fseek(fp,-10L,2);
的功能是(B)。
(A)将文件内部读写位置指针移到离当前位置10个字节处
(B)将文件内部读写位置指针移到文件尾前面10个字节处
(C)将文件内部读写位置指针移到文件头后面10个字节处
(D)将文件内部读写位置指针移到文件尾后面10个字节处
(7)函数fputc()调用成功时其返回值为(D)。
(A)EOF(B)1
(C)0(D)所写入的字符
(8)当打开的文件被成功关闭后,函数fclose()返回(B)。
(A)-1(B)0
(C)TRUE(D)1
(9)当文件内部读写位置指针指向文件尾时,函数feof()返回(B)。
(A)EOF(B)非零值
(C)0(D)NULL
1.3简答题
(1)如果对fopen()函数的返回值不进行错误检查,可能会出现什么后果?
为了程序的可靠性,是否需要对程序中所有的文件操作函数调用进行错误检查和处理?
答案要点:
(1)如果fopen()函数操作错误,没有正确地按照指定方式打开文件,则后续所有文件操作均不能正确进行,程序会崩溃掉;
(2)因为文件操作的对象是外存上的文件,因此存在一定的偶然性,随时可能会出错,所以可靠的程序应该对所有文件操作进行检查判断其是否被正确执行并预设有相应的应对措施。
(2)以“a+”、“r+”、“w+”模式打开的文件都是可读可写的。
哪种模式更适合用来改变文件中已有的内容?
相对来说,“r+”更适合用来改变文件中的内容,“r+”方式打开时,文件内部读写位置指针指向文件头,可以通过文件随机定位函数fseek()来把文件内部读写位置指针移到指定位置修改文件内容;
而“a+”方式适合于给文件追加数据,文件打开时文件内部读写位置指针指向文件尾。
当然“a+”方式也可以随机定位修改文件内容;
而“w+”方式打开时,若文件已存在,则会破坏文件内原有的所有内容,因此不适合用来修改已有文件内容。
1.4编程题
(1)修改本章中程序清单9-3中StringWriteAndRead.c,使之只用打开文件和关闭文件各1次。
程序清单4-1NewStringReadAndWrite.c
/*
purpose:
Writeandreadstringforfile
author:
ZhangWeigang
created:
2008/10/0110:
36:
28
*/
stdlib.h>
string.h>
intmain(void)
{
FILE*fp;
charstr[81],strNew[81],*pCh;
intnResult,nLen;
fp=fopen("
hit.txt"
w+"
/*创建文件hit.txt并打开*/
if(NULL==fp)
{
printf("
Openfilehit.txterror\n"
exit(-1);
}
printf("
Pleaseinputastring:
\n"
gets(str);
/*获取键盘输入字符串*/
nLen=strlen(str);
/*计算字符串长度*/
nResult=fputs(str,fp);
/*把字符串写入文件中*/
if(EOF==nResult)
Writestringtohit.txterror\n"
Writestringtofilecompletely\n"
fseek(fp,0L,SEEK_SET);
/*文件内部读写位置指针重新定位到文件头*/
pCh=fgets(strNew,nLen+1,fp);
/*从文件中读取字符串*/
if(NULL==pCh)
Readstringfromhit.txterror\n"
puts(pCh);
/*输出字符串到屏幕,此处也可把pCh替换成strNew*/
fclose(fp);
return0;
}
(2)编写一个文件复制程序,要求从命令行参数中直接获取源文件名和目的文件名。
程序清单4-2FileCopy.c
Copyafile
49:
32
intmain(intargc,char*argv[])
FILE*fpSource,*fpDest;
charch;
intnNum=0;
if(argc!
=3)/*判断命令行参数输入是否正确*/
Pleaseusethisprogramlike:
FileCopySourceFileNameDestinationFileName\n"
fpSource=fopen(argv[1],"
/*打开复制源文件*/
if(NULL==fpSource)
Opensourcefileerror\n"
fpDest=fopen(argv[2],"
/*创建并打开复制目标文件*/
if(NULL==fpDest)
Opendestinationfileerror\n"
ch=fgetc(fpSource);
/*从源文件中读入字符*/
while(!
feof(fpSource))/*判断当前读入字符是否为文件结束符*/
fputc(ch,fpDest);
/*把当前字符写入到目标文件中*/
nNum++;
/*统计复制字节数*/
ch=fgetc(fpSource);
Copied%dbytes.\n"
nNum);
FileCopySuccessfully!
fclose(fpSource);
/*关闭文件*/
fclose(fpDest);
(3)通过命令行参数给定2个文件的文件名,要求把第二个文件的内容原封不动的写入到第一个文件的尾部,并且不能破坏第一个文件原有数据。
程序清单4-3FileCat.c
Appendafiletoanotherfile
2008/10/0111:
29:
42
Appendthesecondfiletothefirstfile.\n"
FileCatSourceFileNameDestinationFileName\n"
fpDest=fopen(argv[1],"
a+"
/*以追加读/写方式打开第一个文件*/
Ope