zoukankan      html  css  js  c++  java
  • 实验7

    #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); 
        input(stu, N);
        
        printf("
    对考生信息进行处理: 计算总分,确定等级
    ");
        process(stu, N);
        
        printf("
    打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
    ");
        output(stu, N); 
        
        system("pause");
        return 0;
    } 
    
    // 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
    void input(STU s[], int n) {
        // 补足代码
        // ××× 
        FILE *fin;
        int i;
        if((fin=fopen("examinee.txt","r"))==NULL)
        {
            printf("cannot open file");
            exit(0);
        }
        for(i=0;i<n;i++)
        fscanf(fin,"%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective);
        fclose(fin);
    }
    
    // 输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
    // 不仅输出到屏幕上,还写到文本文件result.txt中 
    void output(STU s[], int n) {
        // 补足代码
        // ×××
        FILE *fout;
        int i;
        if((fout=fopen("result.txt","w"))==NULL)
        {
            printf("cannot open file");
            exit(0);
        }
        for(i=0;i<n;i++)
        {
        printf("%d	%s	%.1f	%.1f	%.1f	%s
    ",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);
        fprintf(fout,"%d	%s	%.1f	%.1f	%.1f	%s
    ",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);
        }
        fclose(fout);
    }
    
    // 对考生信息进行处理:计算总分,排序,确定等级
    void process(STU s[], int n) {
        // 补足代码
        // ××× 
        int i,j;
        STU temp;
        for(i=0;i<n;i++)
        s[i].sum=s[i].objective+s[i].subjective;
        for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;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++) 
        if(i==0)
        strcpy(s[i].level,"优秀");
        else if(i>0&&i<=4)
        strcpy(s[i].level,"合格");
        else if(i>4&&i<=9)
        strcpy(s[i].level,"不合格");    
    }

    // 从文本文件file1.dat中读取数据,找出最高分和最低分学生信息,并输出在屏幕上
    #include <stdio.h> 
    #include <stdlib.h>
    
    #define N 10
    
    // 定义一个结构体类型STU 
    typedef struct student {
        int num;
        char name[20];
        int score;
    }STU;
    
    int main() {
        STU st, stmax, stmin;
        int i;
        FILE *fp;
        
        // 以只读文本方式打开文件file1.dat 
        fp = fopen("file1.dat", "r");
        if( !fp ) {  // 如果打开失败,则输出错误提示信息,然后退出程序 
            printf("fail to open file1.dat
    ");
            exit(0);
        }
        
        stmax.score = 0;    // 先假定最高分是0,后面如发现比当前最高分还高的分数,就更新最高分 
        stmin.score = 100;    // 先假定最低分是100分,后面如发现比当前最低分更低的分数,就更新最低分 
        
        //for(i=0; i<N; i++)//
        while(!feof(fp)){
            fscanf(fp, "%d %s %d", &st.num, st.name, &st.score);  // 从fp指定的文件中格式化读取一个学生信息
            
            if(st.score > stmax.score)
                stmax = st;
            else if(st.score < stmin.score)
                stmin = st; 
        } 
        
        fclose(fp);
        
        printf("最高分学生信息: %5d%15s%5d
    ", stmax.num, stmax.name, stmax.score);
        printf("最低分学生信息: %5d%15s%5d
    ", stmin.num, stmin.name, stmin.score);
    
        system("pause");
        return 0;
    }
    
    // 这是《C语言程序设计教程学习指导》「2.10 文件」中的实验,细微处做了微调
    // 这个源代码没有考虑多个高分或多个低分的情形。 
     

    总结:

    在格式化输入输出中有些许出错,对于文件操作的程序还不太熟悉

    对于文件的各种读写操作还有点分不清

    我有点疑问,到底什么时候什么情况下应该用哪一种读写操作函数。

  • 相关阅读:
    Appdelegate 跳转其他页面 获取当前屏幕显示的viewcontroller 获取当前屏幕中present出来的viewcontroller 获取当前导航控制器
    React-Native 环境部署
    关于GCD的那些事
    二,Runtime进行动态添加方法
    一, Runtime 交换方法
    Runtime 概念
    Mac Office安装及破解
    iOS 规范之宏
    规范之UITableViewCell
    Linux 命令
  • 原文地址:https://www.cnblogs.com/xuzhelaoguiwt/p/12111364.html
Copyright © 2011-2022 走看看