高级语言程序设计第八章习题参考答案

作者名:不详 来源:网友提供 06年6月8日

 

 第8章习题参考答案

一、单项选择题

   ③②③

二、填充题

1、 文件型指针变量 、 stdio.h

2、 rewind()

3、 (!feof(fp))

三、程序分析题

1、 把c: cp1.c中的前1000个字符复制到a:p1.c中,若c: cp1.c不足1000个,则按实际字符数

2、 121314252627

四、程序设计题

1、编一个程序,从键盘输入200个字符,存入名为“f1.t”的磁盘文件中。

#include "stdio.h"
  #define N 200
  main()
  {
   FILE *fp;
   int i;
   if((fp=fopen("f1.t","w"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   for(i=1;i<=N;i++)
   fputc(getchar(),fp);
  }

2、从上一题中建立的名为“f1.txt”的磁盘文件中读取120个字符,并显示在屏幕上。

#include "stdio.h"
  #define N 120
  main()
  {
   FILE *fp;
   int i;
   if((fp=fopen("f1.t","r"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   for(i=1;i<=N;i++)
    if(feof(fp))break;
    else putchar(fgetc(fp));
   printf(" ");
  }

3、编一个程序,将磁盘中当前目录下名为“ccw1.txt”的文本文件复制在同一目录下,
文件名为“ccw2.txt”。

#include "stdio.h"
  main()
  {
   FILE *fp1,*fp2;
   if((fp1=fopen("ccw1.txt","r"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   if((fp2=fopen("ccw2.txt","w"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   while(!feof(fp1))
   fputc(fgetc(fp1),fp2);
  }

4、编一个程序对名为“CCW.TXT”的磁盘文件中“@”之前的所有字符加密,加密方法是每个字节的内容减去10。

#include "stdio.h"
  main()
  {
   FILE *fp;
   char c;
   if((fp=fopen("CCW.TXT","r+"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   while(!feof(fp))
   {
    c=fgetc(fp);
    if(c=='@') break;
    else c-=10;
    fseek(fp,-1l,SEEK_CUR);
    fputc(c,fp);
    fseek(fp,0l,SEEK_CUR);
   }
  }

5、编一个程序对上一题中名为“CCW。TXT”的磁盘文件中“@”字符之前的所有字符解密并显示。

#include "stdio.h"
  main()
  {
   FILE *fp;
   char c;
   if((fp=fopen("CCW.TXT","r+"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   while(!feof(fp))
   {
    c=fgetc(fp);
    if(c=='@') break;
    else c+=10;
    putchar(c);
    fseek(fp,-1L,SEEK_CUR);
    fputc(c,fp);
    fseek(fp,0L,SEEK_CUR);
   }
  }


6、输入100个学生的信息(含学号、姓名、年龄、7科成绩、总分),统计所有学生的总分,然后存入磁盘二进制数据文件student.dat中。然后再读取该文件,寻找总分最高的学生并输出该生的所有信息。

#include "stdio.h"
  #define N 100
  typedef struct
  {
   long number;
   char name[8];
   int age;
   float score[7];
   float total;
  }STUDENT;

  main()
  {
   STUDENT stu[N],*pmax;
   FILE *fp;
   int i,j;
   for(i=0;i<N;i++)             /*输入学生的信息*/
   {
    scanf("%ld%s%d",&stu[i].number,stu[i].name,&stu[i].age);
    for(j=0;j<7;j++)
     scanf("%f",&stu[i].score[j]);
   }

  for(i=0;i<N;i++)            /*计算总分*/
   {
    stu[i].total=0;
    for(j=0;j<7;j++)
    stu[i].total+=stu[i].score[j];
   }

  if((fp=fopen("student.dat","wb"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   fwrite(stu,sizeof(STUDENT),N,fp); /*把学生信息写入文件*/
   fclose(fp);

  if((fp=fopen("student.dat","rb"))==NULL)
   {
    printf("file can not open ");
    exit(0);
   }
   fread(stu,sizeof(STUDENT),N,fp);         /*把学生信息从文件中读出来*/
   fclose(fp);

  pmax=stu;        /*把最高分指针指向第1个学生*/
   for(i=1;i<N;i++)    
    if(pmax->total<stu[i].total)    /*把当前最高分和当前学生比较*/
     pmax=&stu[i];
   printf("学号:%ld 姓名:%s 年龄:%d ",pmax->number,pmax->name,pmax->age);
   printf("各科成绩:");
   for(i=0;i<7;i++)
    printf("%6.1f",pmax->score[i]);
   printf(" 总分:%f ",pmax->total);
  }