第16讲基本算法语句

普通高中课程标准实验教科书—数学

高三新数学第一轮复习教案(讲座16)—基本算法语句

一.课标要求:

1.经历将具体问题的程序框图转化为程序语句的过程,理解几种基本算法语句——输入语句、输出语句、赋值语句、条件语句、循环语句,进一步体会算法的基本思想;

2.通过阅读中国古代数学中的算法案例,体会中国古代数学对世界数学发展的贡献。

二.命题走向

算法是高中数学课程中的新内容,本章的重点是算法的概念和算法的三种逻辑结构。 预测2009年高考对本章的考察是:以选择题或填空题的形式出现,分值在5分左右,本讲考察的热点是识别程序和编写程序。

三.要点精讲

1.输入语句

输入语句的格式:INPUT “提示内容”; 变量 例如:INPUT “x=”; x功能:实现算法的输入变量信息(数值或字符)的功能。 要求:

(1)输入语句要求输入的值是具体的常量;

(2)提示内容提示用户输入的是什么信息,必须加双引号,提示内容 “原原本本”的在计算机屏幕上显示,提示内容与变量之间要用分号隔开;

(3)一个输入语句可以给多个变量赋值,中间用“,”分隔;输入语句还可以是““提示内容1”;变量1,“提示内容2”;变量2,“提示内容3”;变量3,„„”的形式。例如:INPUT“a=,b=,c=,”;a,b,c。

2.输出语句

输出语句的一般格式:PRINT“提示内容”;表达式 例如:PRINT“S=”;S

功能:实现算法输出信息(表达式) 要求:

(1)表达式是指算法和程序要求输出的信息;

(2)提示内容提示用户要输出的是什么信息,提示内容必须加双引号,提示内容要用分号和表达式分开。

(3)如同输入语句一样,输出语句可以一次完成输出多个表达式的功能,不同的表达式之间可用“,”分隔;输出语句还可以是“提示内容1”;表达式1,“提示内容2”;表达式2,“提示内容3”;表达式3,„„”的形式;例如:PRINT “a,b,c:”;a,b,c。

3.赋值语句

赋值语句的一般格式:变量=表达式 赋值语句中的“=”称作赋值号

作用:赋值语句的作用是将表达式所代表的值赋给变量;

要求:

(1)赋值语句左边只能是变量名字,而不是表达式,右边表达式可以是一个常量、变量或含变量的运算式。如:2=x是错误的;

(2)赋值号的左右两边不能对换。赋值语句是将赋值号右边的表达式的值赋给赋值号左边的变量。如“A=B”“B=A”的含义运行结果是不同的,如x=5是对的,5=x是错的,A+B=C是错的,C=A+B是对的。

(3)不能利用赋值语句进行代数式的演算。(如化简、因式分解、解方程等),如

yx21(x1)(x1)

这是实现不了的。在赋值号右边表达式中每一个变量的值必须事先赋给确定的值。在一个赋值语句中只能给一个变量赋值。不能出现两个或以上的“=”。但对于同一个变量可以多次赋值。

4.条件语句

(1)“IF—THEN—ELSE”语句

格式: IF 条件 THEN 语句1 ELSE

语句2 END IF

说明:在“IF—THEN—ELSE”语句中,“条件”表示判断的条件,“语句1”表示满足条件时执行的操作内容;“语句2”表示不满足条件时执行的操作内容;END IF表示条件语句的结束。计算机在执行“IF—THEN—ELSE”语句时,首先对IF后的条件进行判断,如果符合条件,则执行THEN后面的“语句1”;若不符合条件,则执行ELSE后面的“语句2”。

(2)“IF—THEN”语句 格式: IF 条件 THEN

语句 END IF

说明:“条件”表示判断的条件;“语句”表示满足条件时执行的操作内容,条件不满足时,直接结束判断过程;END IF表示条件语句的结束。计算机在执行“IF—THEN”语句时,首先对IF后的条件进行判断,如果符合条件就执行THEN后边的语句,若不符合条件则直接结束该条件语句,转而执行其它后面的语句。

5.循环语句

(1)当型循环语句

当型(WHILE型)语句的一般格式为: WHILE 条件

循环体 WEND

说明:计算机执行此程序时,遇到WHILE语句,先判断条件是否成立,如果成立,则执行WHILE和WEND之间的循环体,然后返回到WHILE语句再判断上述条件是否成立,如果成立,再执行循环体,这个过程反复执行,直到一次返回到WHILE语句判断上述条件不成立为止,这时不再执行循环体,而是跳到WEND语句后,执行WEND后面的语句。因此当型循环又称“前测试型”循环,也就是我们经常讲的“先测试后执行”、“先判断后循环”。

(2)直到型循环语句

直到型(UNTIL型)语句的一般格式为: DO

循环体

LOOP UNTIL 条件

说明:计算机执行UNTIL语句时,先执行DO和LOOP UNTIL之间的循环体,然后判断 “LOOP UNTIL”后面的条件是否成立,如果条件成立,返回DO语句处重新执行循环体。这个过程反复执行,直到一次判断 “LOOP UNTIL”后面的条件条件不成立为止,这时不再返回执行循环体,而是跳出循环体执行“LOOP UNTIL 条件”下面的语句。

因此直到型循环又称“后测试型”循环,也就是我们经常讲的“先执行后测试”、“先循环后判断”。

四.典例解析

题型1:输入、输出和赋值语句

例1.判断下列给出的输入语句、输出语句和赋值语句是否正确?为什么? (1)输入语句 INPUT a;b;c (2)输出语句 A=4 (3)赋值语句 3=B

(4)赋值语句 A=B=-2

解析:(1)错,变量之间应用“,”号隔开; (2)错,PRINT语句不能用赋值号“=”;

(3)错,赋值语句中“=”号左右不能互换; (4)错,一个赋值语句只能给一个变量赋值。

点评:输入语句、输出语句和赋值语句基本上对应于算法中的顺序结构。输入语句、....输出语句和赋值语句都不包括“控制转移”,由它们组成的程序段必然是顺序结构。 (5)(2008江苏卷7)

某地区为了解7080岁的老人的日平均睡眠时间(单位:h),随机选择了50位老人进行调查,下表是这50位老人睡眠时间的频率分布表:

在上述统计数据的分析中一部分计算见算法流程图,则输出的S的值为 ▲ 【解析】由流程图

SG1F1G2F2G3F3G4F4G5F5

4.50.125.5

0.206.50.407.50.28.50.086.42

【答案】6.42

例2.请写出下面运算输出的结果。

(1)

a5b3

c(ab)/2dccPRINT

(2)

a1b2cabbacb

PRINT

(3)

a10b20c30abbcca

PRINT

解析:

(1)16;语句c(ab)/2是将a,b和的一半赋值给变量c,语句dcc是将c的平方赋值给d,最后输出d的值。

(2)1,2,3;语句cab是将a,b的和赋值给c,语句bacb是将acb的值赋值给了b。

(3)20,30,20;经过语句ab后a,b,c的值是20,20,30。经过语句bc后a,b,c的值是20,30,30。经过语句ca后a,b,c的值是20,30,20。

点评:语句的识别问题是一个逆向性思维,一般我们认为我们的学习是从算法步骤(自然语言)至程序框图,再到算法语言(程序)。如果将程序摆在我们的面前时,我们要从识别逐个语句,整体把握,概括程序的功能。 题型2:赋值语句的应用

例3.写出求三个数a,b,c的方差的程序。

解析:方差是在初中统计内容中学习过的知识,计算所有数的方差首先计算所有数

(x1x)2(x2x)2........(xnx)2

的平均数x,通过公式s来计算。

n

2

算法步骤:

第一步:计算平均数x

abc

; 3

(xa)2(xa)2(xa)2

第二步:计算方差s;

3

2

第三步:得到的结果即为所求。 程序如下: INPUT a,b,c y=(a+b+c)/3

S=((a-y)2+ (b-y)2+ (c-y)2)/3 PRINT S END

点评:套用公式求值问题是传统数学求值问题的一种,它是一种典型的顺序结构,也就是说只通过输入、输出和赋值语句就可以完成任务。解决这类问题的关键是先分析这种问题的解法,即构造计算的过程,再写出算法步骤和流程图,再翻译成算法语句即可。

例4.编写一个程序,要求输入的两个正数a和b的值,输出ab和ba的值。

解析:可以利用INPUT语句输入两个正数,然后将ab和ba的值分别赋给两个变量输出即可。也可以将ab和ba的底数和幂数进行交换,故还可以利用赋值语句,采用将两个变量的值互换的办法实现。

程序1: INPUT “a,b:”;a,b A=a^b B=b^a

PRINT “ab=”;A,“ba=”;B END

程序2: INPUT “a,b:”;a,b A=a^b

PRINT “ab=”;A x=a a=b b=x A=a^b

PRINT “ab=”;A END

点评:交换a,b的值可通过下面三个语句来实现:

taab bt

通过引进一个变量t实现变量a和b的值的交换,因此只需用赋值语句即可实现算法。在一些较为复杂的问题算法中经常需要对两个变量的值进行交换,因此应熟练掌握这种方法。

题型3:条件语句

例5.编写程序,输出两个不相等的实数a、b的最大值。

解析:要输出两个不相等的实数a、b的最大值,从而想到对a,b的大小关系进行判断,a,b的大小关系有两种情况:(1)a>b;(2)b>a,这也就用到了我们经常提及的分类讨论的方式,找出两个数的最大值。

解:算法一:

第一步:输入a, b的数值;

INPUT“a,b”;a,b IF b>a THEN a=b END IF PRINT a END

点评:1.一个“好”的算法往往像上面教材例题中的“小技巧”,要熟练、有效的使用它们,则需要在大量的算法设计中积累经验。我们也可以先根据自己的思路设计算法,再与 “成形”的、高效的、优秀的算法比较,改进思路,改进算法,以避免重复计算等问题,提高算法设计的水平!

2.我们在平常的训练中尽可能的少引用变量,过多的变量不仅会使得算法和程序变得复杂,而且不利于计算机的执行。为此,我们在练习中要积极思考尽可能少引入变量以及如何才能少引入变量。

1,x0

例6.高等数学中经常用到符号函数,符号函数的定义为y0,x0,试编写程

y=1 END IF

IF x=0 THEN y=0 END IF

IF x

点评:1.条件结构的差异,造成程序执行的不同。当代入x的数值时,“程序一”先判断外层的条件,依次执行不同的分支,才有可能判断内层的条件;而“程序二”中执行了对“条件1”的判断,同时也对“条件2”进行判断,是按程序中条件语句的先后依次判断所有的条件,满足哪个条件就执行哪个语句。

2.条件语句的嵌套可多于两层,可以表达算法步骤中的多重限制条件。 题型4:循环语句

例7.设计一个计算1×3×5×7ׄ×99的算法,编写算法程序。 解析: 算法如下: 第一步:s=1; 第二步:i=3; 第三步:s=s×i; 第四步:i=i+2;

第五步:如果i≤99,那么转到第三步;

第六步:输出s; 程序如下:(“WHILE型”循环语句) s=1 i=3

WHILE i<=99 s=s*i i=i+2 WEND PRINT s END

点评:你能用“UNTIL”型循环语句表示“典例1”中的程序吗?

例8.编写一个程序,求1!+2!+…+10!的值。

解析:这个问题是求前10个正整数的阶乘之和,可以用“WHILE+ WHILE”循环嵌套语句格式来实现。

程序结构要做到如下步骤: ①处理“N!”的值;(注:处理N!值的变量就是一个内循环变量) ②累加“N!”的值。(注:累加N!值的变量就是一个外循环变量)

显然,通过10次循环可分别求出1!、2!、…、10!的值,并同时累加起来, 可求得S的值。而求T=N!,又可以用一个循环(内循环)来实现。 程序为: s=0 i=1

WHILE i

WHILE j

上面程序中哪个变量是内循环变量,哪个变量是外循环变量? (1)内循环变量:j,t (2)外循环变量:s,i

“典例2”程序是一个的“WHILE+WHILE”型循环嵌套语句格式。这是一个比较好想的方法,但实际上对于求n!,我们也可以根据求出的(n-1)!乘上n即可得到,而无需重新从1再累乘到n。

程序可改为:

s=0 i=1 j=1

WHILE i

PRINT s

END

显然第二个程序的效率要比第一个高得多。第一程序要进行1+2+…+10=55次循环,而第二程序进行10次循环。如题目中求的是1!+2!+…+1000!,则两个程序的效率区别更明显。

点评:解决具体的构造循环语句的算法问题,要尽可能的少引入循环变量,否则较多的变量会使得设计程序比较麻烦,并且较多的变量会使得计算机占用大量的系统资源,致使系统缓慢。另外,也尽可能使得循环嵌套的层数少,否则也浪费计算机的系统资源。 题型5:实际应用

例9.中国网通规定:拨打市内电话时,如果不超过3分钟,则收取话费0.22元;如果通话时间超过3分钟,则超出部分按每分钟0.1元收取通话费,不足一分钟按以一分钟计算。设通话时间为t(分钟),通话费用y(元),如何设计一个程序,计算通话的费用。

解析:

算法分析:

数学模型实际上为:y关于t的分段函数。

关系是如下:

0.22,(0t3)y0.220.1(t3),(t3,tZ)

0.220.1([t3]1),(t3,tZ)

其中[t-3]表示取不大于t-3的整数部分。

算法步骤如下:

第一步:输入通话时间t;

第二步:如果t≤3,那么y = 0.22;否则判断t∈Z 是否成立,若成立执行y= 0.2+0.1× (t-3);否则执行y = 0.2+0.1×( [t-3]+1)。

第三步:输出通话费用c 。

算法程序如下:

INPUT “请输入通话时间:”;t

IF t

y=0.22

ELSE

IF INT(t)=t THEN

y=0.22+0.1*(t-3)

ELSE

y=0.22+0.1*(INT(t-3)+1)

END IF

END IF

PRINT “通话费用为:”;y

END

点评:实际应用问题,在高考中是一个热点。如何将实际问题转化成数学问题是解题的关键,最后还要用算法步骤和程序进行表达。如:中国网通通话费的规定在数学中就是通话时间到通话费用的分段函数。日常生活中的分段函数问题还有很多:出租车的计费问题、个人所得税问题、银行利率问题等等。

例10.编写程序,计算数列{an}的前20项的和。(其中数列的前几项分别为1,1,2,3,5,8,„„)

解析:这是“Fibonacci数列”的典型特征,从第三项起每一项都是它前两项的和,即anan1an2。

程序如下:

a=1

b=1

s=0

i=3

WHILE i

s=s+a+b

t=a

a=b

b=b+t

i=i+1

WEND

PRINT s

END

点评:

1.计数变量的作用一般是统计循环体执行的次数,改变循环条件的取值,为结束循环作准备。譬如:计算等差、等比数列的前n项的和,n就是计数变量的临界值,在当型结构中“小于等于n”维持循环,而在直到型循环结构中“大于n”跳出循环。

2.累加变量是最终的输出结果。每进入一次循环体随着计数变量改变而改变。累加变量的初始值通常为0。

五.思维总结

在设计算法的过程中,解决问题的基本思想常常很简单、很清楚,但表述参与运算的数值的频频变换却很麻烦。为了解决这个问题,需要在程序中引入变量。前面通过对函数概念的学习,我们就已经了解变量的含义:在研究问题的过程中可以取代不同数值的量称为变量。

程序中一些重要的函数也很有用处,如取平方根函数SQR(x)=|x|,取绝对值函数ABS

x,x0(x)=。 x,x0

变量与函数是中学数学里面最重要的和最基本的概念,在算法的设计里面仍然发挥着重要的和最基本的作用,它们会使得算法的表达变得非常整洁、清楚。

1.赋值语句在程序运行时给变量赋值;“=”的右侧必须是表达式,左侧必须是变量;一个语句只能给一个变量赋值;有计算功能;将一个变量的值赋给另一个变量时,前一个变量的值保持不变;可先后给一个变量赋多个不同的值,但变量的取值只与最后一次赋值有关。

2.条件语句的主要功能是来实现算法中的条件结构。

因为人们对计算机运算的要求不仅仅是一些简单的代数运算,而是经常需要计算机按照条件进行分析、比较、判断,并且按照判断后的不同情况进行不同的操作和处理。如果是要解决像“判断一个数的正负”、“比较数之间的大小”,“对一组数进行排序”、“求分段函数的函数值”等很多问题,计算机就需要用到条件语句。

3.学习了循环语句的两种格式,我们来挖掘一下应用循环语句编写程序的“条件三要素”。

第一、循环语句中的变量一般需要进行一定的初始化操作。

请看我们用WHILE循环实现1到100累加为例,做一下说明:

“1+2+„„+100”

部分程序如下:

sum = 0

i =1

WHILE i

sum = sum+ i

i=i+1

WEND

这段程序中,循环的条件是“i

“i = 0”这一个语句,在声明变量i的同时,也为i赋了初始值“1”。这样,条件 i

第二、循环语句在循环的过程中需要有“结束”的机会。

程序中最忌“死循环”。所谓的“死循环”就是指该循环条件永远成立,没有跳出循环体的机会。

第三、在循环中要改变循环条件的成立因素

程序每执行一次循环体,循环条件中涉及到的变量就会发生改变,正在步步逼近满足跳出循环体的条件。

普通高中课程标准实验教科书—数学

高三新数学第一轮复习教案(讲座16)—基本算法语句

一.课标要求:

1.经历将具体问题的程序框图转化为程序语句的过程,理解几种基本算法语句——输入语句、输出语句、赋值语句、条件语句、循环语句,进一步体会算法的基本思想;

2.通过阅读中国古代数学中的算法案例,体会中国古代数学对世界数学发展的贡献。

二.命题走向

算法是高中数学课程中的新内容,本章的重点是算法的概念和算法的三种逻辑结构。 预测2009年高考对本章的考察是:以选择题或填空题的形式出现,分值在5分左右,本讲考察的热点是识别程序和编写程序。

三.要点精讲

1.输入语句

输入语句的格式:INPUT “提示内容”; 变量 例如:INPUT “x=”; x功能:实现算法的输入变量信息(数值或字符)的功能。 要求:

(1)输入语句要求输入的值是具体的常量;

(2)提示内容提示用户输入的是什么信息,必须加双引号,提示内容 “原原本本”的在计算机屏幕上显示,提示内容与变量之间要用分号隔开;

(3)一个输入语句可以给多个变量赋值,中间用“,”分隔;输入语句还可以是““提示内容1”;变量1,“提示内容2”;变量2,“提示内容3”;变量3,„„”的形式。例如:INPUT“a=,b=,c=,”;a,b,c。

2.输出语句

输出语句的一般格式:PRINT“提示内容”;表达式 例如:PRINT“S=”;S

功能:实现算法输出信息(表达式) 要求:

(1)表达式是指算法和程序要求输出的信息;

(2)提示内容提示用户要输出的是什么信息,提示内容必须加双引号,提示内容要用分号和表达式分开。

(3)如同输入语句一样,输出语句可以一次完成输出多个表达式的功能,不同的表达式之间可用“,”分隔;输出语句还可以是“提示内容1”;表达式1,“提示内容2”;表达式2,“提示内容3”;表达式3,„„”的形式;例如:PRINT “a,b,c:”;a,b,c。

3.赋值语句

赋值语句的一般格式:变量=表达式 赋值语句中的“=”称作赋值号

作用:赋值语句的作用是将表达式所代表的值赋给变量;

要求:

(1)赋值语句左边只能是变量名字,而不是表达式,右边表达式可以是一个常量、变量或含变量的运算式。如:2=x是错误的;

(2)赋值号的左右两边不能对换。赋值语句是将赋值号右边的表达式的值赋给赋值号左边的变量。如“A=B”“B=A”的含义运行结果是不同的,如x=5是对的,5=x是错的,A+B=C是错的,C=A+B是对的。

(3)不能利用赋值语句进行代数式的演算。(如化简、因式分解、解方程等),如

yx21(x1)(x1)

这是实现不了的。在赋值号右边表达式中每一个变量的值必须事先赋给确定的值。在一个赋值语句中只能给一个变量赋值。不能出现两个或以上的“=”。但对于同一个变量可以多次赋值。

4.条件语句

(1)“IF—THEN—ELSE”语句

格式: IF 条件 THEN 语句1 ELSE

语句2 END IF

说明:在“IF—THEN—ELSE”语句中,“条件”表示判断的条件,“语句1”表示满足条件时执行的操作内容;“语句2”表示不满足条件时执行的操作内容;END IF表示条件语句的结束。计算机在执行“IF—THEN—ELSE”语句时,首先对IF后的条件进行判断,如果符合条件,则执行THEN后面的“语句1”;若不符合条件,则执行ELSE后面的“语句2”。

(2)“IF—THEN”语句 格式: IF 条件 THEN

语句 END IF

说明:“条件”表示判断的条件;“语句”表示满足条件时执行的操作内容,条件不满足时,直接结束判断过程;END IF表示条件语句的结束。计算机在执行“IF—THEN”语句时,首先对IF后的条件进行判断,如果符合条件就执行THEN后边的语句,若不符合条件则直接结束该条件语句,转而执行其它后面的语句。

5.循环语句

(1)当型循环语句

当型(WHILE型)语句的一般格式为: WHILE 条件

循环体 WEND

说明:计算机执行此程序时,遇到WHILE语句,先判断条件是否成立,如果成立,则执行WHILE和WEND之间的循环体,然后返回到WHILE语句再判断上述条件是否成立,如果成立,再执行循环体,这个过程反复执行,直到一次返回到WHILE语句判断上述条件不成立为止,这时不再执行循环体,而是跳到WEND语句后,执行WEND后面的语句。因此当型循环又称“前测试型”循环,也就是我们经常讲的“先测试后执行”、“先判断后循环”。

(2)直到型循环语句

直到型(UNTIL型)语句的一般格式为: DO

循环体

LOOP UNTIL 条件

说明:计算机执行UNTIL语句时,先执行DO和LOOP UNTIL之间的循环体,然后判断 “LOOP UNTIL”后面的条件是否成立,如果条件成立,返回DO语句处重新执行循环体。这个过程反复执行,直到一次判断 “LOOP UNTIL”后面的条件条件不成立为止,这时不再返回执行循环体,而是跳出循环体执行“LOOP UNTIL 条件”下面的语句。

因此直到型循环又称“后测试型”循环,也就是我们经常讲的“先执行后测试”、“先循环后判断”。

四.典例解析

题型1:输入、输出和赋值语句

例1.判断下列给出的输入语句、输出语句和赋值语句是否正确?为什么? (1)输入语句 INPUT a;b;c (2)输出语句 A=4 (3)赋值语句 3=B

(4)赋值语句 A=B=-2

解析:(1)错,变量之间应用“,”号隔开; (2)错,PRINT语句不能用赋值号“=”;

(3)错,赋值语句中“=”号左右不能互换; (4)错,一个赋值语句只能给一个变量赋值。

点评:输入语句、输出语句和赋值语句基本上对应于算法中的顺序结构。输入语句、....输出语句和赋值语句都不包括“控制转移”,由它们组成的程序段必然是顺序结构。 (5)(2008江苏卷7)

某地区为了解7080岁的老人的日平均睡眠时间(单位:h),随机选择了50位老人进行调查,下表是这50位老人睡眠时间的频率分布表:

在上述统计数据的分析中一部分计算见算法流程图,则输出的S的值为 ▲ 【解析】由流程图

SG1F1G2F2G3F3G4F4G5F5

4.50.125.5

0.206.50.407.50.28.50.086.42

【答案】6.42

例2.请写出下面运算输出的结果。

(1)

a5b3

c(ab)/2dccPRINT

(2)

a1b2cabbacb

PRINT

(3)

a10b20c30abbcca

PRINT

解析:

(1)16;语句c(ab)/2是将a,b和的一半赋值给变量c,语句dcc是将c的平方赋值给d,最后输出d的值。

(2)1,2,3;语句cab是将a,b的和赋值给c,语句bacb是将acb的值赋值给了b。

(3)20,30,20;经过语句ab后a,b,c的值是20,20,30。经过语句bc后a,b,c的值是20,30,30。经过语句ca后a,b,c的值是20,30,20。

点评:语句的识别问题是一个逆向性思维,一般我们认为我们的学习是从算法步骤(自然语言)至程序框图,再到算法语言(程序)。如果将程序摆在我们的面前时,我们要从识别逐个语句,整体把握,概括程序的功能。 题型2:赋值语句的应用

例3.写出求三个数a,b,c的方差的程序。

解析:方差是在初中统计内容中学习过的知识,计算所有数的方差首先计算所有数

(x1x)2(x2x)2........(xnx)2

的平均数x,通过公式s来计算。

n

2

算法步骤:

第一步:计算平均数x

abc

; 3

(xa)2(xa)2(xa)2

第二步:计算方差s;

3

2

第三步:得到的结果即为所求。 程序如下: INPUT a,b,c y=(a+b+c)/3

S=((a-y)2+ (b-y)2+ (c-y)2)/3 PRINT S END

点评:套用公式求值问题是传统数学求值问题的一种,它是一种典型的顺序结构,也就是说只通过输入、输出和赋值语句就可以完成任务。解决这类问题的关键是先分析这种问题的解法,即构造计算的过程,再写出算法步骤和流程图,再翻译成算法语句即可。

例4.编写一个程序,要求输入的两个正数a和b的值,输出ab和ba的值。

解析:可以利用INPUT语句输入两个正数,然后将ab和ba的值分别赋给两个变量输出即可。也可以将ab和ba的底数和幂数进行交换,故还可以利用赋值语句,采用将两个变量的值互换的办法实现。

程序1: INPUT “a,b:”;a,b A=a^b B=b^a

PRINT “ab=”;A,“ba=”;B END

程序2: INPUT “a,b:”;a,b A=a^b

PRINT “ab=”;A x=a a=b b=x A=a^b

PRINT “ab=”;A END

点评:交换a,b的值可通过下面三个语句来实现:

taab bt

通过引进一个变量t实现变量a和b的值的交换,因此只需用赋值语句即可实现算法。在一些较为复杂的问题算法中经常需要对两个变量的值进行交换,因此应熟练掌握这种方法。

题型3:条件语句

例5.编写程序,输出两个不相等的实数a、b的最大值。

解析:要输出两个不相等的实数a、b的最大值,从而想到对a,b的大小关系进行判断,a,b的大小关系有两种情况:(1)a>b;(2)b>a,这也就用到了我们经常提及的分类讨论的方式,找出两个数的最大值。

解:算法一:

第一步:输入a, b的数值;

INPUT“a,b”;a,b IF b>a THEN a=b END IF PRINT a END

点评:1.一个“好”的算法往往像上面教材例题中的“小技巧”,要熟练、有效的使用它们,则需要在大量的算法设计中积累经验。我们也可以先根据自己的思路设计算法,再与 “成形”的、高效的、优秀的算法比较,改进思路,改进算法,以避免重复计算等问题,提高算法设计的水平!

2.我们在平常的训练中尽可能的少引用变量,过多的变量不仅会使得算法和程序变得复杂,而且不利于计算机的执行。为此,我们在练习中要积极思考尽可能少引入变量以及如何才能少引入变量。

1,x0

例6.高等数学中经常用到符号函数,符号函数的定义为y0,x0,试编写程

y=1 END IF

IF x=0 THEN y=0 END IF

IF x

点评:1.条件结构的差异,造成程序执行的不同。当代入x的数值时,“程序一”先判断外层的条件,依次执行不同的分支,才有可能判断内层的条件;而“程序二”中执行了对“条件1”的判断,同时也对“条件2”进行判断,是按程序中条件语句的先后依次判断所有的条件,满足哪个条件就执行哪个语句。

2.条件语句的嵌套可多于两层,可以表达算法步骤中的多重限制条件。 题型4:循环语句

例7.设计一个计算1×3×5×7ׄ×99的算法,编写算法程序。 解析: 算法如下: 第一步:s=1; 第二步:i=3; 第三步:s=s×i; 第四步:i=i+2;

第五步:如果i≤99,那么转到第三步;

第六步:输出s; 程序如下:(“WHILE型”循环语句) s=1 i=3

WHILE i<=99 s=s*i i=i+2 WEND PRINT s END

点评:你能用“UNTIL”型循环语句表示“典例1”中的程序吗?

例8.编写一个程序,求1!+2!+…+10!的值。

解析:这个问题是求前10个正整数的阶乘之和,可以用“WHILE+ WHILE”循环嵌套语句格式来实现。

程序结构要做到如下步骤: ①处理“N!”的值;(注:处理N!值的变量就是一个内循环变量) ②累加“N!”的值。(注:累加N!值的变量就是一个外循环变量)

显然,通过10次循环可分别求出1!、2!、…、10!的值,并同时累加起来, 可求得S的值。而求T=N!,又可以用一个循环(内循环)来实现。 程序为: s=0 i=1

WHILE i

WHILE j

上面程序中哪个变量是内循环变量,哪个变量是外循环变量? (1)内循环变量:j,t (2)外循环变量:s,i

“典例2”程序是一个的“WHILE+WHILE”型循环嵌套语句格式。这是一个比较好想的方法,但实际上对于求n!,我们也可以根据求出的(n-1)!乘上n即可得到,而无需重新从1再累乘到n。

程序可改为:

s=0 i=1 j=1

WHILE i

PRINT s

END

显然第二个程序的效率要比第一个高得多。第一程序要进行1+2+…+10=55次循环,而第二程序进行10次循环。如题目中求的是1!+2!+…+1000!,则两个程序的效率区别更明显。

点评:解决具体的构造循环语句的算法问题,要尽可能的少引入循环变量,否则较多的变量会使得设计程序比较麻烦,并且较多的变量会使得计算机占用大量的系统资源,致使系统缓慢。另外,也尽可能使得循环嵌套的层数少,否则也浪费计算机的系统资源。 题型5:实际应用

例9.中国网通规定:拨打市内电话时,如果不超过3分钟,则收取话费0.22元;如果通话时间超过3分钟,则超出部分按每分钟0.1元收取通话费,不足一分钟按以一分钟计算。设通话时间为t(分钟),通话费用y(元),如何设计一个程序,计算通话的费用。

解析:

算法分析:

数学模型实际上为:y关于t的分段函数。

关系是如下:

0.22,(0t3)y0.220.1(t3),(t3,tZ)

0.220.1([t3]1),(t3,tZ)

其中[t-3]表示取不大于t-3的整数部分。

算法步骤如下:

第一步:输入通话时间t;

第二步:如果t≤3,那么y = 0.22;否则判断t∈Z 是否成立,若成立执行y= 0.2+0.1× (t-3);否则执行y = 0.2+0.1×( [t-3]+1)。

第三步:输出通话费用c 。

算法程序如下:

INPUT “请输入通话时间:”;t

IF t

y=0.22

ELSE

IF INT(t)=t THEN

y=0.22+0.1*(t-3)

ELSE

y=0.22+0.1*(INT(t-3)+1)

END IF

END IF

PRINT “通话费用为:”;y

END

点评:实际应用问题,在高考中是一个热点。如何将实际问题转化成数学问题是解题的关键,最后还要用算法步骤和程序进行表达。如:中国网通通话费的规定在数学中就是通话时间到通话费用的分段函数。日常生活中的分段函数问题还有很多:出租车的计费问题、个人所得税问题、银行利率问题等等。

例10.编写程序,计算数列{an}的前20项的和。(其中数列的前几项分别为1,1,2,3,5,8,„„)

解析:这是“Fibonacci数列”的典型特征,从第三项起每一项都是它前两项的和,即anan1an2。

程序如下:

a=1

b=1

s=0

i=3

WHILE i

s=s+a+b

t=a

a=b

b=b+t

i=i+1

WEND

PRINT s

END

点评:

1.计数变量的作用一般是统计循环体执行的次数,改变循环条件的取值,为结束循环作准备。譬如:计算等差、等比数列的前n项的和,n就是计数变量的临界值,在当型结构中“小于等于n”维持循环,而在直到型循环结构中“大于n”跳出循环。

2.累加变量是最终的输出结果。每进入一次循环体随着计数变量改变而改变。累加变量的初始值通常为0。

五.思维总结

在设计算法的过程中,解决问题的基本思想常常很简单、很清楚,但表述参与运算的数值的频频变换却很麻烦。为了解决这个问题,需要在程序中引入变量。前面通过对函数概念的学习,我们就已经了解变量的含义:在研究问题的过程中可以取代不同数值的量称为变量。

程序中一些重要的函数也很有用处,如取平方根函数SQR(x)=|x|,取绝对值函数ABS

x,x0(x)=。 x,x0

变量与函数是中学数学里面最重要的和最基本的概念,在算法的设计里面仍然发挥着重要的和最基本的作用,它们会使得算法的表达变得非常整洁、清楚。

1.赋值语句在程序运行时给变量赋值;“=”的右侧必须是表达式,左侧必须是变量;一个语句只能给一个变量赋值;有计算功能;将一个变量的值赋给另一个变量时,前一个变量的值保持不变;可先后给一个变量赋多个不同的值,但变量的取值只与最后一次赋值有关。

2.条件语句的主要功能是来实现算法中的条件结构。

因为人们对计算机运算的要求不仅仅是一些简单的代数运算,而是经常需要计算机按照条件进行分析、比较、判断,并且按照判断后的不同情况进行不同的操作和处理。如果是要解决像“判断一个数的正负”、“比较数之间的大小”,“对一组数进行排序”、“求分段函数的函数值”等很多问题,计算机就需要用到条件语句。

3.学习了循环语句的两种格式,我们来挖掘一下应用循环语句编写程序的“条件三要素”。

第一、循环语句中的变量一般需要进行一定的初始化操作。

请看我们用WHILE循环实现1到100累加为例,做一下说明:

“1+2+„„+100”

部分程序如下:

sum = 0

i =1

WHILE i

sum = sum+ i

i=i+1

WEND

这段程序中,循环的条件是“i

“i = 0”这一个语句,在声明变量i的同时,也为i赋了初始值“1”。这样,条件 i

第二、循环语句在循环的过程中需要有“结束”的机会。

程序中最忌“死循环”。所谓的“死循环”就是指该循环条件永远成立,没有跳出循环体的机会。

第三、在循环中要改变循环条件的成立因素

程序每执行一次循环体,循环条件中涉及到的变量就会发生改变,正在步步逼近满足跳出循环体的条件。


相关内容

  • 算法与程序框图复习教案
  • 算法与程序框图 学习目标: 1. 明确算法的含义,熟悉算法的三种基本结构:顺序.条件和循环,以及基本的算法语句. 2. 能熟练运用辗转相除法与更相减损术.秦九韶算法.进位制等典型的算法知识解决同类问 题. 重点: 算法的基本知识与算法对应的程序框图的设计. 难点: 与算法对应的程序框图的设计及算法程 ...

  • [算法与程序设计]VB教案集
  • 1-1节 计算机解决问题的过程 一. 教学目标 1. 知识与技能 (1) 让学生了解算法.穷举法.程序设计语言.编写程序和调试程序等概念. (2) 让学生知道对现实问题的自然语言的描述,特别是类似程序设计语言的自然语言描述. (3) 让学生理解分析问题.设计算法.编写程序.调试程序这一用计算机解决问 ...

  • 第37讲基本算法语句
  • 考情分析 算法初步虽然是新课标增加的内容,但与前面的知识有着紧密的联系,且与实际问题的结合也非常密切.因此在高考中算法初步知识将与函数.数列.三角.概率以及实际问题等知识点进行整合,这是高考试题命制的一大特点.这样的试题遵循了在知识网络交汇处设计问题的命题原则,既符合高考命题能力立意的宗旨,又突出了 ...

  • 时间复杂度概念
  • 一.概念 时间复杂度是总运算次数表达式中受n 的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0时,时间复杂度就是O(2^n); a=0,b0 =>O(n^3); a,b=0,c0 =&g ...

  • 合肥工业大学编译原理课程设计
  • 关于<编译原理>课程设计的有关说明 <编译原理>是计算机专业的一门重要的专业课程,其中包含大量软件设计思想.大家通过课程设计,实现一些重要的算法,或设计一个完整的编译程序模型,能够进一步加深理解和掌握所学知识,对提高自己的软件设计水平具有十分重要的意义.大家在进行课程设计时, ...

  • 人教版高中数学必修3知识点和练习题
  • 高中数学人教B 版必修3知识点和练习题 第一章 算法初步 1.1.1 算法的概念 1.算法概念: 在数学上,现代意义上的"算法"通常是指可以用计算机来解决的某一类问题是程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成. 2. 算法的特点: (1)有限性:一个 ...

  • 时间复杂度的计算
  • 时间复杂度计算 学习数据结构时,觉得时间复杂度计算很复杂,怎么也看不懂,差不多三年之后,还是不懂,马上就要找工作了,赶紧恶补一下吧: 首先了解一下几个概念.一个是时间复杂度,一个是渐近时间复杂度.前者是某个算法的时间耗费,它是该算法所求解问题规模n 的函数,而后者是指当问题规模趋向无穷大时,该算法时 ...

  • 算法与程序设计复习知识点
  • 第一章 如何用计算机解决问题 1.解决问题的过程:(P3) 分析问题--设计算法--界面设计.编写程序--运行程序.验证结果. 计算机程序:就是指示计算机如何去解决问题或完成任务的一组可执行的指令. 程序设计:就是寻求解决问题的方法,并将其实现步骤编写成计算机可以执行的程序的过程. 程序设计语言:泛 ...

  • [高级语言程序设计]
  • <高级语言程序设计>教学大纲 王林平 编 一.总则 1. 教学目的与要求 (1)教学目的 <高级语言程序设计>是学习研究计算机及其应用的一门很重要的专业基础课程.它为<数据结构>.<操作系统>等其它专业基础课或专业课程奠定程序设计的基础,又是其它专业课 ...