《2022年程序设计的方法 .pdf》由会员分享,可在线阅读,更多相关《2022年程序设计的方法 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序设计的方法1. 模块化:(1) 把一个较大的程序划分为若干子程序,每一个子程序解决一个总是独立成为一个模块;(2) 每一个模块又可继续划分为更小的子模块;(3) 程序具有一种层次结构。注:运用这种编程方法,考虑问题必须先进行整体分析,避免边写边想。2. 自顶向下:(1) 先设计第一层 ( 即:顶层 ) ,然后步步深入,逐层细分,逐步求精,直到整个问题可用程序设计语言明确地描述出来为止。(2) 步骤:首先对问题进行仔细分析,确定其输入、输出数据,写出程序运行的主要过程和任务;然后从大的功能方面把一个问题的解决过程分成几个问题,每个子问题形成一个模块。(3) 特点:先整体后局部,先抽象后具体。
2、3. 自底向上:(1) 即先设计底层,最后设计顶层;(2) 优点:由表及里、由浅入深地解决问题;(3) 不足:在逐步细化的过程中可能发现原来的分解细化不够完善;(4) 注意:该方法主要用于修改、优化或扩充一个程序。4. 例:求 1 到 n 之间的素数 。( ppro1_1.pas ) 解:要求 1 到 n 之间的素数, 程序要做的事就是从1 开始依次找, 判断是否是素数,是则打印出来,否则继续往下找,直到n 为止。于是初步设想成:begin read(n); number:=2; while numbern do begin if number是一个素数 then write(number);
3、 number 取下一个值;end end. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 第二步:细化“ number 是一个素数”及“ number 取下一个值”。(1) 细化“number 是一个素数”:“number 是一个素数”这是一个布尔值,当number 是一个素数时为true ,否则为 false 。细化如下:k:=2; lim:=number-1; repeat if nubmer能被 k 整除 then p
4、rim:=false else begin k:=k+1; prim:=true; end; until not(prim) or (k达到 lim) ;(2) 细化“number 取下一个值”:number:=number+1; 第三步:细化“ number 能被 k 整除”及“k 达到 lim ”。(1) 细化“number 能被 k 整除”:number mod k=0; (2) 细化“k 达到 lim ”:k=lim; 第四步:补充完整程序。第五步:从所有的素数除了2 之外都是奇数的角度出发优化程序。(ppro1_2.pas ppro1_3.pas) 程序设计步骤: 1. 分析问题:对
5、要解决的问题,首先必须分析清楚,明确题目的要求,列出所有已知量,找出题目的求解范围、解的精度等。例“兔子的繁殖问题”,必须找出其繁殖规律。2. 建立数学模型:对实际问题进行分析之后,找出它的内在规律,就可以建立数学模型。只有建立了模型的问题,才能可能利用计算机来解决。如上例,可推出递推公式un=un-1+un-2(这是菲波那契数列) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 3. 选择算法:建立数学模型后,还不能着手编程序
6、,必须根据数据结构,解决问题的算法。一般选择算法要注意:(1) 算法的逻辑结构尽可能简单;(2) 算法所要求的存贮量应尽可能少;(3) 避免不必要的循环,减少算法的执行时间;(4) 在满足题目条件要求下,使所需的计算量最小。4. 编写程序:把整个程序看作一个整体,先全局后局部,自顶向下,一层一层分解处理,如果某些子问题的算法相同而仅参数不同,可以用子程序来表示。5. 调试运行;6. 分析结果;7. 写出程序的文档:主要是对程序中的变量、函数或过程作必要的说明,解释编程思路,画出框图,讨论运行结果等。8. 例 1:输入奇数n,计算并输出n 位的魔方阵。 ( ppro2.pas )说明:(1) 魔
7、方阵就是 n*n 个不同的正整数按方阵排列时,它的每一行,每一列以及沿对角线的几个数的和具有同一性质的方阵。(2) 由 1 到 n*n 个自然数数构成的魔方阵是最基本的,又称为“幻方”,这种方阵的每行、每列和每个对角线上的元素的和全部相等,亦即等于一个常数。该常数是n(n*n+1)/2。(3) 方法:首先确定 1 的位置,通常放在第一行的中间位置;然后当前自然数的右上方放下一个自然数;如果当前自然数在第一行但不在最右侧,则下一个自然数在最后一行,列数右移一列;如果当前自然数在第一行最右侧,则下一个自然数在当前自然数的下侧;如果当前自然数在其它行的最右侧,则下一个自然数在上一行的最左侧。9. 例
8、 2:任何一个整数的立方都可以写成一串奇数之和。( ppro3.pas )说明:(1) 这是著名的尼科梅切斯定理。即13=1 23=3+5=8 33=7+9+11=27 , (2) 数据间关系的规律:n3 是 n 个奇数之和,如23 是 2 个奇数之和, 33 是 3 个奇数之和;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 这 n 个奇数是相邻的,只要知道各式的第一个奇数也就知道所有的n 个奇数:组成 13 的 1 个奇数是
9、奇数序列中的第1 个奇数;组成 23 的 2 个奇数中最大的奇数是奇数序列中的第3(3=1+2) 个奇数 ( 值为 5) ;组成 33 的 3 个奇数中最大的奇数是奇数序列中的第6(6=1+2+3) 个奇数 ( 值为11) ;由此推出:组成 n3 的 n 个奇数中最大的奇数是奇数序列中的第m(m=1+2+3+.+n)个奇数,即: m=n(n+1)/2 奇数序列中第m个奇数的值是: modd=2m-1 modd表示“第 m个奇数”,是组成n3 的奇数序列中最大的一个奇数。例如,第 2 个奇数是 3,第 6 个奇数是 11。n3=modd+(modd-2)+(modd-4)+.(modd-2(n-
10、1) 子程序一、子程序设计的需要:1. 细化算法的过程,可以将每一个子问题运用一段相对独立的小程序来解决;2. 一些具有相同或功能相似的程序段在程序中的不同位置反复出现,可以将这样的程序段作为一个整体,用一个标识符给它起一个名字,凡是需要这个程序段的地方只要简单地引用其标识符即可。二、函数1. 标准函数2. 自定义函数3. 自定义函数的定义function 函数名 ( 形参表 ): 函数类型 ; 函数首部 var 说明部分 begin 函数体 . . 函数名 := 表达式名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整
11、理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - end; 4. 函数的调用函数名 ( 实在参数表 ) 5. 例 1: 编写一个函数, 返回布尔值判别输入三个字符是按序或无序排列。程序中若输入 abc 则显示顺序排列,若输入cba 则显示逆序排列,其他情况显示无序排列,当输入 * 程序结束。 (pfun1.pas) 三、过程1. 过程的定义procedure 过程名 ( 形式参数表 ); 过程首部 var 说明部分 begin 过程体 . . end; 2. 过程的调用过程名 ( 实在参数表 ); 3. 例 1: 某部队举行一次军事演习,A、B两队约好
12、在同一时间从相距100公里的各自驻地出发相向运动。A队的速度为10 公里 / 小时, B队的速度为8 公里 / 小时。一通讯员骑马从A 地同时出发为行进中的两队传递消息,速度为60 公里 / 小时。每遇一队立即折回驶向另一队,当两队距离小于0.5 公里时,停下来不再传递消息。求此时通讯员跑了多少趟 ( 从一队到另一队为一趟) ?(p118.pas) 4. 例 2: 已知二个合数A=18和 B=96,键入 N 个10,400之间的自然数,求这N个数中所有合数与A、B的最大公约数。 (p120.pas) 四、过程中的参数1. 局部变量和全局变量全局变量在程序开头的说明部分中定义和说明的量;局部变量
13、在过程或函数中说明的变量。2. 变量的作用域全局变量作用于整个程序;局部变量作用于过程或函数。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 3. 值形参和变量形参值 形 参传值变量形参传地址4. 例 3: 作用域的示例ppro4.pas 和 ppro5.pas四、综合练习( ppro8.pas )前提知识:计算任意三角形( 三条边的长度分别为a、b、c) 的面积 S可以用海伦公式:S=sqrt(x-a)(x-b)(x-c) 其
14、中: x=(a+b+c)/2 题目描述: 从键盘输入三个数,判断以这三个数为边能否组成一个三角形,若不能,则给出适当信息;若能,则输出是否为等边、等腰或直角三角形,并输出其面积。编程要求:1. 将从键盘输入三个数设计成一个过程,过程名为input ,带三个变量参数a,b,c ;2. 将判断三个数能否组成三角形(包括是什么三角形)设计成一个函数,函数为 ang,参数为在input中接收到的三个数,返回的值表明了能否组成三角形或三角形的类型;3. 将计算三角形面积设计成一个函数,函数名area ,带三个值参数,返回的值为三角形的面积;4. 要求使程序的主程序的结构明快些,并要求在程序中的适当的说明。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -