实验七作业

part 2 验证性实验2

未修改前结果:

修改后:

所以修改后没有区别。

2 文本文件和二进制文件的区别

文本文件:一个字节存放asc2码,代表一个字符。

二进制文件:把内存中的数据按内存的储存形式原样输出到存储器存放,可节省外存空间和储存时间,但不能直接输出字符格式,不能直接用记事本打开。

 #include<stdio.h>
  #include<stdlib.h>
 const int n=10;
  typedef struct student {
      int num;
      char name[20];
      int score;
    }STU;
    int main(){
     int i;
     STU st[n];
    FILE *hp;
     hp=fopen("file4.dat","r");
     if(hp==NULL){
         printf("fail to open file4.dat\n");
     }
     for(i=0;i<n;i++){
         fread(&st[i],sizeof(STU),n,hp); //使用块读写函数读取二进制文本中内容 
     }
     fclose(hp); 
     FILE *fp;
     fp=fopen("file4_1.txt","w");
     if(fp==NULL){
         printf("fail to open file4_1.txt\n");
     } 
     for(i=0;i<n;i++){
         printf("%d %s %d\n",st[i].num,st[i].name,st[i].score);
     }
     fwrite(st, sizeof(STU), n, fp);
     fclose(fp);
     return 0;
 } 

  

编程练习:

#include <stdio.h>
   #include <string.h>
   #include <stdlib.h>
   const int N = 10;
   
   // 定义结构体类型struct student,并定义其别名为STU 
   typedef struct student {
       long int id;
       char name[20];
     float objective;    /*客观题得分*/
      float subjective;    /*操作题得分*/
      float sum;
      char level[10];    
  }STU; 
  
  // 函数声明
  void input(STU s[], int n);
  void output(STU s[], int n);
  void process(STU s[], int n);
  
  int main() {
      STU stu[N];
      
      printf("录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n", N); 
      input(stu, N);
      
      printf("\n对考生信息进行处理: 计算总分,确定等级\n");
      process(stu, N);
      
      printf("\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级\n");
      output(stu, N); 
      
      return 0;
  } 
  
  // 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
  void input(STU s[], int n) {
      // 补足代码
      // ××× 
      FILE *fp;
      int i;
      fp=fopen("examinee.txt","r");
      if(!fp){
         printf("fail to open examinee.txt\n");
         exit(0);
      }
      for(i=0;i<n;i++){
          fscanf(fp,"%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective);//从文件中读取各种信息 
      }
      fclose(fp);
  }
  
  // 输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
  // 不仅输出到屏幕上,还写到文本文件result.txt中 
  void output(STU s[], int n) {
      // 补足代码
      // ××× 
      FILE *fpp;
      int i;
      fpp=fopen("result.txt","w");
      if(!fpp){
        printf("fail to open result.txt\n");
         exit(0);
      }
      for(i=0;i<n;i++){
          printf("%ld   %s   %lf   %lf   %lf   %s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);//输出至屏幕 
         fprintf(fpp,"%ld   %s   %lf   %lf   %lf   %s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);//输出至文件 
     }
      fclose(fpp);
  }
  
 // 对考生信息进行处理:计算总分,排序,确定等级
  void process(STU s[], int n) {
      // 补足代码
      // ×××
      int i,j;
     STU t;
    //计算总分 
      for(i=0;i<n;i++){
          s[i].sum=s[i].objective+s[i].subjective;
      } 
     //冒泡法排序 
      for(i=0;i<n;i++){
          for(j=0;j<n-1-i;j++){
              if(s[j].sum<s[j+1].sum){
                  t=s[j];
                 s[j]=s[j+1];
                  s[j+1]=t;
              }
          }
      }
     //确定等级 
      strcpy(s[0].level,"优秀");
      for(i=1;i<=4;i++){
         strcpy(s[i].level,"合格");
      }
     for(i=5;i<=9;i++){
          strcpy(s[i].level,"不合格");
      }    
 }

  

总结和体会:最后一次实验作业,感觉自己真的对于c语言有好多不懂的地方,继续努力吧

 

posted on 2019-06-24 13:25  看见飞机  阅读(107)  评论(0编辑  收藏  举报