第九章_文件
![第九章_文件](https://img.360docs.net/img24/012wtonckooblwjiz5e1-41.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章文件
一、单项选择题
【9.1】要打开一个已存在的非空文件"file"用于修改,选择正确的语句____。
A) fp=fopen("file", "r"); B) fp=fopen("file", "a+");
C) fp=fopen("file", "w"); D) fp=fopen('file", "r+");
【9.2】当顺利执行了文件关闭操作时,fclose函数的返回值是。
A) -1 B) TRUE C) 0 D) 1
【9.3】fscanf函数的正确调用形式是。
A) fscanf (文件指针, 格式字符串, 输出列表);
B) fscanf (格式字符串, 输出列表, 文件指针);
C) fscanf (格式字符串, 文件指针, 输出列表);
D) fscanf (文件指针, 格式字符串, 输入列表);
【9.4】使用fgetc函数,则打开文件的方式必须是。
A) 只写 B) 追加 C) 读或读/写 D) 参考答案B和C都正确
【9.5】C语言中标准输入文件stdin是指。
A) 键盘 B) 显示器 C) 鼠标 D) 硬盘
二、程序填空题
【9.6】下面程序的功能是统计文件中的字符的个数。
#include
main()
{ long num=0;
① *fp;
if((fp=fopen("fname.dat", "r"))==NULL)
{ printf("Can't open the file! ");
exit(0);
}
while( ② )
{ fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
}
【9.7】下面程序的功能是把从键盘输入的文件(用 @ 作为文件结束标志)复制到一个名为second.txt的新文件中。
#include
FILE *fp;
main()
{ char ch;
if((fp=fopen( ① ))==NULL)
exit(0);
while((ch=getchar())!='@')
fputc(ch,fp);
② ;
}
【9.8】下面程序的功能是将磁盘上的一个文件复制到另一个文件中,两个文件名在命令行中给出(假定给定的文件名无误)。
#include
main(int argc,char *argv[])
{ FILE &f1,*f2;
if(argc< ① )
{ printf("The command line error! ");
exit(0);
}
f1=fopen(argv[1], "r");
f2=fopen(arhv[2], "w");
while( ② )
fputs(fgetc(f1), ③ );
④ ;
⑤ ;
}
【9.9】下面程序的功能是键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。
#include
main()
{ char str[100];
int i=0;
FILE *fp;
if((fp=fopen("test.txt", ① ))==NULL)
{ printf("Can't open the file.\n");
exit(0);
}
printf("Input a string:\n");
gets(str);
while(str[i])
{ if(str[i]>= 'a'&&str[i]<= 'z')
str[i]= ② ;
fputc(str[i],fp);
i++;
}
fclose(fp);
fp=fopen("test.txt", ③ );
fgets(str,strlen(str)+1,fp);
printf("%s\n",str);
fclose(fp);
}
【9.10】下面程序的功能是将从终端上读入的10个整数以二进制方式写入名为"bi.dat"的新文件中。
#include
FILE *fp;
main()
{ int i, j;
if(( fp=fopen( ① , "wb" )) == NULL )
exit (0);
for( i=0;i<10;i++ )
{ scanf("%d", &j );
fwrite( ② , sizeof(int), 1, ③ );
}
fclose( fp);
}
【9.11】以字符流形式读入一个文件,从文件中检索出六种C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或'\t'、 '\n'结束的字符串。
#include
#include
FILE *cp;
char fname[20], buf[100];
int num;
struct key
{ char word[10];
int count;
}keyword[]={ "if", 0, "char", 0, "int", 0,
"else", 0, "while", 0, "return", 0};
char *getword (FILE *fp)
{ int i=0;
char c;
while((c=getc(fp)) != EOF && (c==' '||c=='\t'||c=='\n')) ;
if( c==EOF ) return (NULL) ;
else buf[i++]=c;
while((c = ① && c!= ' ' && c!= '\t' && c!= '\n' )
buf[i++] = c;
buf[i]= '\0';
return(buf);
}
lookup(char *p)
{ int i;
char *q, *s;
for(i=0;i { q = ② ; s=p; while( *s && (*s==*q) ) { ③ } if( ④ ) { keyword[i].count++; break; } } return; } main() { int i; char *word; printf("Input file name:"); scanf("%s", fname); if((cp=fopen(fname, "r")) ==NULL ) { printf("File open error: %s\n", fname); exit(0); } num = sizeof(keyword) / sizeof(struct key); while( ⑤ ) lookup(word); fclose(cp); for(i=0;i printf("keyword:%-20scount=%d\n",keyword[i].word,keyword[i].cou nt); } 【9.12】下面程序的功能是从键盘接受姓名(例如:输入"ZHANG SAN"),在文件"try.dat"中查找,若文件中已经存入了刚输入的姓名,则显示提示信息;若文件中没有刚输入的姓名,则将该姓名存入文件。要求:⑴若磁盘文件"try.dat",已存在,则要保留文件中原来的信息;若文件 "try.dat"不存在,则在磁盘上建立一个新文件;⑵当输入的姓名为空时(长度为0),结束程序。 #include main() { FILE *fp; int flag; char name[30], data[30]; if((fp=fopen("try.dat", ①))==NULL ) { printf("Open file error\n"); exit(0); } do { printf("Enter name:"); gets(name); if( strlen(name)==0 ) break; strcat(name, "\n"); ②; flag=1; while( flag && (fgets(data, 30, fp) ③) ) if( strcmp(data, name) == 0 ) ④ ; if( flag ) fputs(name, fp); else printf("\tData enter error !\n"); } while( ⑤ ); fclose(fp); } 【答案:】 【9.1】答案:D 注释:函数fopen中的第二参数是打开模式,"r"模式是只读方式,不能写文件;"a+"模式是读/追加方式,允许从文件中读出数据,但所有写入的数据均自动加在文件的末尾;"w"模式是写方式,允许按照用户的要求将数据写入文件的指定位置,但打开文件后,首先要将文件的内容清空。"r+"模式是读/写方式,不但允许读文件,而且允许按照用户的要求将数据写入文件的指定位置,且在打开文件后,不会将文件的内容清空。本题的要求是"修改"文件的内容,因此只能选择答案D。 【9.2】答案:C 【9.3】答案:D 【9.4】答案:C 【9.5】答案:A 【9.6】答案:① FILE ② !feof(fp) 注释:FILE 是文件结构类型名。feof()是测试文件结束标志的函数。【9.7】答案:① "second.txt" ② fclose(fp) 【9.8】答案:① 3 ② !feof(f1)或feof(f1)==0 ③ f2 ④ fclose(f2) ⑤ fclose(f1) 注释:程序中使用了带参数的main函数,其中整型参数argc为命令行中字符串的个数,此程序运行时输入的字符串有可运行程序名、文件1和文件2,故argc不应小于3。字符串指针argv[0]指向可运行程序名、字符串指针argv[1]指向输入文件名、字符串指针argv[2]指向输出文件名,由上所述②处给出循环条件是输入文件是否结束,③处需要填出输出文件名。最后两处是关闭两个文件,原则上关闭文件没有顺序要求,但习惯上是后打开的文件先关闭。 【9.9】答案:① "w" ② -32 ③ "r" 【9.10】答案:① "bi.dat" ② &j ③ fp 【9.11】答案:① fgetc(fp))!=EOF ② &keyword[i].word[0]③ s++; q++; ④ *s==*q ⑤ (word=getword(cp))!=NULL 【9.12】答案:① "a+" ② rewind(fp) ③ !=NULL ④ flag=0 ⑤ ferror(fp)==0