【教师参考】新课标人教A版必修3同课异构课件:13 算法案例(2份)

文档属性

名称 【教师参考】新课标人教A版必修3同课异构课件:13 算法案例(2份)
格式 zip
文件大小 2.4MB
资源类型 教案
版本资源 人教新课标A版
科目 数学
更新时间 2015-04-19 20:13:23

文档简介

课件34张PPT。第一章 算法初步
1.3 算法案例3 59 15[问题1]:在小学,我们已经学过求最大公约数的知识,你能求出18与30的最大公约数吗?〖创设情景,揭示课题〗18 3023∴18和30的最大公约数是2×3=6.先用两个数公有的质因数连续去除,一直除到所得的商是互质数为止,然后把所有的除数连乘起来.案例1 辗转相除法与更相减损术〖创设情景,揭示课题〗[问题2]:我们都是利用找公约数的方法来求
最大公约数,如果两个数比较大而且根据我
们的观察又不能得到一些公约数,我们又应
该怎样求它们的最大公约数?比如求8251与
6105的最大公约数? 〖研探新知〗1.辗转相除法:例1 求两个正数8251和6105的最大公约数。 分析:8251与6105两数都比较大,而且没有明显的公约数,如能把它们都变小一点,根据已有的知识即可求出最大公约数.解:8251=6105×1+2146 显然8251与6105的最大公约数也必是2146的约数,同样6105与2146的公约数也必是8251的约数,所以8251与6105的最大公约数也是6105与2146的最大公约数。1.辗转相除法:例1 求两个正数8251和6105的最大公约数。解:8251=6105×1+2146;6105=2146×2+1813;
2146=1813×1+333;
1813=333×5+148;
333=148×2+37;
148=37×4+0.则37为8251与6105的最大公约数。 以上我们求最大公约数的方法就是辗转相除法。也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的。 第一步,给定两个正数m,n
第二步,计算m除以n所得到余数r
第三步,m=n,n=r
第四步,若r=0,则m,n的最大公约数等于m;否则返回第二步辗转相除法求最大公约数算法:思考 :需不需要比较m,n的大小不需要否开始 输入两个正数m,nr=m MOD nr=0?输出m结束m=nn=r是程序框图练习1:利用辗转相除法求两数4081与20723的最大公约数. (53)20723=4081×5+318;
4081=318×12+265;
318=265×1+53;
265=53×5+0.
2.更相减损术: 我国早期也有解决求最大公约数问题的算法,就是更相减损术。 更相减损术求最大公约数的步骤如下:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也,以等数约之。 翻译出来为:第一步:任意给出两个正数;判断它们是否都是偶数。若是,用2约简;若不是,执行第二步。
第二步:以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数。继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数。例2 用更相减损术求98与63的最大公约数. 解:由于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:用更相减损术求两个正数84与72的最大公约数。 (12)辗转相除法与更相减损术的比较: (1)都是求最大公约数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主;计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显。
(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到.〖教学设计〗[问题1]设计求多项式f(x)=2x5-5x4-4x3+3x2-6x+7当x=5时的值的算法,并写出程序.点评:上述算法一共做了15次乘法运算,5次加法运算.优点是简单,易懂;缺点是不通用,不能解决任意多项式求值问题,而且计算效率不高.n次多项式至多n(n+1)/2次乘法运算和n次加法运算案例2 秦九韶算法 这析计算上述多项式的值,一共需要9次乘法运算,5次加法运算.[问题2]有没有更高效的算法? 分析:计算x的幂时,可以利用前面的计算结果,以减少计算量, 即先计算x2,然后依次计算的值. 第二种做法与第一种做法相比,乘法的运算次数减少了,因而能提高运算效率.而且对于计算机来说,做一次乘法所需的运算时间比做一次加法要长得多,因此第二种做法能更快地得到结果. [问题3]能否探索更好的算法,来解决任意多项式的求值问题?f(x)=2x5-5x4-4x3+3x2-6x+7
=(2x4-5x3-4x2+3x-6)x+7
=((2x3-5x2-4x+3)x-6)x+7
=(((2x2-5x-4)x+3)x-6)x+7
=((((2x-5)x-4)x+3)x-6)x+7
v0=2
v1=v0x-5=2×5-5=5
v2=v1x-4=5×5-4=21
v3=v2x+3=21×5+3=108
v4=v3x-6=108×5-6=534
v5=v4x+7=534×5+7=2677所以,当x=5时,多项式的值是2677.这种求多项式值的方法就叫秦九韶算法.变为求几个一次式的值几个乘法
几个加法?秦九韶《数书九章》.2 -5 0 -4 3 -6 0x=5105252512512160560830403034所以,当x=5时,多项式的值是15170.练习:用秦九韶算法求多项式 f(x)=2x6-5x5-4x3+3x2-6x当x=5时的值.解:原多项式先化为:
f(x)=2x6-5x5 +0×x4-4x3+3x2-6x+0
列表21517015170 注意:n次多项式有n+1项,因此缺少哪一项应将其系数补0.f(x)=anxn+an-1xn-1+an-2xn-2+……+a1x+a0.我们可以改写成如下形式:f(x)=(…(anx+an-1)x+an-2)x+…+a1)x+a0. 求多项式的值时,首先计算最内层括号内一次多项式的值,即
v1=anx+an-1,然后由内向外逐层计算一次多项式的值,即 一般地,对于一个n次多项式v2=v1x+an-2,v3=v2x+an-3, ……,vn=vn-1x+a0. 这样,求n次多项式f(x)的值就转化为求n个一次多项式的值.这种算法称为秦九韶算法. 点评:秦九韶算法是求一元多项式的值的一种方法.
它的特点是:把求一个n次多项式的值转化为求n个一次多项式的值,通过这种转化,把运算的次数由至多n(n+1)/2次乘法运算和n次加法运算,减少为n次乘法运算和n次加法运算,大大提高了运算效率.v1=anx+an-1,v2=v1x+an-2,v3=v2x+an-3, ……,vn=vn-1x+a0. 观察上述秦九韶算法中的n个一次式,可见vk的计算要用到vk-1的值.若令v0=an,得 这是一个在秦九韶算法中反复执行的步骤,因此可用循环结构来实现.第一步,输入多项式次数n、最高次项的系数an和x的值
第二步,将v的值初始化为an,将i的值初始化为n-1
第三步,输入i次项的系数ai
第四步,v=vx+ai,i=i-1
第五步,若i>=0,则返回第三步,否则输出v算法分析:否程序框图开始输入n,an,x的值输入aii>=0?i=n-1v=anv=vx+aii=i-1输出v结束是 [问题1]我们常见的数字都是十进制的,但是并不是生活中的每一种数字都是十进制的.比如时间和角度的单位用六十进位制,电子计算机用的是二进制.那么什么是进位制?不同的进位制之间又有什么联系呢? 进位制是人们为了计数和运算的方便而约定的一种记数系统,约定满二进一,就是二进制;满十进一,就是十进制;满十六进一,就是十六进制;等等. “满几进一”,就是几进制,几进制的基数就是几. 可使用数字符号的个数称为基数.基数都是大于1的整数. 案例3 进位制 如二进制可使用的数字有0和1,基数是2;
十进制可使用的数字有0,1,2,…,8,9等十个数字,基数是10;
十六进制可使用的数字或符号有0~9等10个数字以及A~F等6个字母(规定字母A~F对应10~15),十六进制的基数是16. 注意:为了区分不同的进位制,常在数字的右下脚标明基数,. 如111001(2)表示二进制数,34(5)表示5进制数.十进制数一般不标注基数.[问题2]十进制数3721中的3表示3个千,7表示7个百,2表示2个十,1表示1个一,从而它可以写成下面的形式:3721=3×103+7×102+2×101+1×100. 想一想二进制数1011(2)可以类似的写成什么形式?1011(2)=1×23+0×22+1×21+1×20.同理:3421(5)=3×53+4×52+2×51+1×50.C7A16(16)=12×164+7×163+10×162
+1×161+6×160. 一般地,若k是一个大于1的整数,那么以k为基数的k进制数可以表示为一串数字连写在一起的形式anan-1…a1a0(k) (0(2)每一个数字an,an-1,…,a1,a0都须小于k. k进制的数也可以表示成不同位上数字与基数k的幂的乘积之和的形式,即anan-1…a1a0(k)=an×kn+an-1×kn-1
+…+a1×k1+a0×k0 .注意这是一个n+1位数. [问题3]二进制只用0和1两个数字,这正好与电路的通和断两种状态相对应,因此计算机内部都使用二进制.计算机在进行数的运算时,先把接受到的数转化成二进制数进行运算,再把运算结果转化为十进制数输出.
那么二进制数与十进制数之间是如何转化的呢?例3:把二进制数110011(2)化为十进制数. 分析:先把二进制数写成不同位上数字与2的幂的乘积之和的形式,再按照十进制数的运算规则计算出结果.解:110011(2)
=1×25+1×24+0×23+0×22+1×21+1×20
=1×32+1×16+1×2+1=51.
k进制数转化为十进制数的方法 先把k进制的数表示成不同位上数字与基数k的幂的乘积之和的形式,即anan-1…a1a0(k)
=an×kn+an-1×kn-1+…+a1×k1+a0×k0 .再按照十进制数的运算规则计算出结果.例4:把89化为二进制的数. 分析:把89化为二进制的数,需想办法将89先写成如下形式89=an×2n+an-1×2n-1+…+a1×21+a0×20 .89=44×2+1, 44=22×2+0, 22=11×2+0, 11=5×2+1, 5=2×2+1, 89=44×2+1,
=(22×2+0)×2+1
=((11×2+0)×2+0)×2+1
=(((5×2+1)×2+0)×2+0)×2+1
=((((2×2+1)×2+1)×2+0)× 2+0)×2+1
=(((((1×2)+0)×2+1)×2+1)×2+0)× 2+0)×2+1=1×26+0×25+1×24 +1×23+0×22+0×21+1×20=1011001(2).可以用2连续去除89或所得商(一直到商为0为止),然后取余数
---除2取余法.2=1×2+0, 1=0×2+1, 44 1例4:把89化为二进制的数.我们可以用下面的除法算式表示除2取余法:22 011 05 12 11 00 1把算式中各步所得的余数从下到上排列,得到89=1011001(2).这种方法也可以推广为把十进制数化为k进制数的算法,称为除k取余法.例5:把89化为五进制的数.解:以5作为除数,相应的除法算式为:17 43 20 3∴ 89=324(5).[问题5]你会把三进制数10221(3)化为二进制数吗?解:第一步:先把三进制数化为十进制数:
10221(3)=1×34+0×33+2×32+2×31+1×30
=81+18+6+1=106. 第二步:再把十进制数化为二进制数: 106=1101010(2).小结进位制的概念及表示方法;
各种进位制之间的相互转化.anan-1…a1a0(k)
=an×kn+an-1×kn-1+…+a1×k1+a0×k0 .课件32张PPT。第一章 算法初步
1.3 算法案例例:求下面两个正整数的最大公约数:(1)求25和35的最大公约数
(2)求49和63的最大公约数所以,25和35的最大公约数为5所以,49和63的最大公约数为7思考:除了用这种方法外还有没有其它方法?例:如何算出8251和6105的最大公约数?辗转相除法与更相减损术一、辗转相除法(欧几里得算法)1、定义:所谓辗转相除法,就是对于给定的两个数,用较大的数除以较小的数。若余数不为零,则将余数和较小的数构成新的一对数,继续上面的除法,直到大数被小数除尽,则这时较小的数就是原来两个数的最大公约数。 2、步骤(以求8251和6105的最大公约数的过程为例)
第一步 用两数中较大的数除以较小的数,求得商和余数8251=6105×1+2146结论: 8251和6105的公约数就是6105和2146的公约数,求8251和6105的最大公约数,
只要求出6105和2146的公约数就可以了。为什么呢?第二步 对6105和2146重复第一步的做法 6105=2146×2+1813 同理6105和2146的最大公约数也是2146和1813的最大公约数。 完整的过程8251=6105×1+2146 6105=2146×2+1813 2146=1813×1+3331813=333×5+148333=148×2+37148=37×4+0例: 用辗转相除法求225和135的最大公约数225=135×1+90135=90×1+4590=45×2显然37是148和37的最大公约数,也就是8251和6105的最大公约数 显然45是90和45的最大公约数,也就是225和135的最大公约数 思考:从上面的两个例子中可以看出计算的规律是什么? S1:用大数除以小数S2:除数变成被除数,余数变成除数S3:重复S1,直到余数为0 辗转相除法是一个反复执行直到余数等于0才停止的步骤,这实际上是一个循环结构。m = n × q + r用程序框图表示出右边的过程r=m MOD nm = nn = rr=0?是否思考:辗转相除法中的关键步骤是哪种逻辑结构? 程序框图:思考:你能把辗转相除法编成一个计算机程序吗?程序:INPUT “m,n=”;m,n
DO
r=m MOD n
m=n
n=r
LOOP UNTIL r=0
PRINT m
END1.定义:所谓更相减损术,就是对于给定的两个数,用较大的数减去较小的数,然后将差和较小的数构成新的一对数,再用较大的数减去较小的数,反复执行此步骤直到差数和较小的数相等,此时相等的两数便为原来两个数的最大公约数。二、更相减损术2、方法:例: 用更相减损术求98与63的最大公约数.解:由于63不是偶数,把98和63以大数减小数,并辗转相减 98-63=35 63-35=28 35-28=7 28-7=21
21-7=14
14-7=7所以,98和63的最大公约数等于7 INPUT m, n
IF m a=m
m=n
n=a
END IF
K=0
WHILE m MOD 2=0 AND n MOD 2=0
m=m/2
n=n/2
k=k+1
WEND
d=m-n
WHILE d<>n
IF d>n THEN
m=d ELSE
m=n
n=d
END IF
d=m-n
WEND
d=2 k*d
PRINT d
END思考:你能根据更相减损术设计程序,求两个正整数的最大公约数吗?(1)设计求多项式当x=5时的值的算法,并写出程序。
(2)有没有更高效的算法?能否探求更好的算法,来解决任意多项式的求解问题?三、秦九韶算法思考:从内到外,如果把每一个括号都看成一个常数,那么变形后的式子中有哪些“一次式”?x的系数依次是什么?(3)若将x的值代入变形后的式子中,那么求值的计算过程是怎样的? 将变形前x的系数乘以x的值,加上变形前的第2个系数,得到一个新的系数;将此系数继续乘以x的值,再加上变形前的第3个系数,又得到一个新的系数;继续对新系数做上面的变换,直到与变形前的最后一个系数相加,得到一个新的系数为止。这个系数即为所求多项式的值。这种算法即是“秦九韶算法” (4)用秦九韶算法求多项式的值,与多项式组成有直接关系吗?用秦九韶算法计算上述多项式的值,需要多少次乘法运算和多少次加法运算? 《数书九章》——秦九韶算法 对该多项式按下面的方式进行改写:思考:当知道了x的值后该如何求多项式的值?这是怎样的一种改写方式?最后的结果是什么?要求多项式的值,应该先算最内层的一次多项式的值,即然后,由内到外逐层计算一次多项式的值,即最后的一项是什么?这种将求一个n次多项式f(x)的值转化成求n个一次多项式的值的方法,称为秦九韶算法。思考:在求多项式的值上,这是怎样的一个转化?程序框图:这是一个在秦九韶算法中反复执行的步骤,因此可用循环结构来实现。输入ai秦九韶算法的特点: 通过一次式的反复计算,逐步得出高次多项式的值,对于一个n次多项式,只需做n次乘法和n次加法即可。程序:INPUT “n=”;n
INPUT “an=“;a
INPUT “x=“;x
v=a
i=n-1
WHILE i>=0
PRINT “i=“;i
INPUT “ai=“;a
v=v*x+a
i=i-1
WEND
PRINT v
END四、进位制1、什么是进位制?进位制是人们为了计数和运算方便而约定的记数系统。进位制是一种记数方式,用有限的数字在不同的位置表示不同的数值。可使用数字符号的个数称为基数,基数为n,即可称n进位制,简称n进制。 比如: 满二进一,就是二进制;
满十进一,就是十进制;
满十二进一,就是十二进制;
满六十进一,就是六十进制基数:“满几进一”就是几进制,几进制的基数就是几.2、最常见的进位制是什么?除此之外还有哪些常见的进位制?请举例说明.最常见的进位制应该是我们数学中的十进制,比如一般的数值计算,但是并不是生活中的每一种数字都是十进制的.
古人有半斤八两之说,就是十六进制与十进制的转换.
比如时间和角度的单位用六十进位制, 计算“一打”数值时是12进制的。
电子计算机用的是二进制 。 式中1处在百位,第一个3所在十位,第二个3所在个位,5和9分别处在十分位和百分位。十进制数是逢十进一的。 我们最常用最熟悉的就是十进制数,它的数值部分是十个不同的数字符号0,1,2,3,4,5,6,7,8,9来表示的。十进制:例如133.59,它可用一个多项式来表示:133.59=1*102+3*101+3*100 +5*10-1+9*10-2 实际上,十进制数只是计数法中的一种,但它不是
唯一记数法。除了十进制数,生产生活中还会遇到非十
进制的记数制。如时间:60秒为1分,60分为1小时,它
是六十进制的。两根筷子一双,两只手套为一副,它们
是二进制的。其它进制:二进制、七进制、八进制、十二进制、六十进制……二进制只有0和1两个数字,七进制用0~6七个数字十六进制有0~9十个数字及ABCDEF六个字母. 为了区分不同的进位制,常在数的右下角标明基数,十进制一般不标注基数.例如十进制的133.59,写成133.59(10)七进制的13,写成13(7);二进制的10,写成10(2) 十进制的构成十进制由两个部分构成例如:3721其它进位制的数又是如何的呢?(用10个数字来记数,称基数为10)其它进制数化成十进制数公式二进制二进制是用0、1两个数字来描述的.如11001二进制的表示方法区分的写法:11001(2)或者(11001)2八进制呢?如7342(8)k进制呢?anan-1an-2…a1(k)?二进制与十进制的转换1、二进制数转化为十进制数例1:将二进制数110011(2)化成十进制数。解:根据进位制的定义可知所以,110011(2)=51.例2、设计一个算法,将k进制数a(共有n位)转换为十进制数b。(1)算法步骤:第一步,输入a,k和n的值;第二步,将b的值初始化为0,i的值初始化为1;第三步,b=b+ai*ki-1, i=i+1第四步,判断i>n是否成立.若是,则执行第五步,否则,返回第三步;第五步,输出b的值.(2)程序框图:(3)程序:INPUT “a,k,n=”;a,k,n
b=0
i=1
t=a MOD 10
DO
b=b+t*k^(i-1)
a=a10
t=a MOD 10
i=i+1
LOOP UNTIL i>n
PRINT b
END**上面的程序如采用get函数,可简化为:备注:GET函数用于取出a的右数第i位数方法:除2取余法,即用2连续去除89或所得的商,然后取余数。例、 把89化为二进制数解:根据“逢二进一”的原则,有89=2×44+1= 2× (2×22+0)+1= 2×( 2×( 2×11+0)+0)+1= 2× (2× (2× (2× 5+1)+0)+0)+15= 2× 2+1=2×(2×(2×(2×(22+1)+1)+0)+0)+189=1×26+0×25+1×24+1×23+0×22+0×21+1×20所以:89=1011001(2)=2×(2×(2×(23+2+1)+0)+0)+1=2×(2×(24+22+2+0)+0)+1=2×(25+23+22+0+0)+1=26+24+23+0+0+2089=2×44+144= 2×22+022= 2×11+011= 2× 5+1= 2× (2× (2× (2× (2× 2+1)+1)+0)+0)+1所以89=2×(2×(2×(2×(2 × 2 +1)+1)+0)+0)+12、十进制转换为二进制注意:
1.最后一步商为0,
2.将上式各步所得的余数从下到上排列,得到:
89=1011001(2)另解(除2取余法的另一直观写法):522212010余数11224489222201101把89化为五进制数。3、十进制转换为其它进制解:根据除k取余法以5作为除数,相应的除法算式为:所以,89=324(5)