流程图(程序框图)高考题型例解

2012-08-27 02:41湖北省水果湖高级中学伍先军
中学数学杂志 2012年3期
关键词:程序框图流程图表达式

☉湖北省水果湖高级中学 伍先军 赵 宇

在所有实施新课改的省份的高考数学试题中,都不约而同地出现了流程图(程序框图).

图1是2011年全国新课标高考数学试题中的第5题:

执行图1所示的程序框图,如果输入的N是6,那么输出的p是( )

A.120

B.720

C.1 440

D.5 040

编制流程图(程序框图)是利用计算机编程解决问题的关键性的一步.流程图就是用来描述解决问题的操作步骤的.它由功能图标和流程线组成.流程图的功能图标有4种:圆角矩形、平行四边形、矩形、菱形,分别表示不同的功能.流程线的一端带有箭头,表示程序运行的走向(见图2).

解流程图(程序框图)题,不外乎有两种基本的解法:

①机械模拟,②模块归纳.

所谓“机械模拟”,是指我们按照流程线的走向,一步一步地忠实地模拟计算机操作,得到最终结果.一般适用于数据规模较小、功能单一的程序.

所谓“模块归纳”,是指我们把一个较大的复杂的程序,划分为一个或多个功能相对独立的较小的子模块,分析每个子模块的入口数据、出口数据,以及这个子模块对入口数据进行了怎样的操作从而得到出口数据的,这样,我们就归纳得出:这个子模块的实质,就是一个从输入数据到输出数据的映射关系,即函数,可抽象地记为:

输出变量(或中间变量)=f(输入变量1,输入变量2,…,输入变量n).

图2

表1

若干个小的子模块再组成一个大的功能模块,最终,我们就能掌握整个程序的总体功能,再用数学的方式解决,写出程序运行结果.对于一些功能较复杂、数据规模较大的大中型程序,这种“模块归纳”的方式是比较合适的.进行模块归纳时,要特别注意某些变量的初值和终值(统称为端点)对输出变量(或中间变量)的影响,在归纳得出函数关系后,要返回到流程图中去进行端点校验.

解高考流程图题的根本方法:

【简单题】只需机械模拟即可.

【稍难题】先机械模拟理清算法实质,再模块归纳得出函数关系(或不等式),最后端点校验以确保正确.

【变式题】在掌握机械模拟和模块归纳两种方法后随机应变.

解流程图题四十字口诀(原创):

铅笔作指针,箭头永向前.

表格当内存,旧值换新颜.

决策看条件,循环是关键.

输入和输出,函数来相连.

下面以2011年全国新课标高考数学试题第5题为例说明.

从流程图(见本文开头)的“开始”图标开始,顺着流程线走,从现在开始,我就变成一台计算机了!我用左手拿一支铅笔,笔尖指向当前即将执行的语句(相当于语句指针),右手拿一支笔,在表格中即时记录、修改变量的值.

左手铅笔指向“输入N”,现在我遇到了一个字母N,N是什么?N就是一个变量,我先在草稿纸上画一个表格,在表头写上变量的名字N(见表1),当做计算机存储空间中的一个存储单元,现在输入N的值是6,在N的下面写上6.

下一句:左手铅笔指向语句“k=1,p=1”,这本是两句,合在一起写了.现在遇到了两个新的变量k和p,把这两个变量的名称也写入到表格的表头中,现在本语句执行后它们的值都为1了,在它们的名称下都写下1.

继续!左手铅笔指向语句p=p·k.这是赋值语句,其中的“=”称为赋值号,完全不同于数学中的等号,它表示将“=”右边的表达式(可以是一个常量数据,或者是一个变量,也可以是一个表达式,本句是表达式p·k)的值(计算后),赋给“=”左边的变量.因此,“=”左边只能是变量,不能是常量或表达式.

那么,计算机是如何执行p=p·k的呢?先计算“=”右边的算术表达式p·k的值:从存储空间中读取变量p的当前值为1(读取操作不改变变量的值),读取变量k的当前值为1,在CPU(中央处理器)中计算1·1,结果为1,再将结果1写入(赋给)“=”左边的变量p所在的存储空间,现在p的值被改为1了(即使它原来的值就是1,计算机仍会执行写入操作,写入操作会改变变量的值).此时,划掉此前的值1,写上新值1.

继续!左手铅笔指向决策图标:判断k<N是否成立,计算机读取变量k的当前值为1,变量N的当前值为6,计算关系表达式1<6的值,显然1<6是成立的,计算的结果是真(用“是”、“真”或“True”等表示),程序此时转向“是”分支,执行k=k+1(左手铅笔指向此句).同样,这也是一条赋值语句,先计算k+1的值:读取k的当前值为1,在CPU中计算1+1,结果为2,再将结果2写入到变量k,故k的值改为2了(划掉此前的值1).

继续!再次执行p=p·k,读取p的值为1,k的值为2,计算1·2,得2,将结果2赋给(写入)变量p,即p的值改为2了(划掉此前的值1).

继续!判断k<N是否成立,计算机读取变量k的值为2,变量N的值为6,计算关系表达式2<6,显然2<6是成立的,计算的结果是真,程序继续执行“是”分支,执行k=k+1,先计算k+1的值:读取k的值为2,2+1得3,写入到变量k,故k的值改为3了(划掉此前的值2).

如此继续执行,你会发现:赋值语句p=p·k,条件判断k<N,赋值语句k=k+1,这3条语句被反复执行了多次,这种结构,在流程图中构成了“环形”,在计算机语言中称为“循环结构”.显然,这种循环结构必须要有结束退出的时候,否则,计算机就会陷入“死循环”,这是程序设计者必须注意的.

你可以不厌其烦地一步一步地模拟计算机执行下去,直到k=N,此时k<N不成立了,就转向“否”分支,输出p的值为720.

那么,怎样提高解题效率呢?换言之,如果本题输入的N的值更大,你能较快地得出答案吗?

关键在于流程图中的“环形结构”,也就是循环结构.在循环结构中往往有两种功能的语句:“关键运算”和“条件控制”.所谓“关键运算”是指输出变量(本例为p)参与的运算,本例即p=p·k.所谓“条件控制”是指循环条件(本例即k<N)中的变量(本例为k)参与的运算,本例即k=k+1.通过这两种功能的语句,你可以得出这段循环语句的功能就是连乘(注意变量p的初值必须为1,变量p常称为累乘器),乘数从k=1到k=N,每次增加1(这里的变量k常称为计数器),然后观察循环之前计数器的初值和循环结束时计数器的终值,重点分析计数器的初值和终值是否参与了关键运算(端点校验),最后得出结论:这段程序计算的是p=1*2*…*N(即N的阶乘N!),现在无论输入的N值是多少,你都可以迅速地用数学的方法计算结果了.这就是前述的“模块归纳”.

猜你喜欢
程序框图流程图表达式
“顺势而下”破解程序框图
灵活选用二次函数表达式
表达式转换及求值探析
算法与程序框图常考类型
一种程序源代码的标准化流程图转化方法∗
浅析C语言运算符及表达式的教学误区
程序框图问题的精彩交汇
程序框图题盘点
腹腔镜手术护理流程图在腹腔镜手术围术期护理中的应用
议C语言中循环语句