第十二章 文 件
1.系统的标准输入文件是
A)键盘 B)显示器 C)软盘 D)硬盘
2.以下可作为函数fopen中第一个参数的正确格式是
A)c:user\text.txt B)c:\user\text.txt
C)"c:\user\text.txt" D)"c:\\user\\text.txt"
3.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是
A)"ab " B)"wb " C)"rb " D)"ab"
4.若用"a "方式打开一个已存在的文件,则以下叙述正确的是
A) 文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作
B) 文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作
C) 文件打开时,原有文件内容被删除,只可作写操作
D) 以上各种说法皆不正确
5.当顺利执行了文件关闭操作时,fclose函数的返回值是
A)-1 B)TRUE C)0 D)1
6.已知函数的调用形式:fread(bufferb,size,countb,fp);其中buffer代表的是
A) 一个整型变量,代表要读入的数据项总数
B) 一个文件指针,指向要读的文件
C) 一个指针,指向要读入数据的存放地址
D) 一个存储区,存放要读的数据项
7.fscan函数的正确调用形式是
A) fscan(fp ,格式字符串 ,输出表列);
B) fscan(格式字符串 ,输出表列,fp)
C) fscan(格式字符串 ,文件指针 ,输出表列);
D) fscan(文件指针 ,格式字符串 ,输出表列);
8.fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是
A)只写 B)追加 C)读或读写 D)答案B和C都正确
9.若调用fputc函数输出字符成功,则其返回值是
A)EOF B)1 C)0 D)输出的字符
10.若要用下面的程序片段使指针变量P指向一个存储整型变量的动态存储单元:
int *P;
P = malloc( sizeof( int));
则应填入
A)int B)int * C)( * int ) D)(int *)
11.下面的程序调用getone函数开辟一个动态存储单元 ,调用assone函数把数据输入此动态存储单元 ,调用outone函数输出此动态存储单元中的数据。请填空。
# include <stdio.h>
getone( int **s)
{ *s=(int *)malloc(sizeof(int)) ;}
assone( int *a)
{ scanf("%d" ,【 】 ) ;}
outone( int *b)
{ printf("%d\n" , 【 】 ) ;}
main( )
{ int *p ;
getone(&p) ;assone(p) ;outone(p) ;}
12.请读程序:
void fun(float *pl ,float *p2 ,float *s)
{ s=(float *)malloc(1,sizeof( float));
*s= *pl *(p2 ) ;}
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0}, *s=a;
fun(a,b,s);
printf("%f\n", *s);}
上面程序的输出结果是
A)11.100000 B)12.100000 C)21.100000 D)1.100000
13.若要使指针p指向一个double类型的动态存储单元,请填空。
p=【 】 malloc(sizeof(double));
14.若fp是指向某文件的指针,且已读到该文件的末尾,则C语言函数feof( fp)的返回是
A)EOF B)-1 C)非零值 D)NULL
15.下面的的程序用来统计文件中字符的个数,请填空。
main()
{ FILE *fp;
long num=0;
if ((fp=fopen("fname.dat","r"))= = 【 】)
{ printf("Can'topen file! \n"); exit(0);}
while【 】
{ fgetc(fp); num ;}
printf("num=%d\n",num);
【 】}
16.以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请填空。
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); }
17.设有如下程序:
# include <stdio.h>
main(int argc ,char *argv[ ] )
{ FILE *fp ;
void fc() ;
int i=1 ;
while( --argc>0)
if((fp=fopen(argv[i ] ,"r"))==NULL)
{ printf("Cannot open file! \n") ;exit(1) ;}
else { fc(fp) ; fclose(fp) ; } }
void fc( FILE *ifp)
{ char c ;
while((c=getc(ifp))!='#') putchar(c-32) ;}
上述程序经编译、连接后生成可执行文名为cpy.exe。假定磁盘上有三个文本文件 ,其文件名和内容分别为:
文件名 内容
a aaaa#
b bbbb#
c cccc#
如果在DOS下键入
cpy a b c<CR>
则程序输出【 】。
18.在C程序中,可把整型数以二进制形式存放到文件中的函数是
A) fprintf函数 B) fread函数
C) fwrite函数 D) fputc函数
19.假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行: prg hello good<回车>后,程序的输出结果是
A)hello good B)hg C)hel D)hellogood
main()(int argc, char *argv[])
{ int i;
if(argc<-0)return;
for(i=1;i<argc;i ) printf("%c", *argv[i]);}
20.以下函数creatlist用来建立一个带头节点的单链表,链表的结构如下图所示,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回,链表最后一个节点的next域放入NULL,作为链表结束标志。data为字符型数据域,next为指针域。读入时字符以#表示输入结束(#不存入链表)。请填空。
struct node
{ char data;
struct node * next; };
…
【 】 creatlist( )
{ struct node * h,* s,* r; char ch;
h=(struct node *)malloc(sizeof(struct node));
r=h;
ch=getchar( );
{ s=(struct node *)malloc(sizeof(struct node));
s->data=【 】;
r->next=s; r=s;
ch=getchar( ); }
r->next=【 】 ;
return h; }
21.标准函数 fgets(s , n , f) 的功能是
A) 从文件f中读取长度为n的字符串存入指针s所指的内存
B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
C) 从文件f中读取n个字符串存入指针s所指的内存
D) 从文件f中读取长度为n-1的字符串存入指针s所指的内存
22.若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。
a[0] a[1] a[2] a[3] a[4]
┌──┬──┬──┬──┬──┐
│22 │33 │44 │55│ 66│
└──┴──┴──┴──┴──┘
(1)若p已指向存储单元a[1]。通过指针p,给s赋值,使s指向最
后一个存储单元a[4]的语句是 【 】 。
(2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的
值是【 】。
23.以下程序运行后,输出结果是
A)ABCDEFG B)CDG C)abcdefgh D)abCDefGh
main( )
{ static char a[ ]="ABCDEFGH",b[ ]="abCDefGh";
char *p1,*p2;
int k ;
p1=a; p2=b;
for(k=0;k<8;k )
if(*(p1 k)= =*(p2 k))
printf("%c",*(p1 k));
printf("\n"); }
24.在对文件进行操作的过程中 ,若要求文件的位置回到文件的开头 ,应当调用的函数是【 】函数。