数据统计

   输入一些整数,求出它们的最小值,最大值与平均值(平均值带三位小数点),输入的整数保证要小于1000。

 

样例输入:2  8    3   5   1    7   3   6

 

样例输出:1    8     4.375

 

分析:难点是输入一些整数,如果是输入五个六个数字那可能大部分读者都会写,下面给出初步的程序:

#include<Stdio.h>

int main(){
	
	int max,min,n = 0,x, s = 0;
	                                //scanf函数的返回值是输入整形数字的个数。 
	while (scanf("%d", &x) == 1){   //错误想法:输入一个数如果等于1就进循环,否则就不进 
		s = s + x;                  //正确想法:只要输入一个int型整数就能进,如果输入字符或者符号就不进入循环。 
		
		if (x > max){
			max = x;
		}
		if (x < min){
			min = x;
		}
		n++;
	}
	
	
	printf("%d %d %.3lf", max, min, (double)s/n);     //平均数可以在printf函数里面 
	// 这样表示:(double)s/n .很奇妙。 
	return 0;
}

注意:在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键,即可结束输入。此程序没有赋予max与min的值,所以需要解决:第一种解决方法是在开头定义一个很大的数比如INF = 1000000,而min的值开始应该是很大的,反过来max的值应该是很小的。min = INF, max = -INF。

另一种方法是先读取第一个整数x ,然后令max =min =x 。这样的好处是避免了人为的“假想无穷大”值,程序更加优美;而
I NF这样的常数有时还会引起其他问题,如“无限大不够大”,或者“运算溢出”,后面还会继续讨论这个问题。

 

上面的程序并不是很方便:每次测试都要手动输入许多数。尽管可以用前面讲的管道的方法,但数据只是保存在命令行中,仍然不够方便。一个好的方法是用文件——把输入数据保存在文件中,输出数据也保存在文件中。这样,只要事先把输入数据保存在文件中,就不必每次重新输入了;数据输出在文件中也避免了“输出太多,一卷屏前面的就看不见了”这样的尴尬,运行结束后,慢慢浏览输出文件即可。如果有标准答案文件,还可以进行文件比较,而无须编程人员逐个检查输出是否正确。事实上,几乎所有算法竞赛的输入数据和标准答案都是保存在文件中的。使用文件最简单的方法是使用输入输出重定向,只需在m ain 函数的入口处加入以下两条语句:
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);

下面是程序:进阶版。

#define LOCAL             //只有定义了LOCAL才能使用下面的freopen语句。 
#include<Stdio.h>
#define INF 100000000
 
int main(){
	
#ifdef LOCAL
	freopen("data.in", "r", stdin);
	freopen("data.out", "w", stdout);
#endif
	
	int max = -NIF,min = NIF,n = 0,x, s = 0;
	                                //scanf函数的返回值是输入整形数字的个数。 
	while (scanf("%d", &x) == 1){   //错误想法:输入一个数如果等于1就进循环,否则就不进 
		s = s + x;                  //正确想法:只要输入一个int型整数就能进,如果输入字符或者符号就不进入循环。 
		
		if (x > max){
			max = x;
		}
		if (x < min){
			min = x;
		}
		n++;
	}
	
	
	printf("%d %d %.3lf", max, min, (double)s/n);     //平均数可以用printf函数里面 
	// 这样表示:(double)s/n .很奇妙。 
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值