1.计算236312222+++++,写出算法的程序.解:s=1n=2i=1WHILE i<=63s=s+n∧ii=i+1WENDPRINT “1+2+2∧2+2∧3+…+2∧63=”;sEND2.写出已知函数⎪⎩⎪⎨⎧<-=>=).(1),(),(1xxxy输入x的值,求y的值程序.解:INPUT “请输入x的值:”;xIF x>0 THENy=1ELSEIF x=0 THENy=0ELSEy=-1END IFEND IFPRINT “y的值为:”;yEND3.新课标B版数学必修3教材41页第7题:用100元钱买100只鸡,公鸡每只5元,母鸡每只3元,小鸡3只一元,问能买多少公鸡,母鸡和小鸡?程序如下:for x=1:20 for y=1:33 z=100-x-y; if 5*x+3*y+z/3<>100else x y z end end end4.(本小题满分14分)根据下面的要求,求满足1+2+3+…+n > 500的最小的自然数n。
(1)画出执行该问题的程序框图;(2)以下是解决该问题的一个程序,但有几处错误,请找出错误并予以更正。
解:(1(2)①DO应改为WHILE; 10分②PRINT n+1 应改为PRINT n ; 12分 ③S=1应改为S=0 14分5. 儿童乘坐火车时,若身高不超过1.1 m ,则不需买票;若身高超过1.1 m 但不超过1.4 m ,则需买半票;若身高超过1.4 m ,则需买全票.试设计一个买票的算法,并画出相应的程序框图及程序。
解:程序是:INPUT “请输入身高h (米):”;hIF h<=1.1 THEN PRINT “免票” ELSEIF h<=1.4 THEN PRINT “买半票” ELSE PRINT “买全票” END IF END IF END6.意大利数学家菲波拉契,在1202年出版的一书里提出了这样的一个问题:一对兔子饲养到第二个月进入成年,第三个月生一对小兔,以后每个月生一对小兔,所生小兔能全部存活并且也是第二个月成年,第三个月生一对小兔,以后每月生一对小兔.问这样下去到年底应有多少对兔子? 试画出解决此问题的程序框图,并编写相应的程序.解: 分析: 根据题意可知,第一个月有1对小兔,第二个月有1对成年兔子,第三个月有两对兔子,从第三个月开始,每个月的兔子对数是前面两个月兔子对数的和,设第N 个月有两F 对兔子,第N -1个月有S 对兔子,第N -2个月有Q 对兔子,则有F=S+Q,一个月后,即第N+1个月时,式中变量S 的新值应变第N 个月兔子的对数(F 的旧值),变量Q 的新值应变为第N -1个月兔子的对数(S 的旧值),这样,用S+Q 求出变量F 的新值就是N+1个月兔子的数,依此类推,可以得到一个数序列,数序列的第12项就是年底应有兔子对数,我们可以先确定前两个月的兔子对数均为1,以此为基准,构造一个循环程序,让表示“第×个月的I 从3逐次增加1,一直变化到12,最后一次循环得到的F ”就是7.设计算法求100991431311211⨯++⨯+⨯+⨯ 的值。
要求画出程序框图,写出用基本语句编写的程序。
解:这是一个累加求和问题,共99项相加,可设计一个计数变量,一个累加变量,用循环结构实现这一算法。
程序框图如图所示:10==k SDO1))1(/(1+=+*+=k k k k S SLOOP UNTIL 99>kPRINTSEND8.求100以内的所有勾股数。
for i=1:100 for j=1:100 for k=2:100 if i*i+j*j<>k*k else i j k end end end end9. 计算 236312222+++++ ,写出算法的程序. 解:s=1n=2 i=1WHILE i <=63 s=s+n ∧i i=i+1 WENDPRINT “1+2+2∧2+2∧3+…+2∧63=”;s END10. 写出已知函数⎪⎩⎪⎨⎧<-=>=).0(1),0(0),0(1x x x y 输入x 的值,求y 的值程序. 解:INPUT “请输入x 的值:”;xIF x>0 THEN y=1 ELSEIF x=0 THEN y=0 ELSE y=-1 END IF END IFPRINT “y 的值为:”;y END11. 2000年我国人口为13亿,如果人口每年的自然增长率为7‟,那么多少年 后我国人口将达到15亿?设计一个算法的程序. 解:A=13R=0.007 i=1 DOA=A*(1+R ) i=i+1LOOP UNTIL A >=15 i=i -1PRINT “达到或超过15亿人口需要的年数为:”;i END12.1982年我国大陆人口10亿3千万,编程上机计算,若人口增长率r=1%,则哪一年我国人口增长到12亿,若r=O .5%,r=O .2%又是何年?INPUT r=O .01 i=O p=10.3 y=1982 WHILE P ≤12 i=i+1 p=p※(1+ r) y=y+1 WEND PRINT y ,p END13.假定在银行中存款10000元,按11.25%的利率,一年后连本带息将变为11125元,若将此款继续存人银行,试问多长时间就会连本带利翻一番?请用直到型和当型两种语句写出程序. 用直到型INPUT“money =”,10000 x=mOney r=11.25/100 y=OWHILE x≥2r y=y+1 x=x+r*x WEND PRINT y END 用当型 INPUT m=10000 X=m y=Or=11.25/100 Do m<2*x y=y+1x=x + r*x算法语句常见错误解析夏 文 凯人教版必修3第一章《算法初步》是新课程标准中的新增内容,是高考考查的内容。
程序的设计是本章的一个难点和重点,此难点主要体现在语句的选择、语句的使用、语句的衔接三方面。
如果概念不清、运用不当就容易出错,哪怕一个极细小的错误都会导致整个程序无法被计算机运行而宣告失败,所以,我们在设计程序时,一定要时时小心,处处留意,确保准确无误。
为帮助同学们防错、识错、纠错,笔者搜集了教学中一些常见的错误,望同学们加深对它们的理解,引以为戒。
一 输入语句常见错误解析例 判断下列给出的输入语句是否正确,为什么,怎样改正?(1)INPUT a ; b ; c (2) INPUT x = 2 解:(1)错误,变量之间应该用“,”隔开,应改为:INPUT a ,b ,c 备注:输入语句的一般格式是如果是输入一个变量,一般可以写成 INPUT “x=”;x 也可以简写为INPUT x ,如果是两个变量,一般可以写为也可以简写为INPUT a, b 变量中间要用“,”分隔,三个或三个以上的变量以此类推。
(2)错误,输入语句又称“键盘输入语句”,在程序运行过程中,停机等候用户由键盘输入数据,而不需要在写程序时指定,所以INPUT 后面只能是变量,不能是表达式,应改为:INPUT “请输入x 的值”;x 或INPUT x二输出语句常见错误解析例判断下列给出的输出语句是否正确,为什么,怎样改正?(1)PRINT A=3 (2)解:(1)错误,输出语句的格式为PRINT 语句不能用赋值号“=”,应改为:PRINT A(2)错误,输出语句可以输出多个表达式,不同的表达式之间用“,”分隔,不能用“;”分隔。
所以应改为:PRINT A ,B三 赋值语句常见错误解析例 判断下列给出的赋值语句是否正确,为什么,怎样改正? (1) 3=A (2)x+y+z=0 (3)A=B=4解:(1) 错误,赋值语句的一般格式是 , 赋值号的左边只能是变量,右边是一个常数或表达式,所以应改为:A=3(2) 错误,赋值语句不能给表达式赋值。
(3例 某同学编了一个交换两个变量A 和B 的值的程序(图一) 解:按照此程序运行,如果输入3,9输出的结果不是 A=B 表示把变量B 的值9赋给变量A, A 的初始值3被“覆盖”, A 的值变为9,变量B 的值保持不变;B=A 表示把刚才变量A 的值9变量B 的值被 “覆盖”,变为9 ,所以最后输出的是 量赋多个不同的值,但是变量的取值总是取最近被赋予的值),所以要交换两个变量的值,必须引如一个 中间变量x,暂时存放变量A 的值,并把其传递给变量B ,所以中间应改为:。
INPUT “a=”;a INPUT “b=”;b(图一)例:编写一个程序,对于函数⎪⎩⎪⎨⎧>+=<+-=)0(1)0(0)0(1x x x x x y 输入x 的值,输出相应的函数的值。
某同学编写了一个程序(图二),正确吗?如果不对,错在哪里?为什么?解析:条件语句的格式有两种,一个是只有一个“分支”的条件语句,它的格式见图三,一个是有两个“分支”的条件语句,它的一般格式见图四,这个同学编写的程序实际上两次运用了两个分支的条件语句,但是第一个条件语句实际上并不完整,少了一个END IF ,所以应在PRINT y 前加一个END IF.例:闰年是指年份能被4整除但是不能被100整除,或者能被400整除的年份,编写一个程序,判断输入的年份是否为闰年。
错解:依题意设计的程序如下:解析:本题是教材上的一道习题,这个错解是教师教学用书给出的答案,错误的原因在于,本程序有两套条件语句,当我们输入一个年份后,要被执行两次判断,结果会输出两次,对有些年份会输出两个相反的结果。
如:输入年份2008,按照第一套条件语句,2008是闰年,但是按照第二套条件语句,2008不是闰年。
正解:依题意设计的程序如图六。
备注:本程序把三个判断的条件集中在一起,对输入的年份只判断一次,便见分晓,有效地避免了错解中自相矛盾的现象,同时本解法还将错解中的赋值语句省略,集中到条件语句中说明是一个十分简捷程序。
(图二) (图三) (图四)(图六)例:分别用WHILE 型语句和UNTIL 型语句设计一个求100131211+⋅⋅⋅+++的值的程序。
错解:设计程序如下:错解分析:在WHILE 型程序里面i=1、sum=1,控制循环的条件为i ≤100,按此算法最后得到的结果应为1001312111+⋅⋅⋅++++,而不是题目要求的100131211+⋅⋅⋅+++,改正的方法是将sum=1改为sum=0;在UNTIL 型程序里面i=1、sum=0,控制条件为100≥i ,按此算法最后得到的结果是99131211+⋅⋅⋅+++,而不是题目要求的100131211+⋅⋅⋅+++,改正的方法是将100≥i 改为100>i 。