• C语言程序设计教程(第三版)李凤霞 第十一章课后习题答案


    第十一章 文件
    一、单项选择题
    1、在进行文件操作时,写文件的一般含义是( )。
    A)将计算机内存中的信息存入磁盘 B)将磁盘中的信息存入计算机内存
    C)将计算机CPU中的信息存入磁盘 D)将磁盘中的信息存入计算机CPU
    2、C语言中标准输入文件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:user\text.txt B)c:\user\text.txt
    C)“c:\user\text.txt” D)“c:\user\text.txt”
    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)删除
    11、C语言可以处理的文件类型是( )。
    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)答案B和C正确
    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中的字符输出到高文件中,可以用语句有________ 、 ________ 、________ 和 ________ 。
    4、feof函数可以用于________和________文件,它用来判断即将读入的是否为_______,若是,函数返回值为________。(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(“abd.txt”,“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 {scanf(“%d%s”,&n,xm);
    for(j=0;j<5;j++)
    scanf(“%d”,&sc[i][j]);
    }
    fp=fopen(“abc.txt”,“w”);
    for(i=0;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(“abd.txt”,“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.从键盘输入一文本文件,将该文本写入磁盘文件disk.txt中,统计磁盘文件中的字母、数字、空白和其它字符的个数,要求:
    1)将统计结果显示到屏幕上;
    2)将输入的文件输出到打印机上;
    3)将统计结果写入磁盘文件total.txt中。
    参考程序:(未考虑输出到打印机)
    /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(“disk.txt”,“w”);
    for(i=0;i {gets(s[i]);
    fputs(s[i],fp1);
    for(j=0;j if(s[i][j]>=‘0’&&s[i][j]<=‘9’)dd++;
    else if(s[i][j]>=‘A’&&s[i][j]<=‘Z’)cd++;
    else if(s[i][j]>=‘a’&&s[i][j]<=‘z’)cd++;
    else if(s[i][j]==32)sp++;
    else other++;
    }
    fp2=fopen(“total.txt”,“w”);
    fprintf(fp2,“cd=%d,dd=%d,sp=%d,other=%d\n”,cd,dd,sp,other);
    printf(“cd=%d,dd=%d,sp=%d,other=%d\n”,cd,dd,sp,other);
    fclose(fp1);fclose(fp2);
    }

    3.已有一个存放数千种仓库物质信息的文件CK,每个信息元素含两个内容:物质编号kno和库存量KNOM。请编程通过检查全库物质的库存量,建立一个新的文件XK,它包含所有库存量大于100的物质的编号和库存量。
    参考程序:
    /p360_3.c/
    #include “stdio.h”
    main()
    {int n,m;
    FILE *fp1,*fp2;
    fp1=fopen(“ck.txt”,“r”);
    fp2=fopen(“xk.txt”,“w”);
    while(feof(fp1)==0)
    {fscanf(fp1,“%d,%d”,&n,&m);
    printf(“%4d%4d\n”,n,m);
    if(m>100)fprintf(fp2,“%d,%d\n”,n,m);
    }
    fclose(fp1);fclose(fp2);
    }
    4、已知一个学生的数据库包含如下信息:学号(6为整数)、姓名(3个字符)、年龄(2为整数)和住址(10个字符),请编写程序由键盘输入10个学生的数据,将其输出到磁盘文件中;然后再从该文件中读取这些数据并显示在屏幕上。
    /p361_4.c/
    #include “stdio.h”
    #define N 5
    struct stud
    {char num[6];
    char name[4];
    int age;
    char addr[10];
    };
    main()
    {int n=0;
    struct stud st[N];
    FILE *fp;
    fp=fopen(“xssj.txt”,“w+”);
    printf(“num[6],name[3],age,addr[10]:\n”);
    while(n {scanf(“%s%s%d%s”,st[n].num,st[n].name,&st[n].age,st[n].addr);
    fwrite(&st[n],sizeof(st[n]),1,fp);
    n++;
    }
    rewind(fp);n=0;
    while(n {fread(&st[n],sizeof(st[n]),1,fp);
    printf(“%s,%s,%d,%s\n”,st[n].num,st[n].name,st[n].age,st[n].addr);
    n++;
    }
    fclose(fp);
    }
    5、已知有两个有序的整数文件F和G,请编一程序,将它们合并为一个新的有序的文件。
    /p361_5.c/
    #include “stdio.h”
    main()
    {FILE *p1,*p2;
    int a[10],b[10],c[20],k,n1,n2,i,j;
    p1=fopen(“f.txt”,“r”);
    p2=fopen(“g.txt”,“r”);
    n1=0;
    fscanf(p1,“%d,”,&k);
    while(feof(p1)==0)
    {a[n1++]=k;
    fscanf(p1,“%d,”,&k);
    }
    n2=0;
    fscanf(p2,“%d,”,&k);
    while(feof(p2)==0)
    {b[n2++]=k;
    fscanf(p2,“%d,”,&k);
    }
    fclose(p1),fclose(p2);
    k=0;i=0;j=0;
    while(i while(j for(i=0;i for(j=0;j if(c[j] p1=fopen(“h.txt”,“w”);
    for(i=0;i fprintf(p1,“%4d”,c[i]);
    fclose(p1);
    }
    6、读入指定的C源程序文件,从文件中的单词中检索出六种C语言的关键字:if、char、int、else、while、和return。统计并输出每个关键字在文件中出现的次数。规定:C源程序文件中的单词是一个空格、’\t’或’\n’
    结束的字符串。

  • 相关阅读:
    开发板和电脑相互ping,电脑可以ping开发板,但是开发板ping不通电脑
    【PC】2023年11月商店更新
    6.Dropout应用
    248: vue+openlayers 以静态图片作为底图,并在上面绘制矢量多边形
    C++入门基础(下)
    普洛斯荣获两项“数据中心绿色等级评估”5A级认证
    IIS配置优化
    C/C++知识总结
    订水商城H5实战教程-04用户注册
    as86 - 8086..80386 处理器的汇编器
  • 原文地址:https://blog.csdn.net/weixin_44071904/article/details/126828848