知ing

大学C/C++语言程序设计实验教程

阳小华 罗晨晖 编 / 电子工业出版社

王大胆 上传

查看本书

实验13  文件的使用

任务1  文件的读、写操作

1.建立一个名为abc的文件,并将从键盘输入的字符存入该文件,当键盘输入结束时关闭该文件,填空完成下面程序。

#include  <stdio.h>

main( )

{  FILE *fp;

   char ch;

   fp=  fopen  ("abc",  "w"  );

   do {

        ch=getchar ( );

        fputc ( ch, fp);

   } while ( ch!= EOF);

   fclose (fp);

}

2.从键盘输入一个以#结束标志的字符串,将它存入指定的文件中,填空完成下面程序。

#include<stdio.h>

main( )

{

   FILE *fp;

   char ch,fn[10];

   printf("\nInput the file name: ");

   scanf("%s", fn);

   if( (  fp=fopen(fn,"w")  )==NULL)

{

printf("\nCannot create file");

exit(1);

}

   ch=getchar( );

   while (  (ch=getchar())!='#'  )

fputc(ch, fp);

  close(fp);

}

3.文件复制,文件名来自main( )函数,填空完成下面程序。

#include<stdio.h>

void  file_copy(FILE *fout, FILE *fin)

{  char k;

   do{

    k=fgetc(  fin  );

    if(feof(fin))

  break;

    fputc(  k,fout  );

     }while( 1 );

}

void  main(int argc, char  *argv[ ])

{  FILE  *fp1, *fp2;

   if( argc !=3)   return;

   if((fp1=fopen(argv[2], "rb"))==NULL)    return;

  fp2=  fopen(argv[1],"wb")  ;

  file_copy (fp2,fp1);

  fclose(fp1);

  fclose(fp2);

}

 

任务2  文件综合程序设计

设计创建原始成绩表b1.txt,从文件b1.txt中取出成绩,排序后,按降序存放b2.TXT中,并输出前五名成绩报表。

参考代码如下:

#include "stdio.h"

#define N 10

struct student

{

    int num;

    char name[20];

    int score[3];  

    float average;

};

void sort(struct student stu[]);

void print(FILE *fp, struct student stu[]);

void printtopfive(FILE *fp, struct student stu[]);

void main( )

{

    struct student s[N];

    int i;

    FILE *fp1,*fp2;

    char ch;

    if((fp1=fopen("c:\\b1.txt","r"))==NULL)

       {

       printf("不能打开文件c:\\b1.txt");

       exit(1);

       }

    if((fp2=fopen("c:\\b2.txt","w"))==NULL)

       {

       printf("不能打开文件c:\\b2.txt");

       exit(1);

       }

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

       {

          fscanf(fp1,"%d%s%d%d%d",&s[i].num,s[i].name,&s[i].score[0],

                    &s[i].score[1],&s[i].score[2]);

          s[i].average=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3.0;

       }

    fprintf(fp2,"原始成绩报表\n");

    print(fp2,s);

    sort(s);

    fprintf(fp2,"排序之后的成绩报表\n");

    print(fp2,s);

    fprintf(fp2,"前五名成绩报表\n");

    printtopfive(fp2,s);

}

void sort(struct student stu[])

{   int i,k,j;

    struct student t;

    for(i=0;i<N-1;i++)

    {   k=i;

        for(j=i+1;j<N;j++)

          {   if(stu[k].average<stu[j].average)k=j; }

              if(k!=i)

          {

              t=stu[i];

              stu[i]=stu[k];

              stu[k]=t;

          }

   }

}

void print(FILE *fp, struct student stu[])

{

    int i;

    fprintf(fp,"StudentID  StudentName   Score1  Score2  Score3  Average\n");

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

         fprintf(fp,"%-10d%-12s%8d%8d%8d%8.1f\n",stu[i].num,stu[i].name,

         stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].average);

}

void printtopfive(FILE *fp, struct student stu[])

{

    int i;

    fprintf(fp,"StudentName   Average\n");

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

         fprintf(fp,"%-12s%8.1f\n",stu[i].name,stu[i].average);

}

 


查看更多