数据统计
- 重定向标准输入输出流的方式,从文件中读取数据.
- 使用宏定义进行开发环境和生成环境的区分.
- 重视输入输出数据的格式, 掌握两组数据之间用空行分开的格式.
//
// Created by sixleaves on 2016/11/16.
//
#include <cstdio>
#define DEBUG
#define INF 10000000
int main () {
#ifdef DEBUG
#ifdef REDIRECTSTD
// method 1 重定向输入输出
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#else
// method 2 从文件中读
FILE *fin = fopen("data.in", "rb");
FILE *fout = fopen("data.out", "wb");
#endif
#endif
int x, n = 0, min = INF, max = -INF, s = 0;
while (fscanf(fin, "%d", &x) == 1) {
s += x;
if (x < min) min = x;
if (x > max) max = x;
n++;
}
fprintf(fout,"%d %d %.3f\n", min, max, (double)s/n);
fclose(fin);
fclose(fout);
return 0;
}
从文件中读写
如果不允许重定向, 那么从文件中读写, 必须使用fopen函数先获得文件指针.
- fscanf对应scanf, 只是fscanf多了一个参数, 在第一个参数指出其输入源是文件, 其它和scanf一样.
- fprintf对应于printf, 只是fprintf多了一个参数, 在第一个参数指出输出源是文件, 其它和printf一样.
两组数据之间用空行分开的格式
输入一些数据, 求出他们的最小值, 最大值和平均值(保留3位小数).输入保证这些数是不超过1000的整数.
输入包含多组数据, 每组数据第一行是整数个数n, 第二行是n个整数.相邻两组之间应该输出一个空行.
Input
8
2 8 3 5 17 3 6
4
-4 6 10 0
0
Output
Case 1: 1 8 4.375
Case 2: -4 10 3.000
易错点:
两组数据之间用空行分开的格式, 这里一般有个特殊情况, 就是如果是一组的话是不用用空行分隔的, 所以要对这种情况做判断, 在第一组的时候不要输出空行分隔, 而是在第二组要输出前开始.
#include <stdio.h>
#define INF 1000000
int main() {
int x, n =0, min = INF, max= -INF, s = 0, kase = 0;
while (scanf("%d", &n) == 1 && n) {
int s = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &x);
s += x;
if (x < min) min = x;
if (x > max) max = x;
}
if (kase) printf("\n");
printf("Case %d: %d %d %3.f\n", ++kase, min, max, (double)s/n);
}
return 0;
}