『算法学习笔记』10th day. 文件操作<1>
2014-02-26 21:06
423 查看
例题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
可以得到一样的结果。验证了正确性。
输入一些整数,求出它们的最小值,最大值和平均值(保留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
可以得到一样的结果。验证了正确性。
相关文章推荐
- 『算法学习笔记』11th day. 文件操作<2>
- C++学习笔记之对文件的操作<1>
- C++学习笔记之对文件的操作<1>
- C++学习笔记之对文件的操作<1>
- C++学习笔记之对文件的操作<1>
- C++学习笔记之对文件的操作<1>
- C++学习笔记之对文件的操作<1>
- C++学习笔记之对文件的操作<2>
- C++学习笔记之对文件的操作<2>
- OpenCV 2 学习笔记(10): 算法的基本设计模式<1>:策略模式(strategy pattern)
- C++学习笔记->C++的文件操作
- linux学习笔记:<一>linux文件的压缩与打包
- <<Python基础教程>>学习笔记 | 第11章 | 文件和素材
- <算法导论>学习笔记 第一部分 第1章 算法在计算中的作用
- Netty学习笔记<1>--UNIX的5种I/O模型
- OpenCV 2 学习笔记(12): 算法的基本设计模式<3>:单例模式(Singleton pattern)
- <Head First Java>学习笔记--第四章:方法操作实例变量 对象的行为
- 组合优化学习笔记<之>从贪心算法到子集系统再到拟阵
- 毕向东Java视频学习笔记【day21-IO流<1>】