
2.4 结构化程序设计应用举例
作家编写一部著作,往往不可能一次就把内容写好,一般总是先确定目标和主题,然后构思分成若干章,定出各章题目和大致内容,把每章分成若干节,再细分为若干段……,即由粗到细,逐步具体化,直到能执笔写出文字为止。而人们编写程序与写书一样,常常使用本章前面介绍的结构化程序设计方法:自顶向下;逐步求精;模块化设计;结构化编码。下面举例说明结构化程序设计方法,后续编程将主要采用这种方法。
【例2-15】对于100个正整数,输出其中的回文数(所谓回文数是指左右数字完全对称的自然数,例如,11,121,1221等都是回文数)。
采用自顶向下、逐步细化方法来处理这个问题。先将这个问题大体分为3个步骤:输入100个正整数;把其中的回文数找出来;输出这些回文数,如图2-11所示。
从图2-11中可以很明显看出,目前找回文数的这三步骤还是非常“笼统”和“抽象”的,需进一步细化;这3个部分可以采用3个功能模块来实现,即可编写3个函数来实现。
对于第一部分输入100个正整数,考虑通过a1~a100(实现时用数组)来接收这100个数据,如图2-12所示。

图2-11 输出回文数初步流程图

图2-12 第一部分流程图
对于第二部分的细化:对于a1~a100中每一个数逐一判断,若判断它不是回文数,则将它的值置为零,这样最后留下的非零数,即为回文数。那么如何判断是否为回文数呢?将ai逆序得到x,若ai等于x,则说明它是回文数,如图2-13所示。
对于第三部分的细化:根据第二部分,只要对于a1~a100中每一个数逐一判断ai不等于零(它是回文数),即可输出ai,如图2-14所示。

图2-13 第二部分流程图

图2-14 第三部分流程图
到此为止,细化完毕,每一部分基本上都可以用高级语言的语句实现,只要将上述各图综合起来,即可得到完整的算法流程图。
从中可以看出,“自顶向下,逐步求精”是结构程序设计方法的核心。读者应当学会使用这种方法来思考和解决问题。
“模块化设计,结构化编码”,3个功能模块,采用结构化编码规范,来对应编写成3个函数实现,main()主函数中顺序调用这3个函数来实现本例功能。
源程序:找回文数C语言源程序
