首页>计算机>软件水平考试>模拟试题>正文
软件设计师课后练习题:第八章习题解答

www.zige365.com 2008-11-11 17:19:20 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
2.假定在当前盘当前目录下有2个文本文件,其名称和内容如下:
    文件名 al.txt a2.txt 
    内容 121314 # 252627# 
    写出运行下列程序后的输出。
   # include 
   # include 
   void fc( FILE *);
   main()
  { FILE *fp;
   if( fP= fopen("al.txt", "r"))== NULL) 
   { printf("Can not open file! \n");
   exit(l);
   }
   else{ fc(fp); fclose(fp); }
   if(( fp = fopen("a2.txt","r"))==NULL) 
   { printf("Can not open file! \n");
   exit(1);
   }
   else { fc(fp); fclose(fp); }
   }
   void fc(fp1) 
   FILE *fpl;
   { char c;
   while((c=fgetc(fpl))!=’#’) putchar(c);
   }
      【解】程序以读方式打开文件a1.txt,若能正常打开,则调用函数fc。接着同样地,以读方式打开文件a2.txt,若能正常打开,也调用函数fc。函数企从指定的文件读入字符,在读入字符不是字符’#’情况下循环,将读人字符输出。对于文件a1.txt,程序输出121314,对于文件a2.txt,程序输出252627。所以程序输出121314252627。 
 
    8.4  程序设计题
 
  1.编一个程序,从键盘输入200个字符,存入名为"f1.txt"的磁盘文件中。
      【解】要将从键盘输入的字符写到指定的文件,程序要定义一个文件指针变量,并以写方式打开指定的文件,然后是一个循环,反复从键盘读人字符,将读人字符复制到文件。程序如下:
   # include 
   # include 
   FILE * fp;
void main()
  { int i, ch;
  if(( fp =fopen("f1.txt","w"))== NULL) {
  prinit("Can’t open file %s.\n","f1.txt"); exit(0);
  }
  printf("Enter 200 characters. \n");
  for( i = 1;i<=200;i++) {
  ch= getchar();
  if( ch== EOF) break;
  fputc( ch,fp);
  }
  fclose(fp);
  }

           2.从上一题中建立的名为"f1.txt"的磁盘文件中读取120个字符,并显示在屏幕上。
        【解】要从指定文件读入字符显示,要以读方式打开,并用循环控制从文件读人字符。程序如下:
    # include 
   # include 
    FILE * fp;
    void main()
   { int i;
     if(( fp =fopen("f1.txt","r" ))== NULL) { 
    printf("Can’t open file %s.\n","f1.txt" ); exit(0);
    } 
     for(i=l; i<=120; i++ ) {
    if(feof(fp)) break;
    putchar( fgetc(fp));
    }
    fclose(fp);
    printf("\n");
   }

          3.编一个程序,将磁盘中的当前目录下名为"ccw1.txt" 的文本文件复制在同一目录下,文件名改为"ccw2.txt"。
       【解】程序需要两个文件指针变量,一个对应读文件,另一个对应写文件。并分别用读和写方式打开两个文件。接着是以读文件状态作为循环控制条件,在读文件还未结束下循环,反复读人字符,并将读人字符复写到写文件中。程序如下:
    # include 
   # include 
    FILE * rp, * wp;
   void main()
{ int c;
    if((rp= fopen("ccw1.txt","r"))== NULL) {
     printf("Can’t open file %s.\n","ccwl.txt"); exit(0);
    }
    if((wp= fopen("ccw2.txt","w"))== NULL) {
    printf("Can’t open file %s.\n","ccw2.txt"); exit(0);
    }
    while((c= fgetc(rp))!= EOF)
    fputc( c,wp);
    fclose(wp);
    fclose(rp);
    }

         4.编程序,对名为"CCW.TXT"的磁盘文件中"@"之前的所有字符加密,加密方法是每个字节的内容减10。
      【解】程序从文件读出字符,在字符"@"未出现之前,将读出字符作加密处理后回写。加密循环受文件结束或当前字符是"@"字符控制。程序如下:
      # include 
     # include 
     # define DALTA 10
     FILE * rp;
     void main()
    { int c;
    if(( rp = fopen("ccw.txt","r+")) ==NULL ) {
    printf("Can’t open file %s.\n","ccw.txt"); exit(0);
    }
    while(( c= fgetc(rp))!= EOF) { 
    if( c ==’@’) break;
    c+= DALTA;
    fseek( rp,-1L,1 );
    fputc( c, rp);
    fseek( rp,OL,l);
    }
    fclose(rp);
     }

          5.编程序,对上一题中名为"CCW.TXT"的磁盘文件中"@"之前的所有字符解密并显示。
      【解】要编写的程序完成与上一程序功能相反的工作,将上述程序中的DALTA定义成一10即可。完整程序略。

         6.输入100个学生的信息(含学号、姓名、年龄、七门课程成绩、总分),其中学生的总分由程序计算产生。先将学生信息存入磁盘二进制数据文件student.dat中。然后再读取该文件,寻找总分最高的学生并输出该生的所有信息。
  【解】程序要定义一个结构,逐一输入学生信息,并完成学生的总分计算,将学生信息存到该结构中,然后将该结构信息存入文件。设学生信息的输入以学生的学号为负数结束。然后,程序再用循环从这文件读入学生信息,将其中总分更高的学生信息存入另一结构中。循环结束后,结构中存储的就是总分最高学生的信息。最后,显示这总分最高的学生信息。程序如下:
     # include 
     # include 
    # include 
    struct stu {
    long no;
    char name[20];
    int age;
    int score[7];
    int total;
    } student, maxs;
   FILE *fp;
    void main() 
   { char buf[120];int total,i,t;long lt;
   if((fp= fopen("student.dat","wb"))== NULL) {
    printf("Can’t open file %s.\n","student.dat" );exit(0);
    }
     printf("输入学生的学号、姓名、年龄、七门课程成绩(学号小于0结束) \n");
    while(1) {
    scanf("%ld", <); student.no = lt;
    if(student.no< 0) break;
    scanf("%s", buf); strncpy( student.name, buf,19);
    scanf("%d", &t); student.age = t;
    for( total = 0, i = 0; i < 7;i++) {
    scanf("%d", &t); student.score[i]= t;
     total+= t;
    }
    student.total= total;
    fwrite(char *) & student,sizeof student, 1, fp);
     }
    fclose(fp);
    if((fp = fopen("student.dat","rb"))== NULL) {
    printf("Can’t open file %s.\n","student.dat");exit(0);
     }
     maxs.total=-100;
     While( !feof(fp)) {
fread((char *) & student,sizeof student,l,fp);
    if( student.total> maxs.total) maxs=student;
    }
     fclose(fp);
    printf("总分最高的学生信息:\n");
    printf("学号:%ld", maxs.no);
    printf(" \t姓名:%s",maxs,name);
    printf("\t年龄::%d\n成绩:", maxs.age) 
    for( i=0; i< 7; i++) 
    printf("m",maxs.score[i]);
    printf("\nTOTAL = %d\n", maxs. total);
    }

本新闻共2页,当前在第2页  1  2  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
2009年咨询工程师考前练习-项目决策方法与实务1(08/1
2009年咨询工程师考前练习-项目决策方法与实务2(08/1
2009年咨询工程师考前练习-项目决策方法与实务3(08/1
2009年咨询工程师考前练习-项目决策分析与评价一-1(0
2009年咨询工程师考前练习-项目决策分析与评价一-2(0
2009年咨询工程师考前练习-项目决策分析与评价一-3(0