论文部分内容阅读
算法与程序框图的三种基本结构的共同点:(1)只有一个入口;(2)只有一个出口,请注意一个判断框有两个出口,而一个条件结构只有一个出口,不要将判断框的出口和条件结构的出口混为一谈;(3)结构内的每一部分都有机会被执行到,也就是说每一个框都应该有从入口到出口的路径通过它;(4)结构内的循环都不存在死循环. 上述共同点是检查一个程序框图或算法是否正确、合理的基本方法.
1.经典算法类
例1 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量就会吃羚羊.该人如何将动物转移过河?请设计算法.
解析 任何动物同船不用考虑动物的争斗但需考虑承载的数量,还应考虑到两岸的动物都得保证狼的数量要小于羚羊的数量,故在算法的构造过程中尽可能保证船里面有狼,这样才能使得两岸的羚羊数量占到优势,具体算法如下:
第一步,人带两只狼过河,自己返回.
第二步,人带一只狼过河,自己返回.
第三步,人带两只羚羊过河,并带两只狼返回.
第四步,人带一只羊过河,自己返回.
第五步,人带两只狼过河.
点拨 算法是解决某一类问题的精确描述,有些问题使用形式化、程序化的刻画是最恰当的.这就要求我们在写算法时应精练、清晰地表达,要善于分析任何可能出现的情况,体现出思维的严密性和完整性.
2.顺序结构类
例2 画出从5个不同的数中找出最大数的算法的程序框图.
解析 记这五个数是[a1,a2,a3,a4,a5,]框图如下.
点拨 (1)各步中的[b]可能在每一步中都不变,也可能在每一步中都变,但最后输出的[b]是这5个不同的数中最大的数.(2)设计算法的目的是将它作为指令交给计算机去完成,当解决一类问题的算法一旦确定,那么它的执行顺序也就确定了.因而,各步只能一步接一步地执行,不能跳跃,也不能交换.
3.条件结构类
例3 设计算法判断一元二次方程[ax2+bx+][c=0]是否有实数根,并画出相应的程序框图.
解析 算法步骤:
第一步,输入一元二次方程的系数:[a,b,c].
第二步,计算△[=b2-4ac]的值.
第三步,判断△≥0是否成立. 若成立,输出“方程有实根”;否则输出“方程无实根”.
结束算法.
程序框图:
点拨 根据一元二次方程的意义,需要计算判别式△[=b2-4ac]的值.再分成两种情况处理:(1)当△≥0时,一元二次方程有实数根;(2)当△<0时,一元二次方程无实数根.该问题实际上是一个分类讨论问题,根据一元二次方程系数的不同情况,最后结果就不同.因而当给出一个一元二次方程时,必须先确定判别式的值,然后再用判别式的值的取值情况确定方程是否有解.该例仅用顺序结构是办不到的,要对判别式的值进行判断,需要用到条件结构.
例4 设计算法,求[ax+b=0]的解,并画出程序框图.
解析 对于方程[ax+b=0],应该分情况讨论方程的解. 对一次项系数[a]和常数项[b]的取值情况进行分类,分类如下:
(1)当[a≠0]时,方程有惟一的实数解[-ba];
(2)当[a=0,b=0]时,方程的解为全体实数;
(3)当[a=0,b≠0]时,方程无解.
联想数学中的分类讨论的处理方式,可得如下算法步骤:
第一步,判断[a]是否不为零.若成立,输出结果“解为[-ba]”.
第二步,判断[a=0,b=0]是否同时成立.若成立,输出结果“解集为R”.
第三步,判断[a=0,b≠0]是否同时成立.若成立,输出结果“方程无解”.
点拨 条件结构嵌套与条件结构叠加的区别是:(1)条件结构叠加,程序执行时需依次对“条件1”“条件2”“条件3”……进行判断,只有遇到能满足的条件才执行该条件对应的操作.(2)条件结构嵌套所涉及的“条件2”“条件3”……是在前面所有条件依次一个一个的满足“分支条件成立”的情况下才能执行此操作,是多个条件同时成立的叠加和复合.
4.循环结构类
例5 设计一个算法,求1+2+4+…+249的值,并画出程序框图.
解析 算法步骤:
第一步,[sum=0].
第二步,[i=0].
第三步,[sum=sum+2i].
第四步,[i=i+1].
第五步:判断[i]是否大于49,若成立,则输出[sum],结束;否则返回第三步重新执行.
程序框图:
点拨 如果算法涉及的运算进行了多次重复的操作,且先后参与运算的数之间有相同的规律,就可引入变量循环参与运算(我们称之为循环变量),应用于循环结构.在循环结构中,要注意根据条件设计合理的计数变量、累加和累乘变量及其个数等,特别要求条件的表述要恰当、精确.累加变量的初始值一般取0,而累乘变量的初始值一般取1.
1.在画程序框图时,如果一个框图要分开画,要在断开处画上( )
A.流程线 B.注释框
C.判断框 D.连接点
2.下图给出的是计算[12+14+16+???+1100]的值的一个程序框图,其中判断框内应填入的条件是( )
A.[i]>100 B.[i]<=100
C.[i]>50 D.[i]<=50
3.设[y]为年份,按照历法的规定,如果[y]为闰年,那么或者[y]能被4整除不能被100整除,或者[y]能被400整除. 对于给定的年份[y],要确定索是否为闰年,如何设计算法,画出其流程图.
4.若有A、B、C三个不同大小的数字,你能设计一个算法,找出其中的最大值吗?试给出解决问题的一种算法,并画出流程图.
4.应该先两两比较,算法和流程图如下:
[S1]输入[A,B,C];
[S2]如果[A>B],那么转[S3],否则转[S4];
[S3]如果[A>C],那么输出[A],转[S5],否则输出[C],转[S5];
[S4]如果[B>C],那么输出[B],转[S5],否则输出[C];
[S5]结束.
1.经典算法类
例1 一个人带着三只狼和三只羚羊过河,只有一条船,同船可容纳一个人和两只动物,没有人在的时候,如果狼的数量不少于羚羊的数量就会吃羚羊.该人如何将动物转移过河?请设计算法.
解析 任何动物同船不用考虑动物的争斗但需考虑承载的数量,还应考虑到两岸的动物都得保证狼的数量要小于羚羊的数量,故在算法的构造过程中尽可能保证船里面有狼,这样才能使得两岸的羚羊数量占到优势,具体算法如下:
第一步,人带两只狼过河,自己返回.
第二步,人带一只狼过河,自己返回.
第三步,人带两只羚羊过河,并带两只狼返回.
第四步,人带一只羊过河,自己返回.
第五步,人带两只狼过河.
点拨 算法是解决某一类问题的精确描述,有些问题使用形式化、程序化的刻画是最恰当的.这就要求我们在写算法时应精练、清晰地表达,要善于分析任何可能出现的情况,体现出思维的严密性和完整性.
2.顺序结构类
例2 画出从5个不同的数中找出最大数的算法的程序框图.
解析 记这五个数是[a1,a2,a3,a4,a5,]框图如下.
点拨 (1)各步中的[b]可能在每一步中都不变,也可能在每一步中都变,但最后输出的[b]是这5个不同的数中最大的数.(2)设计算法的目的是将它作为指令交给计算机去完成,当解决一类问题的算法一旦确定,那么它的执行顺序也就确定了.因而,各步只能一步接一步地执行,不能跳跃,也不能交换.
3.条件结构类
例3 设计算法判断一元二次方程[ax2+bx+][c=0]是否有实数根,并画出相应的程序框图.
解析 算法步骤:
第一步,输入一元二次方程的系数:[a,b,c].
第二步,计算△[=b2-4ac]的值.
第三步,判断△≥0是否成立. 若成立,输出“方程有实根”;否则输出“方程无实根”.
结束算法.
程序框图:
点拨 根据一元二次方程的意义,需要计算判别式△[=b2-4ac]的值.再分成两种情况处理:(1)当△≥0时,一元二次方程有实数根;(2)当△<0时,一元二次方程无实数根.该问题实际上是一个分类讨论问题,根据一元二次方程系数的不同情况,最后结果就不同.因而当给出一个一元二次方程时,必须先确定判别式的值,然后再用判别式的值的取值情况确定方程是否有解.该例仅用顺序结构是办不到的,要对判别式的值进行判断,需要用到条件结构.
例4 设计算法,求[ax+b=0]的解,并画出程序框图.
解析 对于方程[ax+b=0],应该分情况讨论方程的解. 对一次项系数[a]和常数项[b]的取值情况进行分类,分类如下:
(1)当[a≠0]时,方程有惟一的实数解[-ba];
(2)当[a=0,b=0]时,方程的解为全体实数;
(3)当[a=0,b≠0]时,方程无解.
联想数学中的分类讨论的处理方式,可得如下算法步骤:
第一步,判断[a]是否不为零.若成立,输出结果“解为[-ba]”.
第二步,判断[a=0,b=0]是否同时成立.若成立,输出结果“解集为R”.
第三步,判断[a=0,b≠0]是否同时成立.若成立,输出结果“方程无解”.
点拨 条件结构嵌套与条件结构叠加的区别是:(1)条件结构叠加,程序执行时需依次对“条件1”“条件2”“条件3”……进行判断,只有遇到能满足的条件才执行该条件对应的操作.(2)条件结构嵌套所涉及的“条件2”“条件3”……是在前面所有条件依次一个一个的满足“分支条件成立”的情况下才能执行此操作,是多个条件同时成立的叠加和复合.
4.循环结构类
例5 设计一个算法,求1+2+4+…+249的值,并画出程序框图.
解析 算法步骤:
第一步,[sum=0].
第二步,[i=0].
第三步,[sum=sum+2i].
第四步,[i=i+1].
第五步:判断[i]是否大于49,若成立,则输出[sum],结束;否则返回第三步重新执行.
程序框图:
点拨 如果算法涉及的运算进行了多次重复的操作,且先后参与运算的数之间有相同的规律,就可引入变量循环参与运算(我们称之为循环变量),应用于循环结构.在循环结构中,要注意根据条件设计合理的计数变量、累加和累乘变量及其个数等,特别要求条件的表述要恰当、精确.累加变量的初始值一般取0,而累乘变量的初始值一般取1.
1.在画程序框图时,如果一个框图要分开画,要在断开处画上( )
A.流程线 B.注释框
C.判断框 D.连接点
2.下图给出的是计算[12+14+16+???+1100]的值的一个程序框图,其中判断框内应填入的条件是( )
A.[i]>100 B.[i]<=100
C.[i]>50 D.[i]<=50
3.设[y]为年份,按照历法的规定,如果[y]为闰年,那么或者[y]能被4整除不能被100整除,或者[y]能被400整除. 对于给定的年份[y],要确定索是否为闰年,如何设计算法,画出其流程图.
4.若有A、B、C三个不同大小的数字,你能设计一个算法,找出其中的最大值吗?试给出解决问题的一种算法,并画出流程图.
4.应该先两两比较,算法和流程图如下:
[S1]输入[A,B,C];
[S2]如果[A>B],那么转[S3],否则转[S4];
[S3]如果[A>C],那么输出[A],转[S5],否则输出[C],转[S5];
[S4]如果[B>C],那么输出[B],转[S5],否则输出[C];
[S5]结束.