CH2-数据的输入和格式

数据统计

  • 重定向标准输入输出流的方式,从文件中读取数据.
  • 使用宏定义进行开发环境和生成环境的区分.
  • 重视输入输出数据的格式, 掌握两组数据之间用空行分开的格式.
//
// Created by sixleaves on 2016/11/16.
//
#include 

#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 
#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;
}

你可能感兴趣的:(CH2-数据的输入和格式)