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(\n); /* 最后输出一个换行符 */ return 0; } 内层循环结束: 找到m使m*m==n(n是完全平方数) 试探了所有可能,但都不成功(n不是) 求一系列完全平方数 可以考虑把判断完全平方数定义为函数(请自己做) 方法二:可看到需要打印的一定是从1开始连续的一些整数的平方,可以从1开始打印到某个数平方大于200 for (n = 1; n * n = 200; ++n) printf(“%d ”, n * n); /*注意打印什么*/ 方法一:产生所有备选数据(1到200的整数),检查排除不合格的。生成与检查是解决问题的常用方法。 方法二:是针对具体问题的特殊方法,通常更简单,效率更高。解决问题时应特别注意挖掘这种特殊方法 判断素数(定义谓词) 写一个函数判断整数是否为素数 类型特征可用 int isprime(int),令其返回0/1值 n是素数当且仅当它没有真因子。m是n的因子可以用条件(n%m == 0)描述,
显示全部