文件操作
问题难点在于输入数据的个数不确定
#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(