第二部分结构化设计预览.pptVIP

  • 2
  • 0
  • 约1.3万字
  • 约 75页
  • 2016-11-29 发布于湖北
  • 举报
Visual C++与面向对象程序设计教程 1、程序结构:顺序、选择、循环 2、数据:简单数据、复杂数据;常量、变量 3、函数:库函数、自定义函数(选择个好的算法实现) 2.1 程序的基本控制结构 结构化程序设计方法 模块化程序结构 三种基本程序结构 模块化程序结构 模块化 :就是把程序划分为若干个部分,每个部分独立存放、完成一个特定的功能。其目的是降低程序的复杂度,使设计出来的程序便于阅读、调试和维护。 一个模块可以是一条语句、一段程序、一个函数等 基本特征是其仅有一个入口和一个出口 模块相互独立,内聚性很强,一个模块完成一个功能 三种基本程序结构 按照结构化程序设计的观点, 任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合: 顺序结构:程序是按程序语句或模块在执行流中的顺序逐个执行。 选择结构:程序是按设定的条件实现程序执行流的多路分支。 循环结构:程序是按给定的条件重复地执行指定的程序段或模块。 结论:理论上已经证明,用三种基本程序结构可以实现任何复杂的算法。 2.2 C++语言的控制结构 顺序语句 选择结构 一路选择分支 两路选择分支 多路选择分支 循环结构 当型循环 直到型循环 for 循环 出口控制 VC++语言的控制结构 顺序 选择(分支) if ( … ) else{ …;} switch() {case ……;default:…;} 循环 while(){…;} for(...){…;} do{...} while(...); 出口 break; continue; 2.3 结构化程序设计 结构化程序设计支持“自顶向下, 逐步求精”的程序设计方法。 “自顶向下” 是将复杂、大的问题划分为小问题,找出问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。 “逐步求精” 是将现实世界的问题经抽象转化为逻辑空间或求解空间的问题。复杂问题经抽象化处理变为相对比较简单的问题。经若干步抽象(精化)处理,最后到求解域中只是比较简单的编程问题。 例2-1 验证“哥德巴赫猜想” “哥德巴赫猜想”表述为:任何 一个大于等于4的偶数均可以表 示为两个素数之和。 求解第一步 提出问题: 验证哥德巴赫猜想 第二步 设一上限数M,验证 从4到M的所有偶数是否能被 分解为两个素数之和。 1. 定义一个变量X,初值为4。 2. 每次令其加2,并验证X能否 被分解为两个素数之和,直到 X不小于M为止。 验证哥德巴赫猜想(续一) 第三步 如何验证X是否能被分解为两个素数之和。 1. 从P=2开始; 2. 判别X—P是否仍为素数: 3. 若是,打印该偶数的分解式。 4. 否则,换更大的素数,再继续执行2.。如此循环,直到用于检测的素数大X/2且X 与其之差仍不是素数,则打印“哥德巴赫猜想”不成立。 验证哥德巴赫猜想(续二) 第四步 生成下一个素数。 (1)当前素数P加1 (2)判别P是否是素数; (3)若是素数,返回P; (4)否则,P加1,继续执行( 2)。 验证哥德巴赫猜想(续三) 经过四步分解精化,将“验证哥德巴赫猜想”这个命题已经分解为计算机可以求解的数学模型了。 剩下的问题就是编程求解了。如何编程正是我们这门课程要解决的问题。 关于“验证哥德巴赫猜想”的求解程序稍后给出。 2.4 伪代码 C语言的控制结构语句和自然语言结合起来描述算法 比画流程图省时、省力,且更容易转化为程序 不能运行 例2-2 哥德巴赫猜想 算法分析: 1) 用“筛选”法生成素数表PrimeList[M]。先在素数表中产生0到M-1的所有自然数,然后将已确定的所有素数的倍数置0(求模取余为0)。   2,3,5,7,13,17,... 2) 这样一来,素数表中有许多0,为找下一个素数,要跳过这些0。 3) 分解0到M-1之间的所有偶数; ? 循环(x M) [x初值取4] ? 先取素数P=2,判别 若PrimeList[x-p]等于0,说明分 解不成功,p取素数表中下一个素数;再执行? ? 若PrimeList[x-p]不等于0,分解成功,打印分解式 ? x = x + 2,继续执行?,检查下一个偶数。 程序逻辑功能框图 程序模块结构 程序(生成素数表子函数) #include iostream.h #define M 10001 /* 定义验证范围 */ void CreatPrimeList(int PrimeList[]) { int i, j; for(i=0; iM; i = i+1) Pr

文档评论(0)

1亿VIP精品文档

相关文档