第三章 算法初步
3.1 算法与程序框图
二、复习要点
1.在数学中,现代意义上的“算法”通常是指可以用计算机来解决的某一类问题的程序或步骤,这些程序和步骤必须是明确和有效的,而且能够在有限步之内完成.比如解方程的算法、函数求值的算法、作图的算法等等.
2.算法虽然没有一个明确的概念,但其特点还是很鲜明的,不仅要注意理解算法的程序性、有限性、构造性、精确性的特点,还应该充分理解算法的问题指向性,即算法往往指向解决某一个或某一类问题,泛泛地谈算法是没有意义的,算法一定以问题为载体.
3.程序框图又称流程图(flow chart),是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形. 4.算法步骤,程序框图,程序 5.顺序,条件,循环
6.构成程序框的图形符号及其作用(见教材第6页). 7.循环结构,循环体,循环结构,条件结构 8.当型,直到型
9. 条件结构,计数变量,累加变量,计数变量,累加变量 三、课前热身:
1. D 2.B 3.(文)C (理)A 4.A 5.A 6.0,1 四、例题分析
例1 写出1×2×4×8×16值的一个算法. 解析:算法1:
• S1:先求1×2,得到2;
• S2:将S1得到的结果再乘以4,得到8 ; • S3:将S2得到的结果再乘以8,得到64 ;
• S4:将S3得到的结果再乘以16,得到最后结果1024 ;.
算法2:
• S1:T←1,使T=1; • S2:I←2,使I=1;
• S3:T←T×I ( 将T×I的结果仍放在变量T中 ); • S4:I←I×2( 使I的值增加之前的2倍 );.
• S5:如果I不大于16,返回重新执行步骤S3、S4、S5,否则算法结束,
这样得到T的值就是所求的结果.
点评:
(1)述算法语言时,要满足算法的两个特点(有限性和确定性),把一个问题合理地分解为若干个有限的步骤,一步一步地执行,是书写算法语言的一个重要思想方法,也是教学的重点.教学时应该注重书写过程的步骤化、条理化的分析,使用“按部就班”等形象语言进行解释描述,使教学更加贴切生动;
(2)对于三种表示方法的教学,应该采用螺旋上升、渐次递进的方式,注意三种表示方法的整合渗透与前引后联关系;
(3)本例中算法1思路简单,但在计算较多乘积时,算法步骤太多;算法2形式简练,且具有一定的通用性和灵活性.
(4)算法语句中S3到S5组成了一个循环结构,在实现算法时要反复多次执行.在实际问题中通常需要顺序结构、条件结构和循环结构的相互嵌套使用.
例2 将三个数a,b,c中的最大数输出.
分析:将max=a定义为最大值,依次与b,c比较大小,遇到大的就替换max的值,最后输出max的值.
解:
第一步,输 入a,b,c的值,并且令max=a;
第二步,若b>max成立,则用b的值替换max的值;否则直接执行下一步; 第三步,若c>max成立,则用c的值替换max的值;否则直接执行下一步; 第四步,最后输出max的值.
例3 某快递公司规定甲、乙两地之间物品的托运费用根据下面的方法计算:
ìï0.53wf=ïí
ïïî50?0.53
(w£50),
0.85?(w50)(w
其中f(单位:元)为托运费,w为托运物品的重量(单位:千克),试画出计算费用f的程序框图. 自然语言是:
第一步,输入物品重量w;
第二步,如果w£50,那么f=0.53w,否则f=50?0.53第三步,输出物品重量w和托运费f.
0.85?(w50);
程序框图如下:
例4 设计计算
1
55555555
的值的算法.
解:算法: 第一步,x
1; 5
第二步,i1; 第三步,x
1
; 5x
第四步,ii1;
第五步,如果i7,则输出x,否则,返回第3步,重新执行3,4,5步.
程序框图如右图:
例5 (2008广东卷)阅读图1的程序框图,若输入m4,n6,则输出ai.
解法1:要结束程序的运算,就必须通过n整除a的条件运算,而同时m也整除a,那么a的最小值应为m和n的最小公倍数12,即此时有i3.
解法2:
输入m4,n6,则i1时,ami4,n6不能整除4,
所以,i2,ami8,n6不能整除8, 所以,i3,ami12,n6能整除12.于是,
a12,i3.
例6 (2008山东13)执行程序框图(图2),若p=0.8,则输出的n= . 解:
111
0.8,因此输出n
4248
图2
例7(08海南)如程序框图(图3),如果输入三个实数a,b,c,要求输出这三个数中最大的数,那么在空白的判断框中,应该填入下面四个选项中的( )
A.cx B.xc C.cb D.bc
解:A.变量x的作用是保留3个数中的最大值,所以第二个条件结构的判断框内语句为“c>x”,满足“是”则交换两个变量的数值后输出x的值结束程序,满足“否”直接输出x的值结束程序.
例8(2007,广东)下面左图是某县参加2007年高考的学生身高条形统计图,从左到右的各条形表示的学生人数依次记为A1、A2、„、A10(如A2表示身高(单位:cm)(150,155)内的学生人数).右图是统计左图中身高在一定范围内学生人数的一个算法流程图.现要统计身高在160~180cm (含160cm,不含180cm)的学生人数,那么在流程图中的判断框内应填写的条件是( )
(A)i<6 (B)i<7 (C)i<8 (D) i<9
分析:由右图可知A4表示身高(单位:cm)(160,165)内的学生人数,A7表示身高(单位:cm)(175,180)内的学生人数.本题要统计在160~180cm(含160cm,不含180cm)的学生人数.故i<8.
例9 根据条件把程序框图补充完整,求1→1000内所有奇数的和. 答案:
(1) S=S+i ; (2) i =i +2 .
例10 分析:本题设计角度新颖,融数列算法知识于一体,可有效考查学生对数列、框图等知识掌握的情况,培养学生分析和解决问题的能力。解题关键是对框图功能要十分清楚.
五、巩固练习 1.D. 2.解析:
a
b12
0(ab),,
22
a
bab∴(ab),故最后打印出来的一定是.选A.
22
3.D.
4.答案:89. 解:根据算法可知,X的值xn构成了一个等差数列{xn},S的值是数列{xn}相应的前n项和,且x13,d2,所以xn2n1.又S2007,所以n44,故xn89.所以输出的X的值等于89.
5.625 6.13,21
3.2 基本算法语句
二、复习要点
1于算法中的顺序结构。输入和输出语句分别用来实现算法的输入信息,输出结果的功能。 2.
3.赋值语句中的“=”叫做赋值号,赋值语句的作用是:先计算出赋值号右边表达式的值,然后把这个值赋给赋值号左边的变量,使该变量的值等于表达式的值。 4一般格式是IF-THEN-ELSE格式。条件语句的作用是:在程序执行过程中,根据判断是否满足约定的条件而决定是否需要转换到何处去。需要计算机按条件进行分析、比较、判断,并按判断后的不同情况进行不同的处理。
5.算法中的循环结构是由循环语句来实现的。对应于程序框图中的两种循环结构,一般程序设计语言中也有当型(WHILE型)和直到型(UNTIL型)两种语句结构。即WHILE语句和UNTIL语句。
6.当计算机遇到WHILEWHILE与WEND过程反复进行,直到某一次条件不符合为止。这时,计算机将不执行循环体,直接跳到WEND语句后,接着执行WEND循环。
三、课前热身:
1.答案:C 解析:在算法语句中,“=”具有赋值功能,aa1表示将a1的值赋给a. 2.答案:A 3.答案:C 4.答案:32 解析:因为A3,B6,所以C36523. 5.B
四、例题分析
例1 解:程序:INPUT“x=”;x 输入语句
y=x^3+3*x^2-24*x+30 赋值语句 PRINT x 打印语句 PRINT y 打印语句 END
点评:要熟悉三种语句的格式与功能.
例2 解:
例3 解析:先把解决问题的思路用程序框图表示出来,然后再根据程序框图给出的算法步骤,逐步把算法用对应的程序语句表达出来.
算法分析:我们知道:
若b4ac0,原方程有两个不相等的实数根,
即x1
2
bb,x2; 2a2a
b
; 2a
若0,原方程有两个相等的实数根x1x2
若0,原方程没有实数根.
也就是说,在求解方程之前,需要首先判断判别式的符号.因此,这个过程可以用算法中的条件结构来实现.又因为方程的两个根有相同的部分,为了避免重复计算,可
b
以在计算x1和x2之前,先计算p
,q.
2a
(程序)
INPUT “Please input a,b,c =”;a,b,c d=b*b-4*a*c p=-b/(2*a)
q=SQR(ABS(d))/(2*a) IF d>=0 THEN x1=p+q
x2=p-q
IF x1=x2 THEN
PRINT “One real root:”;x1 ELSE
PRINT “Two real roots:x1”;x1,“and x2”;x2 END IF ELSE
PRINT “No real root!” END IF END
例4
分析:这是一个累加问题。我们可以用WHILE型语句,也可以用UNTIL型语句。由此看来,解决问题的方法不是惟一的,当然程序的设计也是有多种的,只是程序简单与复杂的问题.
例5 分析:从1997年底开始,经过x年后生产总值为300×(1+5﹪)x,可将1997年生产总值赋给变量a,然后对其进行累乘,用n作为计数变量进行循环,直到a的值超过400万元为止。
解:
程序框图为: 程序:
五、巩固练习
1.6 2. B 3.B 4. D 5. D
3.3 算法案例
二、复习要点
1.两个正整数最大公约数 欧几里德算法 《九章算术》 2.除以 减
3.秦九韶 《数书九章》 一元求n次多项式的值 4.k进制 k
5.用各位上的数字与k的幂的乘积之和 按照十进制数的运算规则计算出结果 6.除k取余法 用k连续去除十进制数或所得的商 把各步得到的余数倒着写出 三、课前热身:
1.B 2.D 3.D 4.C 5.A
四、例题分析
例1解:(1)第一步 用两数中较大的数除以较小的数,求得商和余数8251=6105×1+2146 ;
第二步 对6105和2146重复第一步的做法:6105=2146×2+1813; 同理6105和2146的最大公约数也是2146和1813的最大公约数。 2146=1813×1+333 ;
1813=333×5+148 ; 333=148×2+37 ; 148=37×4+0 .
所以37是148和37的最大公约数,也就是8251和6105的最大公约数.
(2)由于63不是偶数,把98和63以大数减小数,并辗转相减 ,即
98-63=35 63-35=28 35-28=7 28-7=21 21-7=14 14-7=7
所以,98和63的最大公约数等于7 .
例2 f(x)=5x5+2x4+3.5x3-2.6x2+1.7x-0.8,
解:将多项式变形: f(x)=((((5x+2)x+3.5)x-2.6)x+1.7)x-0.8.按由里到外的顺序,依此计算一次多项式当x = 5时的值, 所以,当x = 5时,多项式的值等于17255.2 .
543210例3解:(1) 110011;(2)12120202121251
(2)利用除2取余法,把各步所得的余数从下到上排列,得到89=1011001(2).
五、巩固练习
1.A 2.D 3.C.提示:800=360×2+80,360=80×4+40,80=40×2. 4.F(x)=x3+x2+2x+3 .
第三章 算法初步
3.1 算法与程序框图
二、复习要点
1.在数学中,现代意义上的“算法”通常是指可以用计算机来解决的某一类问题的程序或步骤,这些程序和步骤必须是明确和有效的,而且能够在有限步之内完成.比如解方程的算法、函数求值的算法、作图的算法等等.
2.算法虽然没有一个明确的概念,但其特点还是很鲜明的,不仅要注意理解算法的程序性、有限性、构造性、精确性的特点,还应该充分理解算法的问题指向性,即算法往往指向解决某一个或某一类问题,泛泛地谈算法是没有意义的,算法一定以问题为载体.
3.程序框图又称流程图(flow chart),是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形. 4.算法步骤,程序框图,程序 5.顺序,条件,循环
6.构成程序框的图形符号及其作用(见教材第6页). 7.循环结构,循环体,循环结构,条件结构 8.当型,直到型
9. 条件结构,计数变量,累加变量,计数变量,累加变量 三、课前热身:
1. D 2.B 3.(文)C (理)A 4.A 5.A 6.0,1 四、例题分析
例1 写出1×2×4×8×16值的一个算法. 解析:算法1:
• S1:先求1×2,得到2;
• S2:将S1得到的结果再乘以4,得到8 ; • S3:将S2得到的结果再乘以8,得到64 ;
• S4:将S3得到的结果再乘以16,得到最后结果1024 ;.
算法2:
• S1:T←1,使T=1; • S2:I←2,使I=1;
• S3:T←T×I ( 将T×I的结果仍放在变量T中 ); • S4:I←I×2( 使I的值增加之前的2倍 );.
• S5:如果I不大于16,返回重新执行步骤S3、S4、S5,否则算法结束,
这样得到T的值就是所求的结果.
点评:
(1)述算法语言时,要满足算法的两个特点(有限性和确定性),把一个问题合理地分解为若干个有限的步骤,一步一步地执行,是书写算法语言的一个重要思想方法,也是教学的重点.教学时应该注重书写过程的步骤化、条理化的分析,使用“按部就班”等形象语言进行解释描述,使教学更加贴切生动;
(2)对于三种表示方法的教学,应该采用螺旋上升、渐次递进的方式,注意三种表示方法的整合渗透与前引后联关系;
(3)本例中算法1思路简单,但在计算较多乘积时,算法步骤太多;算法2形式简练,且具有一定的通用性和灵活性.
(4)算法语句中S3到S5组成了一个循环结构,在实现算法时要反复多次执行.在实际问题中通常需要顺序结构、条件结构和循环结构的相互嵌套使用.
例2 将三个数a,b,c中的最大数输出.
分析:将max=a定义为最大值,依次与b,c比较大小,遇到大的就替换max的值,最后输出max的值.
解:
第一步,输 入a,b,c的值,并且令max=a;
第二步,若b>max成立,则用b的值替换max的值;否则直接执行下一步; 第三步,若c>max成立,则用c的值替换max的值;否则直接执行下一步; 第四步,最后输出max的值.
例3 某快递公司规定甲、乙两地之间物品的托运费用根据下面的方法计算:
ìï0.53wf=ïí
ïïî50?0.53
(w£50),
0.85?(w50)(w
其中f(单位:元)为托运费,w为托运物品的重量(单位:千克),试画出计算费用f的程序框图. 自然语言是:
第一步,输入物品重量w;
第二步,如果w£50,那么f=0.53w,否则f=50?0.53第三步,输出物品重量w和托运费f.
0.85?(w50);
程序框图如下:
例4 设计计算
1
55555555
的值的算法.
解:算法: 第一步,x
1; 5
第二步,i1; 第三步,x
1
; 5x
第四步,ii1;
第五步,如果i7,则输出x,否则,返回第3步,重新执行3,4,5步.
程序框图如右图:
例5 (2008广东卷)阅读图1的程序框图,若输入m4,n6,则输出ai.
解法1:要结束程序的运算,就必须通过n整除a的条件运算,而同时m也整除a,那么a的最小值应为m和n的最小公倍数12,即此时有i3.
解法2:
输入m4,n6,则i1时,ami4,n6不能整除4,
所以,i2,ami8,n6不能整除8, 所以,i3,ami12,n6能整除12.于是,
a12,i3.
例6 (2008山东13)执行程序框图(图2),若p=0.8,则输出的n= . 解:
111
0.8,因此输出n
4248
图2
例7(08海南)如程序框图(图3),如果输入三个实数a,b,c,要求输出这三个数中最大的数,那么在空白的判断框中,应该填入下面四个选项中的( )
A.cx B.xc C.cb D.bc
解:A.变量x的作用是保留3个数中的最大值,所以第二个条件结构的判断框内语句为“c>x”,满足“是”则交换两个变量的数值后输出x的值结束程序,满足“否”直接输出x的值结束程序.
例8(2007,广东)下面左图是某县参加2007年高考的学生身高条形统计图,从左到右的各条形表示的学生人数依次记为A1、A2、„、A10(如A2表示身高(单位:cm)(150,155)内的学生人数).右图是统计左图中身高在一定范围内学生人数的一个算法流程图.现要统计身高在160~180cm (含160cm,不含180cm)的学生人数,那么在流程图中的判断框内应填写的条件是( )
(A)i<6 (B)i<7 (C)i<8 (D) i<9
分析:由右图可知A4表示身高(单位:cm)(160,165)内的学生人数,A7表示身高(单位:cm)(175,180)内的学生人数.本题要统计在160~180cm(含160cm,不含180cm)的学生人数.故i<8.
例9 根据条件把程序框图补充完整,求1→1000内所有奇数的和. 答案:
(1) S=S+i ; (2) i =i +2 .
例10 分析:本题设计角度新颖,融数列算法知识于一体,可有效考查学生对数列、框图等知识掌握的情况,培养学生分析和解决问题的能力。解题关键是对框图功能要十分清楚.
五、巩固练习 1.D. 2.解析:
a
b12
0(ab),,
22
a
bab∴(ab),故最后打印出来的一定是.选A.
22
3.D.
4.答案:89. 解:根据算法可知,X的值xn构成了一个等差数列{xn},S的值是数列{xn}相应的前n项和,且x13,d2,所以xn2n1.又S2007,所以n44,故xn89.所以输出的X的值等于89.
5.625 6.13,21
3.2 基本算法语句
二、复习要点
1于算法中的顺序结构。输入和输出语句分别用来实现算法的输入信息,输出结果的功能。 2.
3.赋值语句中的“=”叫做赋值号,赋值语句的作用是:先计算出赋值号右边表达式的值,然后把这个值赋给赋值号左边的变量,使该变量的值等于表达式的值。 4一般格式是IF-THEN-ELSE格式。条件语句的作用是:在程序执行过程中,根据判断是否满足约定的条件而决定是否需要转换到何处去。需要计算机按条件进行分析、比较、判断,并按判断后的不同情况进行不同的处理。
5.算法中的循环结构是由循环语句来实现的。对应于程序框图中的两种循环结构,一般程序设计语言中也有当型(WHILE型)和直到型(UNTIL型)两种语句结构。即WHILE语句和UNTIL语句。
6.当计算机遇到WHILEWHILE与WEND过程反复进行,直到某一次条件不符合为止。这时,计算机将不执行循环体,直接跳到WEND语句后,接着执行WEND循环。
三、课前热身:
1.答案:C 解析:在算法语句中,“=”具有赋值功能,aa1表示将a1的值赋给a. 2.答案:A 3.答案:C 4.答案:32 解析:因为A3,B6,所以C36523. 5.B
四、例题分析
例1 解:程序:INPUT“x=”;x 输入语句
y=x^3+3*x^2-24*x+30 赋值语句 PRINT x 打印语句 PRINT y 打印语句 END
点评:要熟悉三种语句的格式与功能.
例2 解:
例3 解析:先把解决问题的思路用程序框图表示出来,然后再根据程序框图给出的算法步骤,逐步把算法用对应的程序语句表达出来.
算法分析:我们知道:
若b4ac0,原方程有两个不相等的实数根,
即x1
2
bb,x2; 2a2a
b
; 2a
若0,原方程有两个相等的实数根x1x2
若0,原方程没有实数根.
也就是说,在求解方程之前,需要首先判断判别式的符号.因此,这个过程可以用算法中的条件结构来实现.又因为方程的两个根有相同的部分,为了避免重复计算,可
b
以在计算x1和x2之前,先计算p
,q.
2a
(程序)
INPUT “Please input a,b,c =”;a,b,c d=b*b-4*a*c p=-b/(2*a)
q=SQR(ABS(d))/(2*a) IF d>=0 THEN x1=p+q
x2=p-q
IF x1=x2 THEN
PRINT “One real root:”;x1 ELSE
PRINT “Two real roots:x1”;x1,“and x2”;x2 END IF ELSE
PRINT “No real root!” END IF END
例4
分析:这是一个累加问题。我们可以用WHILE型语句,也可以用UNTIL型语句。由此看来,解决问题的方法不是惟一的,当然程序的设计也是有多种的,只是程序简单与复杂的问题.
例5 分析:从1997年底开始,经过x年后生产总值为300×(1+5﹪)x,可将1997年生产总值赋给变量a,然后对其进行累乘,用n作为计数变量进行循环,直到a的值超过400万元为止。
解:
程序框图为: 程序:
五、巩固练习
1.6 2. B 3.B 4. D 5. D
3.3 算法案例
二、复习要点
1.两个正整数最大公约数 欧几里德算法 《九章算术》 2.除以 减
3.秦九韶 《数书九章》 一元求n次多项式的值 4.k进制 k
5.用各位上的数字与k的幂的乘积之和 按照十进制数的运算规则计算出结果 6.除k取余法 用k连续去除十进制数或所得的商 把各步得到的余数倒着写出 三、课前热身:
1.B 2.D 3.D 4.C 5.A
四、例题分析
例1解:(1)第一步 用两数中较大的数除以较小的数,求得商和余数8251=6105×1+2146 ;
第二步 对6105和2146重复第一步的做法:6105=2146×2+1813; 同理6105和2146的最大公约数也是2146和1813的最大公约数。 2146=1813×1+333 ;
1813=333×5+148 ; 333=148×2+37 ; 148=37×4+0 .
所以37是148和37的最大公约数,也就是8251和6105的最大公约数.
(2)由于63不是偶数,把98和63以大数减小数,并辗转相减 ,即
98-63=35 63-35=28 35-28=7 28-7=21 21-7=14 14-7=7
所以,98和63的最大公约数等于7 .
例2 f(x)=5x5+2x4+3.5x3-2.6x2+1.7x-0.8,
解:将多项式变形: f(x)=((((5x+2)x+3.5)x-2.6)x+1.7)x-0.8.按由里到外的顺序,依此计算一次多项式当x = 5时的值, 所以,当x = 5时,多项式的值等于17255.2 .
543210例3解:(1) 110011;(2)12120202121251
(2)利用除2取余法,把各步所得的余数从下到上排列,得到89=1011001(2).
五、巩固练习
1.A 2.D 3.C.提示:800=360×2+80,360=80×4+40,80=40×2. 4.F(x)=x3+x2+2x+3 .