数据统计(基于文件输入输出)

输入一些整数,求出它们的最大值、最小值、平均值(保留三位小数)。输入保证这些数都是不超过1000的整数。
样例输入:
2 8 3 5 1 7 3 6
样例输出:
1 8 4.375

基于文件重定向:

#define LOCAL         //作用:仅在本机使用重定向,提交时将其删掉 
#include <stdio.h>

const int INF=10000;

int main(){
#ifdef LOCAL  // 只有在定义了LACAL的情况下才编译下面两条freopen语句 
    freopen("datain.txt","r",stdin);
    freopen("dataout.txt","w",stdout);
#endif
    int n=0,x,sum=0,max=-INF,min=INF;//允许这样子定义和赋值交错;不是max=INF,min=-INF 
    while(scanf("%d",&x)==1){
        sum+=x;
        n++;
        if(max<x) max=x;
        if(min>x) min=x;
    }
    printf("%d %d %.3f\n",min,max,(double)sum/n);//若sum=6,n=4,(sum和n均为int) 答案为1.500 而非1.000 
    return 0;
} 

注意点:1.#ifdef #endif 是写在main函数里面
2.当把freopen语句删掉之后,就是很普通的标准输入输出了

基于fopen:

#include <stdio.h> 

const int INF=10000;

int main(){
    FILE *fin,*fout;                //声明变量 
    fin=fopen("datain.txt","rb");
    fout=fopen("dataout.txt","wb");

    int n=0,sum=0,max=-INF,min=INF,x;
    while(fscanf(fin,"%d",&x)==1){  
        sum+=x;
        n++;
        if(max<x) max=x;
        if(min>x) min=x;
    }
    fprintf(fout,"%d %d %.3f\n",min,max,(double)sum/n);
    fclose(fin);                          //关闭文件 
    fclose(fout);
    return 0;
}

注意点:1.fscanf 和fprintf 只是在scanf和printf中添加了一个目标文件参数而已。

备注:上面代码跑不出来,并没有成功读取文件。


关于输入方式的总结:

标准输入输出:即读键盘、写屏幕
文件输入输出:

  • 重定向
    注意的问题:遵循比赛中的文件名规定(程序文件名、输入输出文件名)、注意大小写、不要拼错文件名、不要使用相对路径或者绝对路径、、
    使用特定方法使得只在本地进行文件重定向
  • fopen
    使用框架:
    ① File *fin,*fout; (定义)
    fin=fopen(“data.in”,”rb”);
    fout=fopen(“data.out”,”wb”);
    ② fscanf(fin,”%d”,&x); (输入输出)
    fprintf(fout,”%d”,x);
    ③ fclose(fin); (关闭)
    fclose(fout);
  • 优劣比较
    重定向:简单,但是不可以同时读写文件和标准输入输出
    fopen:复杂,但是灵活度较大(如可以反复打开并读写文件)
    其中,如果想要把fopen版的程序改写为标准输入输出型,只需赋值fin=stdin,fout=stdout, 并且不需要调用fopen 和 fclose。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值