1.设计算法应注意的问题
(1)与解决该问题的一般方法相联系,从中提炼与概括算法步骤;
(2)将解决问题的过程划分为若干个步骤;
(3)引入有关的参数或变量对算法步骤加以表达;
(4)用简练的语言将各个步骤表达出来.
2.选择结构与条件语句
选择结构主要用在一些需要进行条件判断的算法中,如分段函数的求值,大小关系的判断等;条件语句主要有两种格式:一是If—Then—Else语句;二是If—Then语句.
如果要求当表达式的结果为假时,执行另一序列的语句,可采用前者.
3.循环语句与循环结构
循环语句主要用在一些有规律的重复计算中,如累加求和、累积求积等,循环结构主要注意设计合理的计数变量.
4.输入、输出和赋值语句
输入、输出和赋值语句是一个程序必不可少的语句,要注意它们各自的格式和要求,尤其是赋值语句,它在程序编写中具有十分重要的作用,要熟练掌握特别应注意掌握通过引入第三变量,利用三个赋值语句交换两个变量的值的方法.
[例1] 若1+3+5+…+n>2 013,试设计算法框图,寻找满足条件的最小奇数n.
[解] 算法分析:因为涉及累加问题,所以算法含有循环结构,步骤如下:
1.S=0,i=1.
2.S=S+i,i=i+2.
3.判断S>2 013是否成立:
(1)若S>2 013,则i=i-2,输出i;
(2)若S<2 013,返回步骤2.
画法步骤:
(1)画顺序结构图,即起止框及两个处理框,并分别填入循环初始条件(如图①);
(2)画循环结构图,先画循环体即两个处理框(一个累加,一个计数),再画循环终止条件,即判断框并判断S>2 013是否成立,若不成立,则流向循环体进行再循环(如图②);
(3)画处理框并填入“i=i-2”,输出框输出i以及起止框表示算法结束(如图③).
算法框图如图:
[借题发挥] 循环结构必包含顺序结构和选择结构,在累加、累乘等需要反复执行的算法设计中,宜使用循环结构,这时要密切注意“循环体”、“循环变量”和“循环终止条件”三个重要组成部分的框图设计.
1.设计一个算法,计算10个实数的平均数,并画出相应的算法框图.
解:用一个循环依次输入10个实数,并用一个变量存放数的累加和,在求出10个实数的和后,除以10,就得到10个实数的平均数.算法如下:
1.令S=0,i=1.
2.输入一个数Gi.
3.计算S+Gi,其和仍放在S中.
4.使i的值增加1,仍用i表示.
5.如果i>10,则退出循环;如果i≤10,则转到第二步.
6.将平均数S/10存放在A中.
7.输出A.
框图如图
[例2] 执行如图所示的算法框图,如果输入的N是6,那么输出的p是( )
A.120 B.720
C.1 440 D.5 040
[解析] 由程序框图可得,输出的p=1×2×3×4×5×6=720.
[答案] B
[借题发挥] 在算法框图中,当执行到赋值语句时,要注意赋值号“=”右边的字母值是在前面执行步骤中“离”此步骤“最近”时该字母的值.
2.执行如图所示的算法框图,输出的S值为( )
A.-3 B.-
C. D.2
解析:i=0<4,i=0+1=1,S==;
i=1<4,i=1+1=2,S==-;
i=2<4,i=2+1=3,S==-3;
i=3<4,i=3+1=4,S==2;
i=4,跳出循环,输出S的值为2.
答案:D
3.阅读如图所示的算法框图,运行相应的程序,输出的结果是( )
A.32 B.16
C.8 D.4
解析:根据算法框图依次执行:
S==-,n=2;
S==,n=4;
S==3,n=8,
S=3>1,故跳出循环,所以输出结果为8.
答案:C
4.(2012·广东高考)执行如图所示的程序框图,若输入n的值为6,则输出s的值为( )
A.105 B.16
C.15 D.1
解析:按照程序过程,通过反复判断循环条件执行程序.执行过程为 s=1×1=1,i=3;s=1×3=3,i=5;s=3×5=15,i=7≥6,跳出循环.故输出s的值为15.
答案:C
[例3] 某商场第一年销售计算机5 000台,如果平均每年销售量比上一年增加10%,那么从第一年起,约几年内可使总销售量达到30 000台?请设计算法框图,并写出算法语句.
[解] 根据题意,每年销售量比上一年增加的百分率相同,设总和为sum,n年后达到30 000台.
第一年销售了5 000台;
第二年销售了(5 000+5 000×10%)=5 000(1+10%)(台);
第三年销售了[5 000(1+10%)+5 000(1+10%)×10%]=5 000(1+10%)2(台);
…
第n年销售了5 000(1+10%)n-1(台).
总和sum=5 000+5 000(1+10%)+5 000(1+10%)2+…+5 000(1+10%)n-1.
由sum≥30 000求n的最小值,具体步骤:
(1)输入变量m=5 000,i=0,sum=0;
(2)i从0开始循环,判断sum是否小于30 000.如果是,则sum=sum+m,m=m(1+10%),i=i+1继续循环,否则,则输出i.
(3)循环结束,输出i.
框图如图所示.
用算法语句描述为:
m=5 000
sum=0
i=0
Do
sum=sum+m
m=m*(1+10%);
i=i+1;
Loop While sum<30 000
输出i
End.
[借题发挥] 利用基本语句解决实际问题的一般思路是:先根据题目要求写出算法,并画出相应的算法框图,最后将算法框图用相应语句表示出来.
5.某纺织厂2012年的生产总值为300万元,如果年增产率为5%,设计算法,计算该厂最早在哪一年生产总值超过400万元,并用语句描述该算法.
解:从2008年底开始,经过x年后生产总值为300(1+5%)x,可将2008年生产总值赋给变量a,然后对其进行累乘,用n作为计数变量进行循环,直到a的值超过400万元为止.由于预先不知道循环的次数,所以用Do Loop语句.
算法框图如下所示:
用算法语句描述为:
a=300
p=1.05
n=2008
Do
a=a*p
n=n+1
Loop While a<=400
输出n.
(时间90分钟,满分120分)
一、选择题(本大题共10小题,每小题5分,满分50分.在每小题给出的四个选项中,只有一项是符合题目要求的)
1.下面的叙述中,不是解决问题的算法的是( )
A.从北京到海南岛旅游,先坐火车,再坐飞机抵达
B.按顺序进行下列运算:1+1=2,2+1=3,3+1=4,……,99+1=100
C.方程x2-4=0有两个实根
D.求1+2+3+4+5的值,先计算1+2=3,再计算3+3=6,6+4=10,10+5=15,最终结果为15
解析:算法是解决某类问题的一系列步骤或程序,C只描述了事实,没有解决问题的步骤.
答案:C
2.无序列{5,1,3,6,4}排序时,第四次比较后得到的数据列是( )
A.{1,3,5} B.{1,3,5,6}
C.{1,3,5,4,6} D.{1,3,4,5,6}
解析:第一次比较后得数据列{1,5};第二次比较后得数据列{1,3,5}(3与5比较);第三次比较后得数据列{1,3,5}(3与1比较);第四次比较后得数据列{1,3,5,6}(6与5比较).
答案:B
3.下列程序中的For语句终止循环时,S等于( )
S=0
For M=1 To 10
S=S+M
Next
输出S
A.1 B.5
C.10 D.55
解析:S=0+1+2+3+…+10=55.
答案:D
4.运行以下程序时,执行循环体的次数是( )
i=1
Do
i=i+1
i=i*i
Loop While i<10
输出i.
A.2 B.10
C.11 D.8
解析:第一次执行循环体:
i=1,
i=i+1=2,
i=i*i=4,
i=4<10,成立
第二次执行循环体:
i=4,
i=i+1=5
i=i*i=25
i=25<10,不成立,
退出循环体,共执行了2次.
答案:A
5.当a=1,b=3时,执行完下面的语句后x的值是( )
If a<b Then
x=a+b
Else
x=a-b
End If
输出x.
A.1 B.3
C.4 D.-2
解析:∵1<3,满足a<b,∴x=1+3=4.
答案:C
6.(2012·福建高考)阅读如图所示的程序框图,运行相应的程序,输出的s值等于( )
A.-3 B.-10
C.0 D.-2
解析:由程序框图可知,当k=1时,1<4,s=1,k=2;当k=2时,2<4,s=0,k=3;当k=3时,3<4,s=-3,k=4;当k=4时不满足条件,则输出s=-3.
答案:A
7.(2013·抚顺模拟)下图给出的是计算1+2+4+…+219的值的一个算法框图,则其中判断框内应填入的是( )
A.i=19 B.i≥20
C.i≤19 D.i≤20
解析:计算S=1+2+4+…+219的值使用的是循环结构,当i≥20时退出,输出S.
答案:B
8.(2013·怀柔模拟)右图是计算函数y=的值的算法框图,则在①、②和③处应分别填入的是( )
A.y=-x,y=0,y=x2
B.y=-x,y=x2,y=0
C.y=0,y=x2,y=-x
D.y=0,y=-x,y=x2
解析:当x>-1不成立时,y=-x,故①处应填“y=-x”;当x>-1成立时,若x>2,则y=x2,即②处应填“y=x2”,否则y=0,即③处应填“y=0”.
答案:B
9.当a=16时,下面的算法输出的结果是( )
If a<10 Then
y=2]B.32
C.10 D.256
解析:该程序是求分段函数
y=的函数值.
答案:D
10.对于任意函数f(x),x∈D,可按右图所示构造一个数字发生器,其工作原理如下:
①输入数据x0∈D,经过数字发生器,输出x1=f(x0);
②若x1 D,则数字发生器结束工作;若x1∈D,则将x1反馈回输入端,再输出x2=f(x1),并依此规律继续下去.
现定义f(x)=2x+1,D=(0,1 000).
若输入x0=0,当发生器结束工作时,输出数据的总个数为( )
A.8 B.9
C.10 D.11
解析:依题中规律,当输入x0=0时,可依次输出1,3,7,15,31,63,127,255,511,1 023共10个数据.
答案:C
二、填空题(本大题共4个小题,每小题5分,满分20分.把答案填写在题中的横线上)
11.下列程序运行后输出的结果为________.
x=5
y=-20
If x<0 Then
x=y-3
Else
y=y+3
End If
输出x-y,y-x
解析:当x=5时,y=-20+3=-17
所以最后输出的x-y=5-(-17)=22,y-x=-17-5=-22.
答案:22,-22
12.下面的程序运行后输出的结果是________.
x=1
i=1
Do
x=x+1
i=i+1
Loop While i<=5
输出x.
解析:每循环一次时,x与i均增加1,直到i>5时为止,所以输出结果为6.
答案:6
13.已知函数f(x)=|x-3|,下面算法框图表示的是输入x的值,求其相应函数值的算法,请将该算法框图补充完整.其中①处应填________,②处应填________.
解析:f(x)=|x-3|=观察算法框图可知,当条件成立时,有y=3-x,所以①处应填x<3.当条件不成立即x≥3时,有y=x-3,所以②处应填y=x-3.
答案:x<3 y=x-3
14.(2012·湖南高考)如果执行如图所示的程序框图,输入x=4.5,则输出的数i=________.
解析:执行程序,i,x的取值依次为i=1,x=3.5;i=2,x=2.5;i=3,x=1.5;i=4,x=0.5;结束循环,输出i的值为4.
答案:4
三、解答题(本大题共4个小题,满分50分.解答应写出必要的文字说明、证明过程或演算步骤)
15.(12分)如果直线l与直线l1:x+y-1=0关于y轴对称,设计求直线l的方程的算法.
解:第一步,在l上任取一点P(x,y).
第二步,写出P(x,y)关于y轴的对称点P1(-x,y).
第三步,由P1(-x,y)在直线l1:x+y-1=0上,知P1的坐标适合l1的方程,即-x+y-1=0.
第四步,化简,得l的方程为x-y+1=0.
16.(12分)给出四个数:6,-3,0,15.
(1)用直接插入排序法将它们按从小到大的顺序排列;
(2)用折半插入排序法将5插入有序列中,用自然语言表述算法.
解:(1)1.以{6}作为有序列;
2.由-3<6,得有序列{-3,6};
3.将0插入{-3,6},得有序列{-3,0,6};
4.将15插入{-3,0,6}得有序列{-3,0,6,15}.
所以排序后的序列为{-3,0,6,15}.
(2)序列{-3,0,6,15}的“中间位置”数据为0,
∵0<5,∴5在右半边,
∵序列{6,15}的“中间位置”数为6,5<6,
∴5在6的左侧,∴5在0与6之间,故得到的新有序列为{-3,0,5,6,15}.
17.(12分)根据下列算法语句画出相应的框图.
S=1
n=1
Do
S=S*n
n=n+1
Loop While S<1 000
输出n.
解:框图如下所示:
8.(14分)如图所示,在边长为4的正方形ABCD的边上有一点P,沿着折线BCDA由点B(起点)向点A(终点)运动.设点P运动的路程为x,△APB的面积为y,求y与x之间的函数关系式.并写出算法,画出算法框图,写出程序.
解:函数关系式如下
y=
算法如下:
1.输入x.
2.如果0≤x≤4,则使y=2x;否则执行3.
3.如果4<x≤8,则使y=8;否则执行4.
4.如果8<x≤12,则使y=2(12-x);否则结束.
5.输出y.
算法框图如图所示:
算法语句:
输入x;
If x>=0 and x<=4 Then
y=2*x
Else
If x<=8 Then
y=8
Else
If x<=12 Then
y=2*(12-x)
End If
End If
输出y.