![C语言程序设计实例教程(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/105/41865105/b_41865105.jpg)
1.2 程序和程序逻辑
学习目标
1)掌握算法与程序的概念。
2)了解算法的基本描述方法。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/15_05.jpg?sign=1739674738-iUvziBNVM3pabmcBeq7uZKmi4JZwEtG2-0-e0aad19e36a90875f501a579b2011d28)
实例3
实例3 程序与算法的概念——梵塔推理
实例任务
将1号柱大小不等的三个物体,移动到3号柱上,顺序必须与1号柱顺序一致。要求每次只移动一个物体,而且每根柱上小块物体必须置于大块物体之上。其移动过程如图1-10所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/16_01.jpg?sign=1739674738-quvIEaF7zmX2K4MVOvfuBcoEoPj8NzLR-0-d4368d12c1b0634e190e1edd383279ef)
图1-10 梵塔推理移动过程图
相关知识
1.程序
程序包括两部分,一是对数据的描述,即数据结构;二是对操作的描述,即操作步骤,也称为算法,它指明了解决某一具体问题的方法和步骤。因此,计算机科学家Nikiklaus Wirth提出了如下公式:
数据结构+算法=程序
就算法而言,大致可分为两大类:一类是数值运算算法,用于求解数值;另一类是非数值运算算法,用于分析推理和逻辑推理。如实例中的梵塔推理并非求解一定的数值,而只是完成一定的推理操作。
2.算法的自然语言描述
实例为梵塔推理难题的解题步骤,也是人逻辑思维的基本方法。计算机的算法思想与此类似,只是表示方法不同而已。
用计算机解此题的难点在于,如何用数据结构表示每块物体的所在位置,以及如何描述某一物体由1号柱移动到2号柱这一动作,这也是算法设计的关键所在。梵塔推理可以用自然语言表示如下:
将A由1号柱移到3号柱mov(A:1,3 )
将B由1号柱移到2号柱mov(B:1,2 )
将A由3号柱移到2号柱mov(A:3,2 )
将C由1号柱移到3号柱mov(C:1,3 )
将A由2号柱移到1号柱mov(A:2,1 )
将B由2号柱移到3号柱mov(B:2,3 )
将A由1号柱移到3号柱mov(A:1,3 )
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/17_01.jpg?sign=1739674738-Wa3Fl5wjxXcBrLcetlgK6a2GEIctFuBh-0-5a6a15ac4d6c37c1710b996c514630ca)
实例4
实例4 算法图形描述——求n!
实例任务
数学上,阶乘n!=1×2×3×…×n。现要求输入n的值,求出n!的值。程序的运行结果如图1-11所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/17_02.jpg?sign=1739674738-GDRoLZEU7derUJZAHxQdvaXqw5NU5j2i-0-f3b29de8fea0eb1215f6fc0c5a93bfc8)
图1-11 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/17_03.jpg?sign=1739674738-j04V0GKyWuc6iyHXtcB6GbEFeCm5p1zw-0-f2e66dfade3dcefa1227d3e46ddf91ad)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/18_01.jpg?sign=1739674738-Ikk4E9EOO5iz7WeFwZgXDDMjWiAL9xVC-0-4751ea399ab882faf3230fc0e52b0205)
相关知识
1.N-S图
流程图除用自然语言描述外,还可以使用图形来描述,常用的流程图有传统流程图和N-S图。N-S图又称为结构化盒图,它使用一种方框来描述程序的基本结构。本实例程序可绘制成如图1-12所示的N-S图。
2.传统流程图
传统流程图是通过指定的几何图形框和箭头线来描述各个环节的操作和执行的过程。这种描述方法比较直观,而且程序走向清晰,非常易于读者理解,易于编写C语言代码。但如果程序比较复杂,则使用传统流程图描述比较烦冗,不易理解。本实例程序可绘制成如图1-13所示的传统流程图。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/18_02.jpg?sign=1739674738-40EAiwHZOW9XOghmdRtJPP7n3RRYS9dw-0-3bee2dd61455293a2fc1bbdbb9deb9ca)
图1-12 N-S图
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/18_03.jpg?sign=1739674738-qI2Qy9f1NuKfKRuMgrriNSCNnblHjHKk-0-96d29e4d129de39a69711042406d56a9)
图1-13 传统流程图
在传统流程图中,长方形框表示执行一定的操作,如赋值或计算等;菱形框表示条件判断;椭圆矩形框表示程序的开始与结束;平行四边形表示输入输出数据;箭头表示程序语句的执行方向。
课堂精练
1)用N-S图描述1+2+3+…+10的值的算法。请将图1-14中的空缺语句补充完整。
2)用传统流程图描述1+2+3+…+10的值的算法。请将图1-15中的空缺语句补充完整。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/19_01.jpg?sign=1739674738-8A9kfEu2So7nI4WkeCHoDySBkmty0cpp-0-3c2feeec4a3fd39e4f4561eb82a6c99f)
图1-14 N-S图
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/19_02.jpg?sign=1739674738-u47ALBFEh7shMjqHdvpqGNkXSkrsPgLD-0-caf4ef094a4b94df7f42fd7e1d9ef3a3)
图1-15 传统流程图