ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实验7 文件

2021-06-13 17:34:31  阅读:129  来源: 互联网

标签:文件 file4 int dat STU 实验 include


实验任务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;
}

 

实验任务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,"不合格"); 
 }
 }

总结:

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

 

标签:文件,file4,int,dat,STU,实验,include
来源: https://www.cnblogs.com/asa-wxy/p/14880658.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有