探讨程序与程序框图的互化问题

2015-11-28 13:06陈侃陈梅
高中生学习·高二版 2015年9期
关键词:程序框图题意语句

陈侃 陈梅

“算法初步”这一章是高中新课改数学新增的内容,其思想非常重要, 但算法并不神秘,例如运用消元法解二元一次方程组的过程就是一种算法. 为了有条理地、清晰地表达算法,往往需要将解决问题的过程整理成程序框图;为了能在计算机上实现,还要将程序框图翻译成计算机语言,也就是程序. 在学习过程中,能熟练地进行两者间的互化,是掌握算法的基础.

一、根据程序框图设计程序

根据程序框图设计程序的一般步骤:(1)理解题意,确定程序框图的结构(顺序结构、条件结构、循环结构);(2)明确各程序框的含义,并且写出对应的程序代码;(3)在有条件的情况下,进行上机运行.

例1 请写出下面的程序框图描述的程序.

[x<1?] [开始 ] [否][是][结束] [输出y] [输入x] [x<10?] [是] [否]

分析 通过观察,此程序框图为条件结构,而条件结构的程序为:

[IF 条件 THEN

语句体1

ELSE

语句体2

END IF]

解 所求算法的程序为: [INPUT x

IF x<1 THEN

y = x^2

ELSE

IF x<10 THEN

y = 2*x+1

ELSE

y = 3*x-11

END IF

END IF

PRINT y

END]

点拨 (1)在本程序中,IF-THEN语句中嵌入了另一个IF-THEN语句,在每个语句结束时都要写END IF; (2)程序中的符号都要用专用符号,例如:乘号、幂等.

例2 请写出下面的程序框图描述的程序.

[开始 ] [否][结束] [输出S] [k>50?][是]

分析 通过观察,此程序框图是循环结构,程序设计语言中有直到型和当型两种循环结构. 直到型循环结构对应的UNTIL语句是:

[DO

循环体

LOOP UNTIL 条件]

当型循环结构对应的WHILE语句是:

[WHILE 条件

循环体

WEND]

通过进一步分析我们发现,此循环结构用当型和直到型循环结构的语句都符合程序框图.

解法一 UNTIL语句编写计算机程序:

[k=1

S=0

DO

S=S+1/k

k=k+1

LOOP UNTIL k>50

PRINT S

END]

解法二 WHILE语句编写计算机程序:

[k=1

S=0

WHILE k<=50

S=S+1/k

k=k+1

WEND

PRINT S

END]

二、根据程序画出程序框图

根据程序画程序框图的一般步骤:(1)理解题意,确定程序的结构语句(条件语句、循环语句);(2)明确各函数的含义,一步一步转化为程序框图;(3)最后合成整个程序的程序框图. 在画程序框图的过程中,要注意所有的细节,例如各种语句所对应的框的特征,不要忘记起止框等.

例3 请根据给出的算法程序画出程序框图.

[INPUT “x=”; x

b = x MOD 2

IF b = 0 THEN

PRINT “it is even”

ELSE

PRINT “it is odd”

END IF

END]

分析 先读懂题意,先找出关键语句(条件语句,循环语句),此题为条件结构,然后发现程序中“MOD”语句,意味着需要取余数. 这里[b]等于[x]除以2的余数,即判断[x]是否为偶数,最后写出程序框图.

解 此程序的程序框图为:

[开始 ] [否][结束] [输出“x是偶数”] [b=0?][是] [b等于x除以2的余数] [输入x][输出“x是奇数”]

例4 请根据给出的算法程序画出程序框图.

[INPUT “x=”;x

k = 0

DO

x = 10*x+9

k = k+1

LOOP UNTIL x>2014

PRINT k

END]

分析 由题意,很容易发现此程序为直到型循环结构,再加上一些基本的赋值语句.

解 此程序的程序框图为:

[开始 ] [否][结束] [输出k] [x>2014?][是] [输入x]

通过以上例题分析,我们可以发现,只要掌握了程序框图的几种结构(顺序结构、条件结构、循环结构)和各种框的功能,知道程序框图的一般画法,掌握了程序的算法语句(输入、输出语句,条件语句、循环语句),并且能把程序框图的结构与程序的语句一一对应,那么我们就可以非常轻松、方便地解决程序与程序框图的互化问题.

程序与程序框图是描述算法的两种重要语言,它们各有优势. 程序框图具有直观、形象的特点,我们可以迅速地理解某一算法,但计算机无法理解它,程序虽复杂,但计算机可以执行,方便计算. 所以我们在学习算法这一章时,应该熟练掌握,灵活运用.

[练习]

1. 根据程序框图写出程序.

[开始 ] [否][结束] [输出S] [是] [输入a,b]

2. 根据程序框图写出程序.

[开始 ] [否][结束] [输出y] [是] [输入x]

3. 请根据下面的程序,画出程序框图. [INPUT “n=”;n

i = 1

S = 0

WHILE i<=n

S = S +(i+1)/i

i=i+1

WEND

PRINT “S=”;S

END]

[参考答案]

1.

[INPUT [a,b]

IF [a+b<1] THEN

[S=2*a+b]

ELSE

[S=1]

END IF

PRINT [S]

END]

2.

[INPUT “x=”;x

DO

y = x/3+2

x = y

LOOP UNTIL ABS(y-x)<1

PRINT y

END]

3.

[开始 ] [否][结束] [输出s] [是] [输入n] [[i≤n?]]

猜你喜欢
程序框图题意语句
笑笑漫游数学世界之理解题意
弄清题意 推理解题
审清题意,辨明模型
明确题意 正确解答
重点:语句衔接
如何搞定语句衔接题
作文语句实录