6基本编程技术.ppt

基本编程技术 要目 ? 循环程序设计 ? 简单的重复动作 ? 递推、迭代和逼近 ? 浮点计算的误差累积 ? 从循环的中间退出 ? 循环中的变量 程序设计:关注基本技术和规律 ? 要完成一个程序,首先要分析问题寻找解决方案,这需要 聪明才智和想象力,以及相关领域的知识和技术 ? 要把设计变成可运行程序,既需要发挥智力,又需要有条 有理的工作,还要非常细心。 一个小错误 就可能使程序无 法编译或 不能正确执行 ? 学习程序设计需要注意规律性的东西 ? 三种流程模式是重要总结,需要掌握其使用方法和规律 ? 顺序模式最简单 ? 选择模式:要确定判断条件以及不同情况下的动作 ? 开始学习编程的难点就在实现重复执行的循环。重复执 行比较复杂,牵涉问题多 循环程序设计 ? 在程序里写循环的基础是发现计算中需要循环。应注意计 算中的重复性动作,通过引进循环可能统一描述和处理 ? 常见的重复动作实例,如需要: ? 对一批类似数据做同样的加工处理 ? 累积一批可以按规律计算出的数据(累加等) ? 反复从一个结果算出下一结果(递推) ? 有些情况可以或需要用循环处理: ? 如果重复次数确定,可以写一些独立操作,但重复次数 多时就应该考虑用循环统一描述,以简化程序 ? 如果重复次数无法确定,就必须用循环。因为这时不知 道写多少个独立的操作,无法处理 基本循环技术 ? 例:求 13 到 315 的所有数的平方根之和 可以一个个地加,但更方便的是写一个循环完成工作 ? 需要一个变量保存部分和,逐步把各个平方根加上去 ? 需要一个变量保存变动轨迹,从初值开始每次修改 ? 很典型 for 循环。假定已有总和变量 sum 和循环变量 n : for (sum = 0.0, n = 13; n = 315; ++n) sum = sum + sqrt(n); 这里 n 值递增,称为向上循环。也可以用向下循环: for (sum = 0.0, n = 315; n = 13; --n) sum += sqrt(n); ? 两个循环等效。没有特殊需要都应采用向上循环 ? 请用 while 语句重写上面两种方式 循环控制和浮点数 ? 求 [13, 315] 间每隔 7 的各整数之和也很容易 ? 课堂练习 ? 一般不用浮点数控制循环 ,尤其是增量为小数或包含小数 时。例:求从 0 到 100 每隔 0.2 的数的平方根之和。写: double sum, x; for (sum=0.0, x=0.2; x=100.0; x+=0.2) sum += sqrt(x); 有问题。浮点计算有误差,不能保证循环体执行 500 次 应写: int n; double sum; for (sum = 0.0, n = 1; n = 500; ++n) sum += sqrt(0.2*n); 求一系列完全平方数(多种算法) ? 考虑打印出 1 到 200 间的完全平方数。存在多种方法 ? 方法一:逐个检查区间里各个整数,遇到平方数就打印。 重复做,每次检查一个数。循环的框架为: for (n = 1; n = 200; ++n) if (n 是完全平方数 ) 打印 n; ? 其中的一个数是否完全平方数没有直接判断手段。可以考 虑顺序检查,是否有某个数的平方恰为 n 这构成了(循环内的)新循环,需要另一循环变量 另 m 从 1 开始递增,直至 m*m 大于 n 结束,等于就输出 n : for (m = 1; m * m = n; ++m) if (m * m == n) 打印 n; 求一系列完全平方数 ? 综合起来可得到完整程序: #include stdio.h int main () { int m, n; for (n = 1; n = 200; n++) for (m = 1; m * m = n; m++) if (m * m == n) printf(%d , n); printf(\ ); /* 最后输出一个换行符 */ return 0; } ? 内层循环结束: ? 找到 m 使 m*m==n ( n 是完全平方数) ? 试探了所有可能,但都不成功( n 不是) 求一系列完全平方数 ? 可以考虑把判断完全平方数定义为函数( 请自己做 ) ? 方法二:可看到需要打印的一定是

文档评论(0)

1亿VIP精品文档

相关文档