『算法学习笔记』11th day. 文件操作<2>

来源:互联网 发布:一致性哈希算法php 编辑:程序博客网 时间:2024/06/05 05:32

例题2-4 数据统计(续)

输入一些整数,求出它们的最小值,最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000整数。

自己增加一个输出和的功能 这样平时可以用来记分。

并不是所有比赛都允许用重定向方式访问文件。

比赛前需要了解文件读写的相关规定:是标准输入输出(也就是标准I/O),还是文件输入输出?如果是文件输入输出,是否禁止用重定向方式访问文件?

如果比赛要求用文件输入输出,但是禁止使用重定向方式。

  1 #include<stdio.h>  2 #define INF 1000000000  3 int main()  4 {  5         FILE *fin, *fout;  6         fin=fopen("exa2-4.data.in","rb");  7         fout=fopen("exa2-4.data.out","wb");  8         int x, n =0, min =INF, max =-INF, s=0;  9         while(fscanf(fin,"%d",&x)==1) 10         { 11                 s+=x; 12                 if(min>x)min=x; 13                 else if(max<x)max=x; 14                 n++; 15         } 16  17         fprintf(fout, "%d %d %.3lf\n",min,max,(double)s/n ); 18         fclose(fin); 19         fclose(fout); 20         return 0; 21 }~                                          

对比之前的重定向程序,代码如下:

  1 #include<stdio.h>  2 #define INF 1000000000  3 int main()  4 {  5 #ifdef LOCAL      6         freopen("exa2-4.data.in","r",stdin);  7         freopen("exa2-4.data.out","w",stdout);  8 #endif  9         int x, n =0, min =INF, max =-INF, s=0; 10         while(scanf("%d",&x)==1) 11         { 12                 s+=x; 13                 if(min>x)min=x; 14                 else if(max<x)max=x; 15                 n++; 16         } 17  18         printf("%d %d %.3lf\n",min,max,(double)s/n ); 19         return 0; 20 }~                        

可看到一些直观的改变,已用红色标明。

重定向和fopen方法各有优劣。重定向的方法写起来简单,但是不能同时读写文件和标准输入输出;fopen写法比较繁琐,但是灵活性好(可以反复打开并读写文件)。


输出技巧 编号q2-1

 1 #include<stdio.h>  2 int main()  3 {  4         int i, n;  5         scanf("%d", &n);  6         for(i=1;i<=n;i++)  7                 printf("%d\n",i);  8         return 0;  9 }


为了输出2,4,6,8...2n, 每个一行。试通过修改下列程序来实现 

任务1修改第7行,不修改第6行
显然应该改为 printf("%d\n",2*i);
任务2 修改第6行, 不修改第7行
改为 for(i=2;i<=2*n;i+=2)

浮点数陷阱 编号q2-2
运行下面的程序,看看结果是不是和想象的一样。
  1 #include<stdio.h>
  2 int main()
  3 {
  4         double i;
  5         for(i=0;i!=10;i+=0.1)
  6                 printf("%.1lf\n",i);
  7         return 0;
  8 }


果然。。。 很震惊! ---> 我必须专门花一天学习时间研究清楚浮点数问题,否则这家伙以后会很麻烦!

0 0
原创粉丝点击