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<=10

j=1

t=1

WHILE j<=i

t=t*j

j=j+1

WEND

s=s+t

i=i+1

WEND

PRINT s

END

上面程序中哪个变量是内循环变量,哪个变量是外循环变量?

(1)内循环变量:j,t

(2)外循环变量:s,i

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

程序可改为:

s=0

i=1

j=1

WHILE i<=10

j=j*i

s=s+j

i=i+1

WEND

PRINT s

END

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

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

题型5:实际应用

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

解析:

算法分析:

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

关系是如下:

其中[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<=3  THEN

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数列”的典型特征,从第三项起每一项都是它前两项的和,即

程序如下:

a=1

b=1

s=0

i=3

WHILE  i<=20

s=s+a+b

t=a

a=b

b=b+t

i=i+1

WEND

PRINT s

END

点评:

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

例1.判断下列给出的输入语句、输出语句和赋值语句是否正确?为什么?

(1)输入语句 INPUT  ab;c

(2)输出语句 A=4

(3)赋值语句 3=B

(4)赋值语句  AB=-2

解析:(1)错,变量之间应用“,”号隔开;

(2)错,PRINT语句不能用赋值号“=”;

(3)错,赋值语句中“=”号左右不能互换;

(4)错,一个赋值语句只能给一个变量赋值。

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

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

(1)

(2)

(3)

解析:

(1)16;语句是将ab和的一半赋值给变量c,语句是将c的平方赋值给d,最后输出d的值。

(2)1,2,3;语句是将ab的和赋值给c,语句是将的值赋值给了b

(3)20,30,20;经过语句ab,c的值是20,20,30。经过语句ab,c的值是20,30,30。经过语句ab,c的值是20,30,20。

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

题型2:赋值语句的应用

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

解析:方差是在初中统计内容中学习过的知识,计算所有数的方差首先计算所有数的平均数,通过公式来计算。

算法步骤:

第一步:计算平均数

第二步:计算方差

第三步:得到的结果即为所求。

程序如下:

INPUT a,b,c

y=(a+b+c)/3

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

PRINT S

END

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

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

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

程序1:

INPUT “ab:”;ab

A=a^b

B=b^a

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

END

程序2:

INPUT “ab:”;ab

A=a^b

PRINT “ab=”;A

x=a

a=b

b=x

A=a^b

PRINT “ab=”;A

END

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

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

题型3:条件语句

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

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

解:算法一:

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

第二步:判断a,b的大小关系,若a>b,则输出a的值,否则输出b的值。

(程序框图如右图)

程序如下:(“IF-THEN-ELSE”语句)

INPUT“a,b”;a,b

IF  a>b  THEN

PRINT  a

ELSE

PRINT  b

END IF

END

算法二:

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

第二步:判断a,b的大小关系,若b > a,则将b的值赋予a;否则直接执行第三步;

第三步:输出a的值,结束。

(程序框图如右图)

程序如下:(“IF-THEN”语句)

INPUT“a,b”;a,b

IF  b>a  THEN

a=b

END IF

PRINT  a

END

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

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

例6.高等数学中经常用到符号函数,符号函数的定义为,试编写程序输入x的值,输出y的值。

程序一:(嵌套结构)

程序框图:(右图)

程序语言:

INPUT  x

IF x>0 THEN

y=1

ELSE

IF x=0  THEN

y=0

ELSE

y=-1

END IF

END IF

PRINT y

END

程序二:(叠加结构)

程序框图:

程序如下:

INPUT  x

IF x>0 THEN

y=1

END IF

IF x=0  THEN

y=0

END IF

IF x<0  THEN

y=-1

END IF

PRINT y

END

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

 0  445754  445762  445768  445772  445778  445780  445784  445790  445792  445798  445804  445808  445810  445814  445820  445822  445828  445832  445834  445838  445840  445844  445846  445848  445849  445850  445852  445853  445854  445856  445858  445862  445864  445868  445870  445874  445880  445882  445888  445892  445894  445898  445904  445910  445912  445918  445922  445924  445930  445934  445940  445948  447090 

违法和不良信息举报电话:027-86699610 举报邮箱:58377363@163.com

精英家教网