算法入门 第二章(二)

文件操作

在这里插入图片描述在这里插入图片描述

问题难点在于输入数据的个数不确定

#include<stdio.h>
#define INF 1000000
int main()
{
   
int x, n, max=-INF, min=INF, s=0;
while (scanf("%d", &x) == 1)  // scanf的返回值在输入状态是输入变量的个数,结束输入后返回值是0
{
   
    s += x;
    if(min > x) min = x;
    if(max < x) max = x;
    n++;  // 输入数据个数
}
printf("%d %d %.3lf", max, min, (double)s/n);
}

在这里插入图片描述

12 2 34 4 5 64 64 23
^Z
64 2 2.849

使用重定向访问输入数据文件和输出数据文件,而不用标准输入输出

标准输入输出就是读键盘输入,写屏幕输出,但是算法竞赛大多数时候时候要求我们不用标准输入输出,这时候就要使用文件,把输入数据和输出数据放在文件里,输入不必多次手动输入,输出也可以慢慢查看

#include<stdio.h>
#define INF 1000000
int main()
{
   
    freopen("input.in", "r", stdin);  // 输入输出数据文件的后缀也可以为txt,看具体要求
    freopen("output.out", "w", stdout);
    int x, n, max=-INF, min=INF, s=0;
    while (scanf("%d", &x) == 1)
    {
   
        s += x;
        if(min > x)
            min = x;
        if(max < x)
            max = x;
        n++;  // 输入数据个数
    }
    printf("%d %d %.3lf", max, min, (double)s/n);  //这一句不能注释,否则没有输出
}

重定向只是把scanf printf重定向到文件了,这两句程序还是必须出现的,否则没有输入和输出,但是并不会读键盘写屏幕

两个数据文件和源程序.c文件同路径,不是在exe那里,输入文件自己建好写好,输出文件会自动生成
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#include<stdio.h>
#define INF 1000000
#define LOCAL // 这句注释掉则使用标准输入输出,写屏幕读键盘
int main()
{
   
    #ifdef LOCAL // 只有定义了LOCAL才编译里面这两条代码
    freopen("input.in", "r", stdin);
    freopen("output.out", "w", stdout);
    #endif
    int x, n, max=-INF, min=INF, s=0;
    while (scanf("%d", &x) == 1)
    {
   
        s += x;
        if(min > x)
            min = x;
        if(max < x)
            max = x;
        n++;  // 输入数据个数
    }
    printf("%d %d %.3lf", max, min, (double)s/n);
}

fopen:要求用文件访问数据,但不让使用重定向方式

#include<stdio.h>
#define INF 1000000
int main()
{
   
    FILE *fin, *fout; //声明fin fout
    fin = fopen("input.in", "rb");
    fout = fopen("output.out", "wb");

    int x, n, max=-INF, min=INF, s=0;
    while (fscanf(fin, "%d", &x) == 1)  // fscanf第一个参数是fin
    {
   
        s += x; 
        if(min > x)
            min = x;
        if(max < x)
            max = x;
        n++;  // 输入数据个数
    }
    fprintf(fout, "%d %d %.3lf", max, min, (double)s/n); //fprintf 第一个参数是fout
    fclose(fin); // 关闭文件
    fclose(fout);
}

在这里插入图片描述
试试fopen标准输入输出

#include<stdio.h>
#define INF 1000000
int main()
{
   
    FILE *fin, *fout;
//    fin = fopen("input.in", "rb");
//    fout = fopen("output.out", "wb");
    fin = stdin;
    fout = stdout;
    int x, n, max=-INF, min=INF, s=0;
    while (fscanf(fin, "%d", &x) == 1)
    {
   
        s += x;
        if(min > x)
            min = x;
        if(max < x)
            max = x;
        n++;  // 输入数据个数
    }
    fprintf(fout, "%d %d %.3lf", max, min, (double)s/n);
    fclose(fin);
    fclose(fout);
}
1 3 4
^Z
4 1 0.118

小结

在这里插入图片描述

#include<stdio.h>
int main()
{
   
    int n;
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
   
        printf("%d\n", 2*i);
    }
    return 0;
}
#include<stdio.h>
int main()
{
   
    int n;
    scanf("%d", &n);
    for(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值