A.ftell ( ) B.fseek ( ) C.rewind ( ) D.ferror( ) 二、填空题
1.函数fopen ( )的返回值是_指向文件缓冲区的首地址的文件结构类型指针_。 2.文件的三大特征是__名称__、__大小__和__类型__。
3.缓冲文件系统与非缓冲文件系统的不同点在于__系统是否为文件自动分配一块文件缓冲区(内存单元)__。
4.只能向指定文件写入一个字符的函数是_____fputc()函数______。 5.判断文件指针是否已经到了文件尾部的函数是___feof()函数___。 6.阅读程序,以下程序完成的功能是__文件infile内容复制到文件__。 #include
{ char infile [10],outfile [10]; FILE * fpa,* fpb; gets (infile); gets (outfile);
fpa=fopen (infile,\fpb=fopen (outfile,\while (! feof (fpa) ) fputc(fgetc(fpa),fpb); fclose (fpa) ; fclose (fpb) ; return 0; }
三、程序设计题
1.统计文本文件中各类字符个数: 分别统计一个文本文件中字母、数字及其他字符的个数。试编写相应程序。 解答:
#include
FILE *fp; char ch;
int letter=0,digiter=0,other=0;
if((fp=fopen(\ printf(\ exit(0); }
while((ch=fgetc(fp))!=EOF){ if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') letter++; else if(ch>='0'&&ch<='9') digiter++;
else other++; }
printf(\ if(fclose(fp)){
printf(\ exit(0); }
return 0; }
2.将实数写入文件: 从键盘输人若干实数(以特殊数值-1结束),分别写到一个文本文件中。试编写相应程序。 解答:
#include
FILE *fp; int number;
if((fp=fopen(\ printf(\ exit(0); }
printf(\ scanf(\ while(number!=-1){
fprintf(fp,\ scanf(\ }
if(fclose(fp)){
printf(\ exit(0); }
return 0; }
3.比较两个文本文件是否相等: 比较两个文本文件的内容是否相同,并输出两个文件中第一次出现不同字符内容的行号及列值。试编写相应程序。 解答:
#include
int main(void) {
FILE *fp1,*fp2; int i=1,j=1; char ch1,ch2;
if((fp1=fopen(\ printf(\ exit(0); }
if((fp2=fopen(\ printf(\ exit(0); }
ch1=fgetc(fp1); ch2=fgetc(fp2);
while(ch1!=EOF&&ch2!=EOF){ if(ch1!=ch2) break;
else if(ch1!='\\n'){ j++;
ch1=fgetc(fp1); ch2=fgetc(fp2); } else{ i++; j=1;
ch1=fgetc(fp1); ch2=fgetc(fp2); } }
printf(\首次不同的字符在第%d行、第%d列。\\n\ if(fclose(fp1)){
printf(\ exit(0); }
if(fclose(fp2)){
printf(\ exit(0); } }
4.将文件中的数据求和并写入文本文件尾: 文件Int_Data.dat 中存放了若干整数,将文件中所有数据相加,并把累加和写入该文件的最后。试编写相应程序。
解答:
#include
FILE *fp; int x,sum=0;
if((fp=fopen(\ printf(\ exit(0); }
while(!feof(fp)){ fscanf(fp,\ sum+=x; }
fprintf(fp,\ if(fclose(fp)){
printf(\ exit(0); }
return 0; }
5.输出含for的行: 将文本文件test.txt 中所有包含字符串“for”的行输出。试编写相应程序。 解答:
#include
FILE* fp; int i;
if((fp=fopen(\ printf(\ exit(0); }
while(!feof(fp)){
fgets(s,999,fp); if(strlen(s)>3){
for(i=0;i if(s[i]=='f'&&s[i+1]=='o'&&s[i+2]=='r') printf(\ } } if(fclose(fp)){ printf(\ exit(0); } return 0; } 6.删除文件中的注释: 将C语言源程序(hello.c) 文件中的所有注释去掉后存入另一个文件(new_hello.c)。试编写相应程序。 解答: #include FILE *fp1,*fp2; char ch,ch1,ch2,s[99]; if((fp1=fopen(\ printf(\ exit(0); } if((fp2=fopen(\ printf(\ exit(0); } while(!feof(fp1)){ ch=fgetc(fp1); if(ch=='/'){ if((ch1=fgetc(fp1))=='*') while(fgetc(fp1)!='*'&&(ch1=fgetc(fp1))!='/') fseek(fp1,-sizeof(ch1),1); else if(ch1=='/'){ ch='\\0'; for(;ch1!='\\n';ch1=fgetc(fp1)) ch1='\\0'; } } else if(ch!=EOF) fputc(ch,fp2); }