成都装修网站制作多少钱,手机建设银行网站,天津关键词优化专家,郑州网站高端设计例题#xff1a;输入一些整数#xff0c;求出它们的最小值、最大值和平均值#xff08;保留三位小数#xff09;。输入保证这些数都是不超过1000的整数。 这个题目关键在于#xff1a;整数的个数是不确定的。下面直接给出程序#xff1a;
#includestdio.h
int m… 例题输入一些整数求出它们的最小值、最大值和平均值保留三位小数。输入保证这些数都是不超过1000的整数。 这个题目关键在于整数的个数是不确定的。下面直接给出程序
#includestdio.h
int main(){int x,n0,min,max,s0;while(scanf(%d,x)1){ssx;if(xmax){maxx;}if(xmin){minx;}n;}printf(%d %d %.3f\n,min,max,(double)s/n);return 0;
} 这个程序中scanf有返回值返回的是成功输入的变量个数当输入结束时scanf函数无法再次读取x将返回0. 在Windows下输入完毕后先按Enter键再按CtrlZ键最后在按Enter键即可结束输入。在Linux下输入完毕后按CtrlD键即可结束输入。 上面这个程序是错误的变量在未赋值之前的值是不确定的。特别的它不一定是0.只需要在使用之前赋初值就可以解决这个问题。一种方法是定义一个很大的常数如INF1000000000,然后让max-INF,而minINF另一种方法是先读取第一个整数x然后令maxminx.这样的好处是避免了人为的“假想无穷大”值程序更加优美。 上面的程序并不是很方便每次都要手动输入很多数。一个好的方法是用文件--把输入数据保存在文件中输出数据也保存在文件中。这样只要事先把输入数据保存在文件中就不必每次重新输入了数据输出在文件中也避免了“输出太多一卷屏前面的就看不见了”这样的尴尬运行结束后慢慢浏览输出文件即可。 使用文件最简单的方法是使用输入输出重定向只需在main函数的入口处加入以下两条语句
freopen(input.txt,r,stdin);
freopen(output.txt,w,stdout); 上述语句将使得scanf从文件input.txt读入printf写入文件output.txt。不只是scanf和printf所有读键盘输入、写屏幕输出的函数都将改用文件。尽管这样做很方便但并不是所有算法竞赛都允许程序读写文件。甚至有的算法竞赛允许访问文件但不允许用freopen这样的重定向方式读写文件。参赛之前仔细阅读文件读写的相关规定是标准输入输出也称标准I/O即直接读键盘写屏幕还是文件输入输出如果是文件输入输出是否禁止用重定向方式访问文件同时注意不要弄错大小写不要弄错文件名不要使用绝对路径或相对路径。 有一种方法可以在本机测试时用文件重定向但一旦提交比赛就自动“删除”重定向语句。
#define LOCAL
#includestdio.h
#define INF 1000000000
int main(){#ifdef LOCALfreopen(data.in,r,stdin);freopen(data.out,w,stdout);#endifint x,n0,minINF,max-INF,s0;while(scanf(%d,x)1){ssx;if(xmax){maxx;}if(xmin){minx;}/* printf(x %d, min %d. max %d\n, x, min, max);*/n;}printf(%d %d %.3f\n,min,max,(double)s/n);return 0;
} 这是一份典型的比赛代码包含了几个特别之处 1.重定向的部分被写在了#ifdef和#endif中。其含义是只有定义了符号LOCAL才编译两条freopen语句。 2.输出中间结果的printf语句写在了注释中它在最后版本的程序中不应该出现可以在发现了bug后输出中间信息。 上面的代码在程序首部就定义了符号LOCAL因此在本机测试时使用重定向方式读写文件。如果比赛要求读写标准输入输出只需要在提交之前删除#define LOCAL即可。 如果比赛要求用文件输入输出但禁止用重定向的方式使用的程序如下
#includestdio.h
#define INF 1000000000
int main(){FILE *fin,*fout;fin fopen(data.in,rb);fout fopen(data.out,wb);int x,n0,min,max,s0;minINF;max-INF;while(fscanf(fin,%d,x)1){sx;if(xmin){minx;}if(xmax){maxx;}n;}fprintf(fout,%d %d %.3f\n,min,max,(double)s/n);fclose(fin);fclose(fout);return 0;
} 上面这个代码很直观先声明变量fin和fout把scanf改为fscanf第一个参数为fin把printf改为fprintf第一个参数为fout最后执行fclose关闭两个文件。 重定向和fopen两种方法各有优劣重定向的方法写起来简单但是不能同时读写文件和标准输入输出fopen的写法稍显繁琐但是灵活性比较大例如可以反复打开并读写文件。如果想把fopen版的程序改成读写标准输入输出只需赋值“finstdin;foutstdout即可不要调用fopen和fclose。