
基础训练
一、填空题
1、 文件是指___________________________________________________________。
2、 根据数据的组织形式,C中将文件分为______ASCII码文件________和___二进制文件___________两种类型。
3、 现要求以读写方式,打开一个文本文件 stu1 ,写出语句:
__FILE *fp fp=fopen(“stu.txt”,”r+”);_______________。
__________________________________。
4、 现要求将上题中打开的文件关闭掉,写出语句:___fclose(fp);__________________。
5、 若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则打开文件方式字符串应该是___fopen(“a.txt”,”wb+”);__________。
二、选择题
1、若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是( ) 。
A) fopen("A:\\abc.txt B) fopen("A:\\\\\\abc.txt
C) fopen("A:\\abc.txt
2、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为( )。
A) 0 B) 1 C) -1 D) 一个非0值
3、 当已经存在一个file1.txt文件,执行函数fopen(“file1.txt”,”r+”)的功能是( )。
A)打开file1.txt文件,清除原有的内容;
B)打开file1.txt文件,只能写入新的内容;
C)打开file1.txt文件,只能读取原有内容;
D)打开file1.txt文件,可以读取和写入新的内容;
4、 fread(buf , ,2,fp)的功能是:( )
A)从fp所指向的文件中,读出整数,并存放在buf中;
B)从fp所指向的文件中,读出整数和2,并存放在buf中;
C)从fp所指向的文件中,读出个字节的字符,读两次,并存放在buf地址中;
D)从fp所指向的文件中,读出个字节的字符,并存放在buf中;
5、 以下程序的功能是( ) 。
main()
{
FILE * fp;
char str[]=”Beijing 2008”;
fp = fopen(“file2”,”w”);
fputs(str,fp);
fclose(fp);
}
A)在屏幕上显示“Beiing 2008”;
B)把”Beijing 2008”存入file2文件中;
C)在打印机上打印出“Beiing 2008”;
D)以上都不对;
6、 以下程序是建立一个名为myfile的文件,并把从键盘输入字符存入该文件,当键盘上输入结束时关闭该文件。选择正确内容填空。
main()
{ FILE *fp;
char c ;
char name[10];
fp=fopen(“myfile”,_”wb”_______);
do
{ c=getchar();
fputc(c , fp);
} while(c!=EOF);
fclose(fp); }
(1) A) fgets B)fopen C ) fclose D) fgetc
(2) A) “r” B) “r+” C ) “w” D) “w+”
三、设计题
1、 编写一个程序,以只读方式打开一个文本文件 filea.txt ,如果打开,将文件地址放在fp文件指针中,打不开,显示“Cann’t open filea.txt file \\n. ”,然后退出。void main()
{
FILE *fp;
if((fp=fopen("filea.txt
printf("")
}
综合训练
一、填空题
1、以下程序段打开文件后,先利用 fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。
FILE *myf; ling f1;
myf= _________ (“test.t”,“rb”);
fseek(myf,0,SEEK_END); f1=ftel(myf);
fclose(myf);
printf(“%d\\n”,f1);
2、下面程序把从终端读入的10个整数以二进制方式写到一个名为bi.dat的新文件中,请填空.
#include FILE *fp; main() { int i,j; if((fp=fopen(__”bi.dat”__________, "wb"))==NULL) exit(0); for(i=0; i<10; i++) { scanf("%d",&j); fwrite(&j,sizeof(int),1,______fp_______ ); } fclose(fp); 3、以下程序用来统计文件中字符个数。请填空。 #include "stdio.h" main() { FILE *fp; long num=0L; if((fp=fopen("fname.dat { pirntf("Open error\\n"); exit(0);} while( ___!feof(fp)______________ ) { fgetc(fp); num++;} printf("num=%1d\\n",num-1); fclose(fp); } 4、以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件文件中形成文本文件,并将字符的个数写到文件尾部,请填空。 #include main( ) { FILE *fp; char ch,fname[32]; int count=0; printf("Input the filename :"); scanf("%s",fname); if((fp=fopen( _fname____________ ,"w+"))==NULL) { printf("Can't open file:%s \\n",fname); exit(0);} printf("Enter data:\\n"); while((ch=getchar())!="#"){ fputc(ch,fp); count++;} fprintf(____________ ,"\\n%d\\n", count); fclose(fp); } 5、以下程序的功能是:从键盘上输入一个字符串, 把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请填空。 #include main() { FILE *fp; char str[100]; int i=0; if((fp=fopen("text.txt",___________))==NULL) { printf("can't open this file.\\n");exit(0);} printf("input astring:\\n"); gest(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,100,fp); printf("%s\\n",str); fclose(fp); } 6、 下面程序由键盘输入字符,存放到文件中,用!结束输入,请在____________上填空。 #include main() { FILE *fp; char ch ; char fname[10]; printf(“Input name of file\\n”); gets(fname); if ((fp=fopen( fname, “w”))==NULL) { printf (“cannot open file\\n”); exit(0) ; } printf((“Enter data:\\n”); while(_______________!=’!’) //提示:从键盘输入一个字符,如不是! fputc(__________________) ; //将从键盘输入的字符存入打开的文件中 fclose(fp); } 7、下面程序用变量count 统计文件中字符的个数。请在____________中填写正确内容。 #include main() { FILE *fp; long count =0; if ((fp=fopen(“letter.txt”,___________))==NULL) { printf (“cannot open file\\n”); exit(0) ; } while( ! feof (fp)) //! feof (fp)---- 未到文件尾,为真 //feof()函数判断文件指针是否到文件尾,到文件尾,函数返回非0值,若未到文件尾,函数返回值0 { ___________________; //提示:从文件读入一个字符 ______________; } printf( “count =%ld\\n”,count); _________________; } 二、选择题 1、下面的程序执行后,文件testt.t中的内容是( )。 #include void fun(char *fname.,char *st) { FILE *myf; int i; myf=fopen(fname,“w” ); for(i=0;i } main() { fun(“test”,“new world”; fun(“test”,“hello,”0;) A)hello, B)new worldhello, C)new world D) hello, rld 2、有以下程序 #include main() { FILE *fp; int i=20,j=30,k,n; fp=fopen(“d1.dat”“w”); fprintf(fp,“%d\\n”,i);fprintf(fp,“%d\\n”j); fclose(fp); fp=fopen(“d1.dat”, “r”); fp=fscanf(fp,“%d%d”,&k,&n); printf(“%d%d\\n”,k,n); fclose(fp); } 程序运行后的输出结果是( ) 。 A) 20 30 B) 20 50 C) 30 50 D) 30 20 3、 若有以下定义和说明: #iinclude struct std { char num[6]; char name[8]; float mark[4]; }a[30]; FILE * fp; 设文件中以二进制形式存有许多学生的数据,且已经正确打开,文件指针定位在文件开头,若要从文件中读出30个学生的数据放入a数组中,以下正确的语句是( )。 A)fread (a , sizeof(struct std),30 , fp) ; B)fread (&a[i] , sizeof(struct std),1 , fp) ; C)fread (a +i, sizeof(struct std),1 , fp) ; D)fread (a , struct std,30 , fp) ; 4、设有以下结构体类型: struct st { char name[8]; int num; float s[4]; } student [20]; 并且结构体数组student中的元素都已经有值,若要将这些元素写到fp所指向的磁盘文件中,以下不正确的形式是( )。 A)fwrite (student , sizeof(struct st ),20 , fp) ; B)fwrite (student ,20* sizeof(struct st ),1, fp) ; C)fwrite (student , 10*sizeof(struct st ),10 , fp); D)for (i=0;i<20;i++) fwrite (student+i , sizeof(struct st ),1 , fp); 5、以下程序是将一个名为old.dat 的文本文件拷贝到一个名为new.dat的新文本文件中,请选择正确内容填空。 #include main() { FILE * fp1, *fp2 ; int c ; fp1=fopen(“old.dat”,__________); fp2=fopen(“new.dat”,__________); c=getc(fp1); while(c!=EOF) { fputc(c,fp2) ; c = fgetc(fp1); } fclose(fp1); fclose(fp2); } A) “r” B ) “r+” C) “rb” D) “rb+” A) “W+ “ B) “wb+” C) “ w” D) “wb” 三、问答题 1、 什么叫“缓冲文件系统”? 四、编程题: 1、 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test ”中保存,输入的字符串以!表示结束。 参 基础训练 一、填空题 1、是指存储在外部介质上数据的集合 ; 2、 ASCII文件和二进制文件; 3、 FILE * fp ; fp = fopen( “stu”,” r+ ”) ; 4、 fclose ( fp); 5、 ”wb+” 二、选择题: 1、B 2.、A 3、D 4、C 5、B 6、B、C 三、编程题:参 main() { FILE * fp; If ((fp=fopen(“filea.txt”,”r”))==NULL) { printf(“Cann’t open filea.txt file \\n” ); exit(0); } } 综合训练 一、填空题 1、fopen 2、"bi.dat" fp 3、 !feof(fp) 4、 fname fp 5、 "w"或"w+"或"wt"或"w+t"或"""wt+" str[i]-32 或str[i]-('a'-'A'或str[i]-'a'+'A' "r"或"r+"或"r+t"或"rt+" 6、 ( ch=getchar()) ch , fp 7、 r fgetc(fp); count++ fclose(fp); 二、选择题 1.、A 2、 A 3、A 4、C 5、 A、C 三、问答题(略) 四、编程题 参: #include main() {FILE *fp; char str[80],filename[10]; int i=0; if((fp=fopen(“test”,”w”))==NULL) { printf(“Cannot open file\\n”); exit(0); } printf(“Input a string:\\n”); gets(str); while(str[i]!=’!’) { if (str[i]>=’a’&&str[i]<=’z’) str[i]=str[i]-32; fputc(str[i],fp); i++;} fclose(fp); fp=fopen(“test”,”r”); fgets(str,strlen(str)+1,fp); printf(“%s\\n”,str); fclose(fp); }
