一.概述
第二章主要是介绍了循环结构在程序中的使用,同时重点介绍了文件操作(重点是通过文件对数据的输入输出).参见这里.
由于在算法比赛中对数据的输入输出有着严格的规定,因此如何正确有效地使用这些方法是我们需要注意和多加练习的地方.
二.例题分析
例题2-1涉及到了如何判断整数的问题,可以参见这里.
/*例题2-3*/
思路: 仍然是循环的使用,只不过循环语句不是简单语句,而是计算阶层,是另外
一个循环,因此用二重循环就能解决了.
由于上面的程序在n比较大的时候会产生溢出,得不出正确结果.所以改用另种方法.
这里需要一点数学知识:要计算只包含加法,减法和乘法的整数表达式除以正整数n
的余数,可以在每步计算之后对n取余,结果不变.
注意到这个程序用到了头文件time.h中的clock()函数.该函数返回程序目前为止运行
的时间,这个时间除以常数CLOCKS_PRE_SEC_之后得到的值以"秒"为单位.
还需注意一点:常数CLOCKS_PER_SECC和操作系统相关,不要直接使用clock()的返回值,
而应总是除以CLOCKS_PER_SEC.
并且clock() / CLOCKS_PER_SEC返回的是从程序开始到结束的时间,也就是说输入数据
的时间也被计算在内,显然,这是我们不希望的.这里可以用命令echo x | test echo
运用了"管道"的知识, 而x是输入的数据,test是程序生成的可执行文件名.
这样就相当于系统自动地输入数据,将手动输入数据的时间造成的误差排除了.
/*例题2-4*/
分析:
1. 首先遇到的问题是:如何在没给出输入确定个数的变量的输入问题.即不知道变量的个数,
就无法定义变量的确定名称.
其实,就算知道了变量的个数,但是这个数量是很大的话,利用scanf来控制输入也是不方
便的(当然,可以采取数组的形式).因此必须采用一种更加方便的方法.
就是 while(scanf("%d",&x)) 这种语句.由于scanf返回值是int型,只要有输入返回就是
成功的变量个数(不等于0).就不断循环.当然,如果输入完毕,可以人为结束:在windows下
先按enter确定输入完毕,再按