实验7 文件

实验任务3

问题1:是  在当前路径下,生成了文本文件file3.dat;

问题2:正确且直观可读。

 

实验任务4

1.子任务1

运行程序,屏幕上正确输出了按分数由高到底排序的学生信息,同时,在当前路

径下,生成了二进制文件file4.dat。用记事本程序打开文件file4.dat,里面的数据信息直观可读。 2.子任务2
#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 str[N];
    int i;

    fp = fopen("d:\\exe\\file4.dat", "rb");
    
    if( fp == NULL ) 
    {  
        printf("fail to open file4.dat\n");
        exit(0);
    }
    
    for(i=0;i<N;i++)
    {
        if(fread(&str[i],sizeof(struct student),1,fp))
        printf("%d %s %d\n",str[i].num,str[i].name,str[i].score);
        
        else
        {
            printf("file read error\n");
            break;
        }
        
    }
    fclose(fp);
    
    return 0;
}

实验7 文件

 

实验任务5

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
 const int N = 10;
  
typedef struct student
{
     long int id;
     char name[20];
     float obj;
     float sub;
    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\n");
     output(stu, N);
     
     return 0;
 }
 //输入 
 void input(STU s[],int n)
 {
      FILE *fp;
      int i;
      fp = fopen("d:\\exe\\exam.txt", "r");
    if( fp == NULL ) 
    {  
        printf("fail to open exam.txt\n");
        exit(0);
    }
     for(i=0;i<n;i++)
        fscanf(fp, "%d %s %f %f", &s[i].id, &s[i].name, &s[i].obj, &s[i].sub);
         
     fclose(fp);
 }
 //输出 
 void output(STU s[],int n)
 {
     FILE *fout;
    int i;
    printf("准考证号  姓名   客观题得分   操作题得分   总分      等级\n------------------------------------------------------------\n");
     fout = fopen("d:\\exe\\result.txt", "wt");
    if( !fout ) 
    {   
        printf("fail to open result.txt\n");
        
    }
     for(i=0;i<n;i++)
     {
             printf("%ld %10s %9.2f %15.2f %8.2f %8s\n", s[i].id, s[i].name, s[i].obj, s[i].sub, s[i].sum, s[i].level);
             fprintf(fout,"%ld %10s %9.2f %15.2f %8.2f %8s\n",s[i].id, s[i].name, s[i].obj, s[i].sub, s[i].sum, s[i].level);
     }
            //fwrite(s, sizeof(STU), N, fout); 
            
     fclose(fout);
     
         
     
 }
 //算总分 
 void process(STU s[],int n)
 {
     int i,j,m; 
     STU temp;
     for(i=0;i<n;i++){
         s[i].sum = s[i].sub + s[i].obj;
 }
 //排序 
     for(i=0;i<n-1;i++)
         for(j=0;j<n-i-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;i++)
     {
         m=i+1;
     
         if((float(m)/n)<0.2) 
         strcpy(s[i].level,"优秀");
         else if((float(m)/n)<0.6) 
         strcpy(s[i].level,"合格");
         else strcpy(s[i].level,"不合格"); 
 }
 }

实验7 文件

实验7 文件

总结:

实验任务5中最开始定义的output函数里采取的输出到文件的方式是使用fwrite函数,但出现了一个问题,记事本打开result.txt文件时,明明定义的是txt,但得到的却是一堆乱码。这个问题我想的不是很清楚,可能是前面数据输入到文件时我使用的是fscanf函数,以及fwrite是把数据整块写进去,这里应该是要采用循环一条一条输入。还有就是数据输入的类型最开始使用的不正确。

 

上一篇:ERROR org.redisson.client.handler.CommandDecoder - Unable to decode data. channel


下一篇:实验7