单选题以下关于fclose(fp)函数的叙述正确的是(  )。A 当程序中对文件的所有写操作完成之后,必须调用fclose(fp)函数关闭文件B 当程序中对文件的所有写操作完成之后,不一定要调用fclose(fp)函数关闭文件C 只有对文件进行输入操作之后,才需要调用fclose(fp)函数关闭文件D 只有对文件进行输出操作之后,才能调用fclose(fp)函数关闭文件

题目
单选题
以下关于fclose(fp)函数的叙述正确的是(  )。
A

当程序中对文件的所有写操作完成之后,必须调用fclose(fp)函数关闭文件

B

当程序中对文件的所有写操作完成之后,不一定要调用fclose(fp)函数关闭文件

C

只有对文件进行输入操作之后,才需要调用fclose(fp)函数关闭文件

D

只有对文件进行输出操作之后,才能调用fclose(fp)函数关闭文件

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

以下程序试图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#时结束输入和输出操作,但程序有错。 #include<stdio.h> main() { FILE *fout; char ch; fout=fopen('abc.txt','W'); ch=fgetc(stdin); while (ch!='#') { fputc (ch,fout); ch=fgetc(stdin); } fclose (fout); } 出错的原因是( )。

A.函数fopen调用形式错误

B.输入文件没有关闭

C.函数fgetc调用形式错误

D.文件指针stdin没有定义


正确答案:A
解析:stdin是标准输入设备的文件指针,不须定义直接可以使用,它随系统的启动而打开,随系统的关闭而关闭,fgetc()函数的作用是从某个文件中读取一个数据,其参数为要读取文件的文件指针,所以本题中的调用形式是正确的。fopen()函数有两个参数,第一个参数是打开的文件名,第二个参数是文件打开模式,两个参数都是字符串,本例中“fout=fopen('abc.txt','w');”语句的fopen()函数参数是错误的,应该用双引号"",正确的应改为“fout=fopen("abc.txt","w");”。所以,A选项为所选。

第2题:

已知数据文件IN68.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:如果4位数各位上的数字均是奇数,则统计出满足此条件的个数cnt,并把这些4位数按从大到小的顺序存入数组b中。最后调用函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT68.DAT文件。

注意:部分源程序已给出。

程序中已定义数组:a[200],b[200],已定义变量:cnt。

请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。

试题程序:

include<stdio.h>

define MAX 200

int a[MAX],b[MAX],cnt=0;

void jsVal()

{

}

void readDat ( )

{

int i;

FILE *fp;

fp= fopen ("IN68. DAT", "r");

for (i=0; i<MAX; i++)

fscanf (fp, "%d", &a [i])

fclose (fp);

}

void main ( )

{

int i;

readDat ( );

jsVal ( );

printf ("满足条件的数=%d\n", cnt);

for (i=0; i<cnt; i++)

printf ("%d",b[i]);

printf ("\n");

writeDat ( );

}

writeDat ( )

{

FILE *fp;

int i;

fp= fopen ("out68.dat", "w");

fprintf (fp, "%d\n", cnt);

for (i=0; i<cnt; i++)

fprintf (fp, "%din", b [i]);

fclose (fp);

}


正确答案:void jsVal() { int ithouhuntendataj; for(i=0;i200;i++) { thou=a[i]/1000; /*求四位数的千位数字*/ hun=a[i]%1000/100; /*求四位数的百位数字*/ ten=a[i]%100/10; /*求四位数的十位数字*/ data=a[i]%10; /*求四位数的个位数字*/ if(thou%2!=0 && hun%2!=0 && ten%2!=0 && data%2!=0) /*如果4位数各位上的数字均是奇数*/ { b[cnt]=a[i]; /*将满足条件的数存入数组b中*/ cnt++; /*统计满足条件的数的个数*/ } } for(i=0;icnt-1;i++) /*将数组b中的数按从大到小的顺序排列*/ for(j=i+1;jcnt;j++) if(b[i]b[j]) { data=b[i]; b[i][b[j]; b[j]=data; } }
void jsVal() { int i,thou,hun,ten,data,j; for(i=0;i200;i++) { thou=a[i]/1000; /*求四位数的千位数字*/ hun=a[i]%1000/100; /*求四位数的百位数字*/ ten=a[i]%100/10; /*求四位数的十位数字*/ data=a[i]%10; /*求四位数的个位数字*/ if(thou%2!=0 && hun%2!=0 && ten%2!=0 && data%2!=0) /*如果4位数各位上的数字均是奇数*/ { b[cnt]=a[i]; /*将满足条件的数存入数组b中*/ cnt++; /*统计满足条件的数的个数*/ } } for(i=0;icnt-1;i++) /*将数组b中的数按从大到小的顺序排列*/ for(j=i+1;jcnt;j++) if(b[i]b[j]) { data=b[i]; b[i][b[j]; b[j]=data; } } 解析:本题考查的知识点如下:
(1)“%”与“/”的使用。
(2)循环结构与判断结构的使用。
(3)数据的排序。
本题中,首先借助“%”与“/”将4位数各位上的数拆成独立的数字:将1个4位数整除1000则可得到其千位上的数字,除以1000取余再整除100则可得百位上的数字,除以100取余再整除10则可得十位上的数字,除以10取余则得个位上的数字。1个数除以2取余所得的数不等于0,则此数是奇数。题中要求将符合条件的4位数按从大到小的顺序存入数组b中,我们可以先将符合条件的4位数存入数组b,然后对b中的数进行排序。排序使用“选择排序法”。

第3题:

有以下程序,其功能是:以二进制 “ 写 ” 方式打开文件 d1.dat ,写入 1 ~ 100 这 100 个整数后关闭文件 。 再以二进制 “ 读 ” 方式打开文件 d1.dat , 将这 100 个整数读入 到 另一个数组 b 中 , 并打印输出 , 请填空。

#include <stdio.h>

main()

{ FILE *fp;

int i,a[100],b[100];

fp=fopen("d1.dat","wb");

for(i=0;i<100;i++) a[i]=i+1;

fwrite(a,sizeof(int),100,fp);

fclose(fp);

fp=fopen("d1.dat", 【 20 】 );

fread(b,sizeof(int),100,fp);

fclose(fp);

for(i=0;i<100;i++) printf("%d\n",b[i]);

}


正确答案:
(17)
答案 “ rb ”
解析: "rb" 表示只读方式打开一个二进制文件。赋值给 p, 这样循环,结点可以依次向后取值。

第4题:

函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数$ortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,捧序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。

例如,原文:dAe,BfC

CCbbAA

结果:fedCBA,

bbCCAA

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

试题程序:

include<stdio.h>

include<string.h>

include<conio.h>

char xx[50] [80];

int maxline=0;

int ReadDat(void);

void WriteDat(void);

void SortCharD()

{

}

void main()

{

clrscr();

if (ReadDat())

{

printf ("数据文件 IN35.DAT 不能打开!\n\007 ");

return;

}

SortCharD();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

char *p;

if((fp=fopen("IN35.DAT","r"))==NULL)

return 1;

while (fgets(xx[i],80,fp)!=NULL)

{

p=strchr(xx[i],'\n');

if (p) *p=0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

int i;

clrscr();

fp=fopen("OUT35.DAT","w");

for(i=0;i<maxline;i++)

{

printf ("%s\n",xx[i]);

fprintf(fp,"%s\n',xx[i]);

}

fclose(fp);

}


正确答案:void SortCharD() { int ijkstr1; char ch; for (i=O;imaxline;i++) { str1=strlen(xx[i]); /*求各行的长度*/ for(j=0;jstr1-1;j++) /*对字符按从大到小的顺序进行排序*/ for(k=j+1;kstr1;k++) if (xx[i][j]xx[i][k]) { ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch; } } }
void SortCharD() { int i,j,k,str1; char ch; for (i=O;imaxline;i++) { str1=strlen(xx[i]); /*求各行的长度*/ for(j=0;jstr1-1;j++) /*对字符按从大到小的顺序进行排序*/ for(k=j+1;kstr1;k++) if (xx[i][j]xx[i][k]) { ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch; } } } 解析:本题考查的知识点如下:
(1) 循环结构的嵌套。
(2) 字符的大小比较。
(3) 字符排序。
本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。

第5题:

请补充main 函数,该函数的功能是:把文本文件B中的内容追加到文本文件A的内容之后。

例如,文佃的内容为“I’m ten.”,文件A的内容为“I’ m a student!”,追加之后文件A的内容为“I’m a student !I’m ten.”

注意:部分源程序给出如下。

请勿改动主函数main 和其他函数中的任何内容,仅在函数main 的横线上填入所编写的若干表达式或语句。

试题程序:

include<stdio, h>

include<conio. h>

define N 80

main()

{

FILE *fp, * fp1, *fp2;

int i;

char c[N] ,t, ch;

clrscr ();

if ((fp=fopen ("A. dat ", "r") ) == NULL)

{

printf ("file A cannot be opened\n");

exit (0);

}

printf("\n A contents are : \n\n");

for (i=0; (ch=fgetc (fp)) !=EOF; i++)

{

C [i]=ch;

putchar (c [i]);

fclose (fp);

if((fp=fopen ("B. dat", "r") )==NULL)

{

printf ("file B cannot be opened\n");

exit (0);

}

printf("\n\n\nB contents are : \n\n");

for (i=0; (ch=fgetc (fp)) !=EOF; i++)

{

c [i] =ch;

putchar (c [i]);

}

fclose (fp);

if ( (fp1=fopen ("A.dat" ,"a"))【 】(fp2

=fopen ("B. dat", "r") ) )

{

while ( (ch=fgetc (fp2)) !=EOF)

【 】;

}

else

{

printf("Can not open A B !\n");

}

fclose (fp2);

fclose (fp1);

printf ("\n***new A contents***\n\n");

if ( ( fp=fopen ("A. dar", "r") )==NULL)

{

printf ("file A cannot be opened\n");

exit (0);

}

for (i=0; (ch=fgetc (fp)) !=EOF;i++)

{

c [i] =ch;

putchar (c [i] );

}

【 】;

}


正确答案:&& fputc (chfp1) fclose (fp)
&& fputc (ch,fp1) fclose (fp) 解析:第一空:当两个文件都被成功打开时,才能将文件B中的内容追加到文件A中,所以应该用“与”运算符——“&&”。第三空:fputc()函数用于将一个字符写到磁盘文件上去,调用形式为:fputc (要输出的字符,文件指针);。第三空:对一个文件进行操作后,应该关闭它,以防它再被误用。调用形式为:fclose(文件指针);。

第6题:

当正常执行了文件关闭操作时,fclose函数的返回值是( )。

A.-1

B.随机值

C.0

D.1


参考答案C

第7题:

已知数据文件INI.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数isVal(),其功能是:如果4位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的数的个数cnt,并把这些4位数按从大到小的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT1.DAT文件中。

注意:部分源程序已给出。

程序中已定义数组:a[200],b[200],已定义变量:cnt。

请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。

试题程序:

include <stdio.h>

define MAX 200

int a[MAX], b[MAX], cnt = 0;

void jsVal()

{

}

void readDat()

{

int i;

FILE *fp;

fp = fopen("IN1.DAT", "r");

for(i = 0; i <MAX; i++) fscanf(fp, "%d", ia[i]);

fclose (fp);

}

main ( )

{

int i;

readDat ();

jsVal ();

printf("满足条件的数=%d\n", cnt);

for(i = 0; i < cnt; i++) printf("%d ", b[i]);

printf ("\n");

writeDat ();

}

writeDat ( )

{

FILE *fp;

int i;

fp = fopen("OUT1.DAT", "w");

fprintf(fp, "%d\n", cnt);

for(i = 0; i < cnt; i++) fprintf(fp, "%d\n", b[i]);

fclose (fp);

}


正确答案:void jsVal() { int bb[4]; int ijkflag; for (i=O; i200;i++) { bb[0]=a[i]/1000; /*求四位数的千位数字*/ bb[1]=a[i]%1000/100; /*求四位数的百位数字*/ bb[2]=a[i]%100/10; /*求四位数的十位数字*/ bb[3]=a[i]%10; /*求四位数的个位数字*/ for (j=0;i4;i++) { if (bb[j]%2==0) /*如果各位上的数字均是0或2或4或6或8*/ flag=1; /*则置标志位flag为1*/ else(flag=O;break;) /*否则置flag为0退出循环*/ } if(flag==1) /*将满足条件的数存入数组b中并统计满足条件 的个数cnt*/ {b[cnt]=a[i];cnt++;) } for(i=O;icnt-1;i++) /*把数组b中的数按从大到小的顺序排序*/ for(j=i+1;icnt;i++) if (b[i]b[j]) {k=b[i];b[i]=b[j];b[i]=k;) }
void jsVal() { int bb[4]; int i,j,k,flag; for (i=O; i200;i++) { bb[0]=a[i]/1000; /*求四位数的千位数字*/ bb[1]=a[i]%1000/100; /*求四位数的百位数字*/ bb[2]=a[i]%100/10; /*求四位数的十位数字*/ bb[3]=a[i]%10; /*求四位数的个位数字*/ for (j=0;i4;i++) { if (bb[j]%2==0) /*如果各位上的数字均是0或2或4或6或8*/ flag=1; /*则置标志位flag为1*/ else(flag=O;break;) /*否则置flag为0,退出循环*/ } if(flag==1) /*将满足条件的数存入数组b中,并统计满足条件 的个数cnt*/ {b[cnt]=a[i];cnt++;) } for(i=O;icnt-1;i++) /*把数组b中的数按从大到小的顺序排序*/ for(j=i+1;icnt;i++) if (b[i]b[j]) {k=b[i];b[i]=b[j];b[i]=k;) } 解析:根据题意可知,函数JsVal()要实现两个功能:一是找出满足条件的那些数,并存放在数组b中;二是对数组b中的数进行从大到小的排序。
首先来实现找出各位上的数字均是0或2或4或6或8”(即每一位上的数字都是偶数)的位数的功能。利用一个for循环来不断从数组a中取出4位数,并对取出的数进行条件判断。由于这里涉及到要对位数的每一位进行判断,因此,要借助数组bb来临时存放取得的每一位上的数字值,“bb[0]=a[i]/1000;bb[1]=a[i]%1000/100;bb[2]=a[i]%100/10;bb[3]=a[i]%10;”这4条语句就可以完成在数组bb中依次存放当前被判断的4位数的位上的数字值、百位上的数字值、十位上的数字值,以及个位上的数字值。之后,对所得该数的每一位的值进行是否为偶数的判断,只要有一位上的数字是偶数,就使标志变量flag的值置1,否则为0,这样最终根据flag的值来决定是否要放到数组中去,变量cnt用来统计数组bb中元素的个数。将所有满足条件的数取出后利用选择法对其进行排序,即用当前元素依次和它后面的元素进行比较,发现有大于该数的数,就将这两数进行交换。

第8题:

当顺利执行了文件关闭操作时,fclose函数的返回值是

A.-1

B.TRUE

C.0

D.1


正确答案:C

第9题:

以下程序打开新文件f.txt,并调用字符输出函数将a数组中的字符写入其中,请填空。

include<stdio.h>

main( )

{________*fp;

char a[5]=(’1’,’2’,’3’,’4’,’5’),i;

fp=fopen(”f.txt”,”w”);

for(i=0;i<5;i++)fputc(a[i],fp);

fclose(fp);

}


正确答案:File
File 解析:欲操作文件,所以需要创建一个文件指针,所以应填File。

第10题:

函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数SortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。

例如,原文:dAe,BfC

CCbbAA

结果:fedCBA,

bbCCAA

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意;部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数WrteDat()的内容。

试题程序:

include<Stdio.h>

include<String.h>

include<conio.h>

char xx[50][80];

int maxline=0;

int ReadDat(void);

void WriteDat(void);

void SortCharD()

{

}

void main()

{

Clrscr();

if (ReadDat())

{

printf("数据文件 IN35.DAT不能打开!\n\007");

return;

}

SortChar D();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

Char*p;

if((fp:fOpen("IN35.DAT","r"))==NULL)

return 1;

while (fgets(xX[i],80,fp)!=NULL)

{

p=strchr(xX[i],"\n");

if (p) *p:0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

int i;

Clrscr();

fp:fopen("OUT35.DAT","w");

for(i:0;i<maxline;i++)

{

printf("%s\",xx[i]);

fprintf(fp,"%s\n",xx[i]);

}

fclose(fp);

}


正确答案:void SortCharD() { int i j k strl; char ch; for (i=0;i { strl=strlen (xx [i] ); /*求各行的长度*/ for (j=0; j for (k=j+l; k if (xx[i] [j] { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } }
void SortCharD() { int i, j, k, strl; char ch; for (i=0;i { strl=strlen (xx [i] ); /*求各行的长度*/ for (j=0; j for (k=j+l; k if (xx[i] [j] { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } } 解析:本题考查的知识点如下:
(1)循环结构的嵌套。
(2)字符的大小比较。
(3)字符排序。
本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数
strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整
型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。

更多相关问题