首页 > 其他 > 详细

实验7 文件

时间:2019-12-28 21:35:00      阅读:63      评论:0      收藏:0      [点我收藏+]
实验结论
Part1: 验证性实验
  • 验证性实验2
如果事先不知道学生人数,尝试对line29做如下修改后,程序运行结果是否正确?回答问题,并给出运行结果
截图。
正确。
技术分享图片
  • 对比验证性实验3和验证性实验4的程序源码及运行结果,总结比较二进制文件与文本文件的区别。 
         file3.dat可识读  file4.dat内容不可识读
  • 写一个简单的程序,尝试从二进制文件fifile4.dat中读出数据,并在屏幕上显示,以此查看文件fifile4.dat的内容。给出这个程序源码和运行截图。
#include<stdio.h>
#include<stdlib.h>
# define N 10
typedef struct student{
  int  num;
  char name[20];
  int  score;
}STU;

int main()
{
    FILE *fp;
    STU st[N];
    int i=0;
    fp=fopen("file4.dat","r");
    if(fp==NULL){
        printf("Failed to open filea\n");
        exit(0);
    }
    
    for(i=0;i<N;i++) {
        if(fread(&st[i],sizeof(struct student),1,fp) == 1) {
            printf("%d %s %d\n", st[i].num, st[i].name, st[i].score);
        }
    }
    
    fclose(fp);
    return 0;
}

运行结果:

技术分享图片

Part2: 编程练习
修改examinee.txt中测试数据,给出程序运行源码及运行结果截图。
在input()和output()函数中,请添加必要注释,增加程序源码的可读性。
#include <stdio.h>
#include <stdlib.h>
#include <string.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); 
    
    system("pause");
    return 0;
} 

// 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
void input(STU s[], int n) {
    // 补足代码
    // ××× 
    FILE *fp;
    int i;
    if((fp=fopen("examinee.txt","r"))==NULL) {
        printf("cannot open file");
        exit(0);
    }
    for(i=0;i<n;i++){
      if(fscanf(fp,"%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective)==0)
        printf("error!"); 
        }
        fclose(fp);
        
}

// 输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
// 不仅输出到屏幕上,还写到文本文件result.txt中 
void output(STU s[], int n) {
    // 补足代码
    // ××× 
    FILE *fp;
    int i;
    if((fp=fopen("result.txt","w"))==NULL) {
        printf("cannot open file");
        exit(0);
    }
    for(i=0;i<n;i++)
    {
        printf("%23d %8s %9.2f %9.2f %8.2f %7s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);
        fprintf(fp,"%23d %8s %9.2f %9.2f %8.2f %7s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level); 
    }
    fclose(fp);   
}


// 对考生信息进行处理:计算总分,排序,确定等级
void process(STU s[], int n) {
    // 补足代码
    // ××× 
    int i,j;
    STU temp;
    for(i=0;i<n;i++)
        s[i].sum=s[i].objective*0.4+s[i].subjective*0.6;
    for(i=0;i<n-1;i++)
     for(j=0;j<n-1;j++)
        if(s[j].sum<s[j+1].sum){
            temp=s[j];
            s[j]=s[j+1];
            s[j+1]=temp;
        }
         for(i=0;i<=n*0.1;i++)
          strcpy(s[0].level,"优秀"); 
          for(i=n*0.1;i<=n*0.5;i++)
          strcpy(s[i].level,"合格");
          for(i=n*0.5;i<n;i++) 
          strcpy(s[i].level,"不合格");    
}

运行结果:

技术分享图片

Part3: 拓展综合应用(选做*)
如果选做,给出程序实现源码及运行结果截图。请添加必要注释,增加程序源码的可读性。 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 80
int main(){
    FILE *fp,*fout;
    int i,lucky[5],j;
    char stuinfo[N][80];
    
    fp=fopen("list.txt","r");
    if(fp==NULL){
        printf("fail to open file");
        exit(0);
    };
    fout=fopen("lucky.txt","w");
    if(fout==NULL){
        printf("fail to open file");
        exit(0);
    };
    
    for(i=0;i<N;i++)
      fgets(stuinfo[i],80,fp);//读取 
    
      srand(time(NULL));//随机种子 
      
    for(i=0;i<5;i++){
       lucky[i]=rand()%N;//随机数 
       
       for(j=0;j<i;j++){ 
          if(lucky[j]==lucky[i])//避免重复 
           lucky[i]=rand()%N;
        }
        
       puts(stuinfo[lucky[i]]);
       fputs(stuinfo[lucky[i]],fout);
    }
    
       fclose(fp);
       fclose(fout);
     return 0;
}

运行结果:

技术分享图片

实验总结和体会 
1、实验是在上次实验基础上完成的,其实不太难,但其实理解起来也有一点点的难度。(菜鸡)
2、系统日期时间自动生成文件名这个还太会,试着写了一点儿,但没成功(I AM TOO VEGETABLE!)有空一定要试试~

实验7 文件

原文:https://www.cnblogs.com/chris2001/p/12113026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!