第2章 循环结构程序设计

来源:互联网 发布:个人如何成为淘宝卖家 编辑:程序博客网 时间:2024/05/18 03:49

(1)分支循环

提示2-1: for循环的格式为:for(初始化;条件;调整)循环体;

提示2-2:尽管for循环反复执行相同的语句,但这些语句每次的执行效果往往不同。--------循环体与循环变量有关,循环变量每次循环都发生变化

提示2-3:编写程序时,要特别留意"当前行”的跳转和变量的改变。--------可以通过调试工具观察

提示2-4:不拘一格的使用伪代码来思考和描述算法是一种值得推荐的做法。

提示2-5:把伪代码改写成代码时,一般先选择较为容易的任务来完成。

提示 2-6:浮点运算可能存在误差。在进行浮点数比较时,应考虑到浮点误差。

判断一个浮点数中存的是否是整数的方法------断整数只需用它和它的整数部分比较即可

double  m=3;

if( floor(m+0.5) == m) printf("%d\n",n);

函数floor(x)返回x的整数部分,那么为什么不直接比较floor(m)和m呢?原因在于:浮点数的运算(和函数)有可能存在误差——不是一定存在,但经常都会。

假设在经过大量计算后,由于误差的影响,整数1变成了0.9999999999,floor的结果会是0而不是1!为了减小误差的影响,我们一般改成四舍五入,即floor(x+0.5)。continue;语句跳出本次循环

break;语句跳出整个循环

当循环次数确定,并且循环变量有规律的固定变化时,可以用for循环

当循环的次数是不确定的,并且循环变量有规律的不固定变化时,可以用while循环

提示2-7:while循环的格式为“while(条件)循环体;”

提示2-8:当需要统计某种事物的个数时,可以用一个变量来充当计数器。

提示2-9:不要忘记测试。一个看上去正确的程序可能隐含错误。

提示2-10:在观察无法找出错误时,可以用“输出中间结果"的方法查错。

注意:本身输入合法不溢出,但经过运算后有可能会溢出,编程的过程中需要考虑这一点。因为过程中的溢出,同样会造成最终结果的错误。

常用方法:取一个整数的后n位时,可以用该整除对10的n次方取模(取余)

提示2-11:在循环体开始处定义的变量,每次执行循环体时会重新声明并初始化。

提示2-12:要计算只包含加法、减法和乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余,结果不变。---------------编程常用方法

#include<stdio.h>#include<time.h> int main(){const int MOD = 1000000; int i, j, n, S = 0; scanf("%d", sn); for(i = 1; i <= n; i++){int factorial = 1;for(j = 1; j <= i; j++)factorial = (factorial * j % MOD); S = (S + factorial) % MOD;printf("%d\n", S) ;printf("Time used = %.21f\n", (double)clock() / CLOCKS_PER_SEC);return 0;}


计时函数clock():返回程序目前为止运行的时间。这样,在程序结束之前调用它,便可获得整个程序的运行时间。这个时间除以常数CLOCKS_PER_SEC之后得到的值以“秒”为单位。

提示2-13: 可以使用time.h和clock()函数获得程序运行时间。常数CLOCKS_PER_SEC和 操作系统相关,请不要直接使用clock()的返回值,而应总是除以CLOCKS_PER_SEC。

注意 整数/整数结果为整数,想得到浮点数,要一方为浮点数才行

注意:键盘输入的时间也被计算在内了——它的确是程序启动之后才进行的。为了避免输入数据的时间影响测试结果,我们使用一种称之为管道的小技巧:在Windows命令行下执行echo 20|abc,操作系统会自动帮你把20输入,其中abc是你的程序名。

提示2-14:很多程序的运行时间与规模n存在着近似的简单关系。可以通过计时函数来发现或验证这一关系。

经验:25!末尾有6个0,所以从第5项开始,后面的所有项都不会影响和的末6位数字一只需 要在裎序的最前面加一条语句“if(n>25) n=25;”,效率和溢出都不成问题了。



(2)文件操作

提示2-15:在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键, 即可结束输入。在Linux下,输入完毕后按Ctrl+D键即可结束输入。

提示2-16:变量在未赋值之前的值是不确定的。特别地,它不一定等于0。

提示 2-17:请在比赛之前了解文件读写的相关规定:是标准输入输出(也称标准I/O,即直 接读键盘、写屏幕)还是文件输入输出?如果是文件输入输出,是否禁止用重定向方式访问文件?

提示2-18:在算法竞赛中,选手应严格遵守比赛的文件名规定,包括程序文件名和输入输出文件名。不要弄错大小写,不要拼错文件名,不要使用绝对路径或相对路径。






原创粉丝点击