第十一章  文件
一、单项选择题
1、在进行文件操作时,写文件的一般含义是(  )。
A)将计算机内存中的信息存入磁盘        B)将磁盘中的信息存入计算机内存
C)将计算机CPU中的信息存入磁盘        D)将磁盘中的信息存入计算机CPU
2C语言中标准输入文件stdin是指(  )。
A)键盘      B)显示器      C)鼠标      D)硬盘
3、系统的标准输出文件stdout是指(  )。
A)键盘      B)显示器      C)鼠标      D)硬盘
4、在高级语言中对文件操作的一般步骤是(  )。
A)打开文件-操作文件-关闭文件    B)操作文件-修改文件-关闭文件
C)读写文件-打开文件-关闭文件    D)读文件-写文件-关闭文件
5、要打开一个已存在的非空文件“file”用于修改,正确的语句是(  )。
A)fp=fopen("file","r");    B)fp=fopen("file","a+");
C)fp=fopen("file","w");    D)fp=fopen("file","r+");
6、以下可作为函数fopen中第一个参数的正确格式是(  )。
A)c:      B)c:\
C)"c:\"    D)"c:\\user\\"
7、若执行fopen函数时发生错误,则函数的返回值时(  )。
A)地址值      B)0      C)1      D)EOF
8、为了显示一个文本文件的内容,在打开文件时,文件的打开方式应当时(  )。
A)"r+"      B)"w+"      C)"wb+"      D)"ab+"
9、若要fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该是(  )。
A)"ab+"    B)"wb+"    C)"rb+"    D)"ab"
10、在C语言中,从计算机内存中将数据写入文件中,称为(  )。
A)输入      B)输出      C)修改      D)删除
11C语言可以处理的文件类型是(  )。
A)文本文件和数据文件      B)文本文件和二进制文件
C)数据文件和二进制文件    D)以上答案都不对
12、下列关于文件的结论中正确的是(  )。
A)对文件操作必须先关闭文件        B)对文件操作必须先打开文件
C)对文件操作顺序没有统一规定      D)以上三种答案都不完全
13、当顺利执行了文件关闭操作时,fclose函数的返回值是(  )。
A)-1      B)TRUE      C)0      D)1
14、使用fgetc函数,则打开文件的方式必须是(  )。
A)只读    B)追加    C)读或读/    D)答案BC正确
15、若调用fputc函数输出字符成功,七返回值是(  )。
A)EOF      B)1      C)0    D)输出的字符
16、利用fseek函数可以(  )。
A)改变文件的位置指针        B)实现文件的顺序读写
C)实现文件的随机读写        D)以上答案均正确
17、执行fopen函数时,ferror函数的初值是(  )。
A)TRUE    B)-1    C)1      D)0
二、填空题
1、在C程序中,数据可以以________________两种形式的代码存放。(ASCII  二进制)
2、若已定义pf是一个FILE类型的文件指针,已知待输出的文本文件的路径和文件名是A:;则要使佩服指向文件的打开语句是_______________________________
    (pf=fopen("A:\zh04\data\txfile.dat","r");)
3、若fp已经指向一个指定的文件,则将字符变量ch中的字符输出到高文件中,可以用语句有________________________________
4feof函数可以用于________________文件,它用来判断即将读入的是否为_______,若是,函数返回值为________。(ASCII  二进制  文件结束标志  0
三、编程题
1、 某班有N个学生,每个学生有5门课的成绩。从键盘输入每个学生的学号、姓名和各门课的成绩,然后计算出每门课全班的平均成绩及每个学生的平均成绩,并将所有数据存放再磁
盘文件ABC中。文件结构有编程者自己设计。
解:#include "stdio.h"
main()
{FILE *fp;
int num,mark[5],i,sum,n=0;
float av,t[5]={0};
char name[20];
if((fp=fopen("","w"))==NULL)  /*打开数据文件*/
  {printf("Cannot open file\n");
  exit(0);}
printf("input num:");
scanf("%d",&num); /*输入第一各学生学号*/
while(num>0) 
{printf("Input neme:");
  scanf("%s",name); /*输入姓名*/
  printf("Input marks for 5 course:\n");
  sum=0;
  for(i=0;i<5;i++)  /*输入5门课成绩*/
  {scanf("%d",&mark[i]);
    sum=sum+mark[i];
    t[i]=t[i]+mark[i];  /*累计各课成绩总分*/
    }
  av=sum/5,n++; /*计算每个学生平均分,统计学生人数*/
  fprintf(fp,"%5d,%s",num,name); /*学号、姓名写入文件*/
  for(i=0;i<5;i++)  /*某个学生各科成绩和平均分写入文件*/
  fprintf(fp,",%d",mark[i]);
  fprintf(fp,",%6.2f\n",av);
  printf("Input num:");
  scanf("%d",&num);  /*输入下一个学生学号*/
  }
  fprintf(fp,"\n");
  for(i=0;i<5;i++) /*输出全班各科平均分*/
  fprintf(fp,"%7.2f",t[i]/n);
fclose(fp);
}
/*p360_1.c*/
#define N 6
#include "stdio.h"
main()
{int i,j,n,sc[N][5];
FILE *fp;
char xm[10];
for(i=0;i<N;i++)
  {scanf("%d%s",&n,xm);
  for(j=0;j<5;j++)
    scanf("%d",&sc[i][j]);
  }
fp=fopen("","w");
for(i=0;i<N;i++)
  fprintf(fp,"%5d%s%4d%4d%4d%4d%4d\n",n,xm,sc[i][0],sc[i][1],sc[i][2],sc[i][3],sc[i][4]);
fclose(fp);
}
/*p360_1a.c*/
#include "stdio.h"
main()
{FILE *fp;
int num,mark[5],i,sum,n=0;
float av,t[5]={0};
char name[20];
if((fp=fopen("","w"))==NULL)
  {printf("Cannot open file\n");
  exit(0);}
printf("input num:");
scanf("%d",&num);
while(num>0)
{printf("Input neme:");
  scanf("%s",name);
  printf("Input marks for 5 course:\n");
  sum=0;
  for(i=0;i<5;i++)
  {scanf("%d",&mark[i]);
    sum=sum+mark[i];
    t[i]=t[i]+mark[i];
    }
  av=sum/5,n++;
  fprintf(fp,"%5d,%s",num,name);
  for(i=0;i<5;i++)
  fprintf(fp,",%d",mark[i]);
  fprintf(fp,",%6.2f\n",av);
  printf("Input num:");
  scanf("%d",&num);
  }
  fprintf(fp,"\n");
  for(i=0;i<5;i++)
  fprintf(fp,"%7.2f",t[i]/n);
fclose(fp);
}
2.从键盘输入一文本文件,将该文本写入磁盘文件中,统计磁盘文件中的字母、数字、空白和其它字符的个数,要求:
1)将统计结果显示到屏幕上;
c语言程序设计教材答案2)将输入的文件输出到打印机上;
3)将统计结果写入磁盘文件中。
参考程序:(未考虑输出到打印机)
/*P360_2.c*/
#define M 5
#define N 200
#include "stdio.h"
main()
{char s[M][N];
int i,j,dd,cd,sp,other;
FILE *fp1,*fp2;
dd=cd=sp=other=0;
fp1=fopen("","w");
for(i=0;i<M;i++)
  {gets(s[i]);
  fputs(s[i],fp1);
  for(j=0;j<strlen(s[i]);j++)
    if(s[i][j]>='0'&&s[i][j]<='9')dd++;
    else if(s[i][j]>='A'&&s[i][j]<='Z')cd++;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。