内容正文:
1.3 算法案例(2)
人民教育出版社·高中数学必修3《算法初步》
1.3.3 K进制化十进制
半斤=八两
我们常见的数字都是十进制的,比如一般的数值计算,但是并不是生活中的每一种数字都是十进制的.
古人有半斤八两之说,就是十六进制与十进制的转换.
比如时间和角度的单位用六十进位制, 计算“一打”数值时是十二进制的。
电子计算机用的是二进制
*
进位制的概念
进位制是为了计数和运算方便而约定的记数系统.
约定满二进一,就是二进制;
满十进一,就是十进制;
七天为一周,就是七进制;
十二个月为一年,就是十二进制;
六十秒为一分钟,六十分钟为一个小时,就是六十进制;等等.
一般地,“满几进一”就是几进制.
*
如二进制可使用的数字有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<an<k,0≤an-1,…,a1,a0<k)
意思是:(1)第一个数字an不能等于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两个数字,这正好与电路的通和断两种状态相对应,因此计算机内部都使用二进制.计算机在进行数的运算时,先把接受到的数转化成二进制数进行运算,再把运算结果转化为十进制数输出.
那么二进制数与十进制数之间是如何转化的呢?
例1:把二进制数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 .
再按照十进制数的运算规则计算出结果.
课堂练习:
例:10231(4)=________(10)
235(7)=________(10)
301
124
例2:设计一个算法,把2进制数a(共有n位)化为十进制数b,并转化成程序框图,写出程序.
第二步,令b=0,i=1.
第四步,判断i>n 是否成立.若是,则执行第五步;否则,返回第三步.
第一步,输入a,2和n的值.
第三步,b=b+ai2i-1,i=i+1.
第五步,输出b的值.
*
练习:设计一个算法,把k进制数a(共有n位)化为十进制数b.
第二步,令b=0,i=1.
第四步,判断i>n 是否成立.若是,则执行第五步;否则,返回第三步.
第一步,输入a,k和n的值.
第三步,b=b+aiki-1,i=i+1.
第五步,输出b的值.
*
程序框图
开始
输入a,k,n
b=0
i=1
把a的右数第i位数字赋给t
b=b+t·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=a\10
t=a MOD 10
i=i+1
LOOP UNTIL i>n
PRINT