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

例题2-4 数据统计

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

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

  1 #include<stdio.h>
  2 int main()
  3 {
  4         int x, n =0, min=0, max=0, s=0;
  5         while(scanf("%d",&x)==1)
  6         {
  7                 s+=x;
  8                 if(min>x)min=x;
  9                 else if(max<x)max=x;
 10                 n++;
 11         }
 12         printf("%d %d %.3lf\n",min,max,(double)s/n );
 13         printf("%d\n",s);
 14         return 0;
 15 }
~                            

注意:

1. 程序输入的个数是不确定的,所以无法确定读取的个数,这时候借助 scanf的返回值

scanf返回当前的语句中成功输入的变量个数。输入结束时无法再获得x的值,将返回0.

2.输入完了之后,如何告诉程序输入结束呢?

windows下数输入完 Enter , Ctrl+Z 没有测试

linux下输入完后 Enter, Ctrl +D

3.注意变量未赋值之前的值是不确定的,此时进行比较会产生各种奇怪的事情。

4.变量输入完再告诉编译器比较麻烦,可以直接用管道符号解决。

echo 1  2 22 3 3  145 45  1 321 54 2 2 1 5 45  6  45 | ./exa2-4
0 321 41.353
703

但是仍然不够方便!

5.将输入输出都保存在文件中才是最方便的

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

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

应严格遵守比赛的文件名规定,包括程序文件名或输入输出文件名(不要弄错大小写,拼错文件名,使用绝对或相对路径)。

有一种方法可以在本机测试时候使用文件重定向,但一旦提提交到比较就自动“删除”重定向语句。

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

如果比赛中要求写标准输入输出,只要在提交前把#define LOCAL删除即可。

一个更好的方法是在编译选项中定义LOCAL符号,这样提交之前就完全不用更改代码,大大降低出错的可能!

把exa2-4.redirect.c中的 #define LOCAL 删除,然后编译的时候加上 -DLOCAL选项

edward@edward:~/Desktop/Algorithm$ gcc -o  exa2-4.redirect exa2-4.redirect.c -DLOCAL
edward@edward:~/Desktop/Algorithm$ ./exa2-4.redirect

edward@edward:~/Desktop/Algorithm$ cat exa2-4.data.out
2 423 97.900

可以得到一样的结果。验证了正确性。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个简单的HTML页面,用于展示笔记本信息。它包含了以下主要部分: 1. DOCTYPE声明:<!DOCTYPE html> 表示文档类型为HTML。 2. HTML标签:<html> 标签是HTML文档的根元素。 3. Head部分:<head> 标签内包含了页面的头部信息,如字符编码和标题等。 4. Title标签: <title> 标签用于定义页面的标题,显示在浏览器的标题栏中。 5. Body部分: <body> 标签内包含了页面的主要内容。 6. 背景图片设置:通过 background 属性和样式设置,将图片 fff.jpg 设置为页面的背景,并通过样式设置背景大小和固定背景。 7. Counts部分: <section> 标签定义了一个区块,类名为 "counts section-bg",用于展示笔记本信息。该区块内包含了一个容器 <div>。 8. 商品信息表格: <table> 标签定义了一个表格,设置了宽度为1000,并居中对齐。其中的 <tr> 标签定义了表格的行,<th> 标签定义了表头单元格,<td> 标签定义了数据单元格。 9. 循环遍历数据:通过使用 {% for %} 和 {% endfor %} 标签对 datalist 进行遍历,在表格中生成多行数据。 10. 商品图片、商品地址、价格和商铺:通过 <img> 和 <a> 标签展示商品的图片和链接,并设置目标为 "_blank",使链接在新窗口中打开。 总体而言,这段代码使用HTML和模板引擎(可能是Flask的模板引擎)来动态生成表格,展示笔记本的图片、地址、价格和商铺等信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值