- 2021-06-11 发布 |
- 37.5 KB |
- 5页
申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
文档介绍
人教A版数学必修三1-3算法案例(进位制)
第 3 课时 案例 3 进位制 (一)导入新课 情境导入 在日常生活中,我们最熟悉、最常用的是十进制,据说这与古人曾以手指计数有关,爱 好天文学的古人也曾经采用七进制、十二进制、六十进制,至今我们仍然使用一周七天、一 年十二个月、一小时六十分的历法.今天我们来学习一下进位制. (二)推进新课、新知探究、提出问题 (1)你都了解哪些进位制? (2)举出常见的进位制. (3)思考非十进制数转换为十进制数的转化方法. (4)思考十进制数转换成非十进制数及非十进制之间的转换方法. 活动:先让学生思考或讨论后再回答,经教师提示、点拨,对回答正确的学生及时表扬, 对回答不准确的学生提示引导考虑问题的思路. 讨论结果: (1)进位制是人们为了计数和运算方便而约定的计数系统,约定满二进一,就是二进制; 满十进一,就是十进制;满十二进一,就是十二进制;满六十进一,就是六十进制等等.也 就是说:“满几进一”就是几进制,几进制的基数(都是大于 1 的整数)就是几. (2)在日常生活中,我们最熟悉、最常用的是十进制,据说这与古人曾以手指计数有关, 爱好天文学的古人也曾经采用七进制、十二进制、六十进制,至今我们仍然使用一周七天、 一年十二个月、一小时六十分的历法. (3)十进制使用 0~9 十个数字.计数时,几个数字排成一行,从右起,第一位是个位,个位 上的数字是几,就表示几个一;第二位是十位,十位上的数字是几,就表示几个十;接着依 次是百位、千位、万位…… 例如:十进制数 3 721 中的 3 表示 3 个千,7 表示 7 个百,2 表示 2 个十,1 表示 1 个一.于 是,我们得到下面的式子: 3 721=3×103+7×102+2×101+1×100. 与十进制类似,其他的进位制也可以按照位置原则计数.由于每一种进位制的基数不同,所 用的数字个数也不同.如二进制用 0 和 1 两个数字,七进制用 0~6 七个数字. 一般地,若 k 是一个大于 1 的整数,那么以 k 为基数的 k 进制数可以表示为一串数字连写在 一起的形式 anan-1…a1a0(k)(0<an<k,0≤an-1,…,a1,a0<k). 其他进位制的数也可以表示成不同位上数字与基数的幂的乘积之和的形式,如 110 011(2)=1×25+1×24+0×23+0×22+1×21+1×20, 7 342(8)=7×83+3×82+4×81+2×80. 非十进制数转换为十进制数比较简单,只要计算下面的式子值即可: anan-1…a1a0(k)=an×kn+an-1×kn-1+…+a1×k+a0. 第一步:从左到右依次取出 k 进制数 anan-1…a1a0(k)各位上的数字,乘以相应的 k 的幂,k 的 幂从 n 开始取值,每次递减 1,递减到 0,即 an×kn,an-1×kn-1,…,a1×k,a0×k0; 第二步:把所得到的乘积加起来,所得的结果就是相应的十进制数. (4)关于进位制的转换,教科书上以十进制和二进制之间的转换为例讲解,并推广到十进 制和其他进制之间的转换.这样做的原因是,计算机是以二进制的形式进行存储和计算数据 的,而一般我们传输给计算机的数据是十进制数据,因此计算机必须先将十进制数转换为二 进制数,再处理,显然运算后首次得到的结果为二进制数,同时计算机又把运算结果由二进 制数转换成十进制数输出. 1°十进制数转换成非十进制数 把十进制数转换为二进制数,教科书上提供了“除 2 取余法”,我们可以类比得到十进制数转 换成 k 进制数的算法“除 k 取余法”. 2°非十进制之间的转换 一个自然的想法是利用十进制作为桥梁.教科书上提供了一个二进制数据与16 进制数据之间 的互化的方法,也就是先由二进制数转化为十进制数,再由十进制数转化成为 16 进制数. (三)应用示例 思路 1 例 1 把二进制数 110 011(2)化为十进制数. 解:110 011(2)=1×25+1×24+0×23+0×22+1×21+1×20=1×32+1×16+1×2+1=51. 点评:先把二进制数写成不同位上数字与 2 的幂的乘积之和的形式,再按照十进制的运 算规则计算出结果. 变式训练 设计一个算法,把 k 进制数 a(共有 n 位)化为十进制数 b. 算法分析:从例 1 的计算过程可以看出,计算 k 进制数 a 的右数第 i 位数字 ai 与 ki-1 的 乘积 ai·ki-1,再将其累加,这是一个重复操作的步骤.所以,可以用循环结构来构造算法. 算法步骤如下: 第一步,输入 a,k 和 n 的值. 第二步,将 b 的值初始化为 0,i 的值初始化为 1. 第三步,b=b+ai·ki-1,i=i+1. 第四步,判断 i>n 是否成立.若是,则执行第五步;否则,返回第三步. 第五步,输出 b 的值. 程序框图如下图: 程序: 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 例 2 把 89 化为二进制数. 解:根据二进制数“满二进一”的原则,可以用 2 连续去除 89 或所得商,然后取余数.具 体计算方法如下: 因为 89=2×44+1,44=2×22+0, 22=2×11+0, 11=2×5+1, 5=2×2+1, 2=2×1+0, 1=2×0+1, 所以 89=2×(2×(2×(2×(2×2+1)+1)+0)+0)+1 =2×(2×(2×(2×(22+1)+1)+0)+0)+1 =…=1×26+0×25+1×24+1×23+0×22+0×21+1×20 =1 011 001(2). 这种算法叫做除 2 取余法,还可以用下面的除法算式表示: 把上式中各步所得的余数从下到上排列,得到 89=1 011 001(2). 上述方法也可以推广为把十进制数化为 k 进制数的算法,称为除 k 取余法. 变式训练 设计一个程序,实现“除 k 取余法”. 算法分析:从例 2 的计算过程可以看出如下的规律: 若十制数 a 除以 k 所得商是 q0,余数是 r0,即 a=k·q0+r0,则 r0 是 a 的 k 进制数的右数 第 1 位数. 若 q0 除以 k 所得的商是 q1,余数是 r1,即 q0=k·q1+r1,则 r1 是 a 的 k 进制数的左数第 2 位数. …… 若 qn-1 除以 k 所得的商是 0,余数是 rn,即 qn-1=rn,则 rn 是 a 的 k 进制数的左数第 1 位 数. 这样,我们可以得到算法步骤如下: 第一步,给定十进制正整数 a 和转化后的数的基数 k. 第二步,求出 a 除以 k 所得的商 q,余数 r. 第三步,把得到的余数依次从右到左排列. 第四步,若 q≠0,则 a=q,返回第二步;否则,输出全部余数 r 排列得到的 k 进制数. 程序框图如下图: 程序: INPUT “a,k=”;a,k b=0 i=0 DO q=ak r=a MOD k b=b+r*10^i i=i+1 a=q LOOP UNTIL q=0 PRINT b END 思路 2 例 1 将 8 进制数 314 706(8)化为十进制数,并编写出一个实现算法的程序. 解:314 706(8)=3×85+1×84+4×83+7×82+0×81+6×80=104 902. 所以,化为十进制数是 104 902. 点评:利用把 k 进制数转化为十进制数的一般方法就可以把 8 进制数 314 706(8)化为十 进制数. 例 2 把十进制数 89 化为三进制数,并写出程序语句. 解:具体的计算方法如下: 89=3×29+2, 29=3×9+2, 9=3×3+0, 3=3×1+0, 1=3×0+1, 所以:89(10)=10 022(3). 点评:根据三进制数满三进一的原则,可以用 3 连续去除 89 及其所得的商,然后按倒 序的顺序取出余数组成数据即可. (四)知能训练 将十进制数 34 转化为二进制数. 分析:把一个十进制数转换成二进制数,用 2 反复去除这个十进制数,直到商为 0,所 得余数(从下往上读)就是所求. 解: 即 34(10)=100 010(2) (五)拓展提升 把 1 234(5)分别转化为十进制数和八进制数. 解:1 234(5)=1×53+2×52+3×5+4=194. 则 1 234(5)=302(8) 所以,1 234(5)=194=302(8) 点评:本题主要考查进位制以及不同进位制数的互化.五进制数直接利用公式就可以转 化为十进制数;五进制数和八进制数之间需要借助于十进制数来转化. (六)课堂小结 (1)理解算法与进位制的关系. (2)熟练掌握各种进位制之间转化. (七)作业 习题 1.3A 组 3、4.查看更多