济南大学学报自然科学版
主办单位:山东省教育厅
国际刊号:1671-3559
国内刊号:37-1378/N
学术数据库优秀期刊 《中文科技期刊数据库》来源期刊
       首 页   |   期刊介绍   |   新闻公告   |   征稿要求   |   期刊订阅   |   留言板   |   联系我们   
  本站业务
  在线期刊
      最新录用
      期刊简明目录
      本刊论文精选
      过刊浏览
      论文下载排行
      论文点击排行
      
 

访问统计

访问总数:20796 人次
 
    本刊论文
基于归类教学的进制转换算法研究

  摘 要: 程序设计是一门逻辑性很强的课程,教会学生编程关键是教会学生编程的思想,以及分析、解决问题的方法。很多程序的编程思想都有类似之处。文章利用归纳法的思想,把进制转换归纳成具有共性的问题进行归类,设计了把2、8、16进制统一转换为10进制的算法;同样设计了把10进制转换为2、8、16进制的统一算法。把这种归纳法的思想应用于教学,取得了良好的教学效果。


  关键词: 程序设计; 归类; 进制转换


  中图分类号:TP3-05 文献标志码:A 文章编号:1006-8228(2012)05-45-02


  Digital conversion algorithm research based on classified teaching


  Luo Guoming, Zhong Qingjiang


  (Zhejiang University, Information Management Department of City College, Hangzhou, Zhejiang 310015, China)


  Abstract: "Programming" is a strong logical course. how to teach students programming? The key is to teach students programming ideas, how to analyze problems and solve the problem. A lot of programming methods are similar. Using inductive method, with common problems grouped into a classified, the algorithm of transfering binary, octal, hexadecimal into decimal, decimal into a unified binary, octal, hexadecimal is developed, This same idea can be easily extended to other similar programming, and the idea of this inductive method used in teaching, has been a good teaching results obtained.


  Key words: programming; classified; digital conversion


  0 引言


  程序设计是一门非计算机专业的公共基础课。随着对程序设计教学手段和教学方法研究和探讨的不断深入,我们的教学方法也在不断地推进,并从平时的教学实践中总结出很多适应现代大学生的教学方法和手段。程序设计课程除了要教会学生如何思考问题、分析问题、解决问题,还必须教会学生一些程序设计的关键算法,教会学生能从问题中分析并提取关键因素,然后把具有共同特性的一类问题归结为一个算法。本文以进制转换的算法为例,从教学的角度探讨了进制转换算法的归类实现思想[1]。由于篇幅关系,我们只讨论整数部分的进制转换。


  1 把2、8、16进制转化为10进制的统一算法


  我们用进位计数制来说明2、8、16进制转化为10进制的方法。


  进位计数制是人们利用符号来计数的一种方法。进位计数制使用了一组数码符号、基数和位权[2]。


  ⑴ 数码:用不同的数字符号来表示一种数制的数值,这些数字符号称为“数码”。


  ⑵ 基数:进位计数制的每位数上可能有的数码个数称为“基数”。


  ⑶ 位权:在一个数中,同一个数码处于不同位置则表示不同的值,把基数的某次幂称为“位权”。


  按照数码、基数和位权,如果把(11111)2转化为十进制,可以写成以下公式:


  (11111)2=1*24+1*23+1*22+1*21+1*20=(15)10


  从该公式不难归纳得到以下的2进制转化为10进制的公式:


  (B)2=Bn*2n-1+Bn-1*2n-2+···+B2*21+B1*20


  从该式同样可得到以下8、16进制转换为10进制的公式:


  (O)8=On*8n-1+On-1*8n-2+···+O2*81+O1*80


  (H)16=Hn*16n-1+Hn-1*16n-2+···+H2*161+H1*160


  同样,从以上公式我们容易归纳出二、八、十六制转化为十进制的统一的表示方法:


  (K)R=Kn*Rn-1+Kn-1*Rn-2+···+K2*R1+K1*R0


  也可以写成以下的形式:


  其中R表示进制基数,K表示数码,Ri-1中的i-1表示位权。例如:(12345)10=1*104+2*103+3*102+4*101+5*100


  为了把算法写成有规律的循环,可把上式写成以下的形式,例如:利用上面通项公式把12345的10进制数转换为8进制数,可以用以下公式表示:


  n=(12345)10=((((y+1)*8+2)*8+3)*8+4)*8+5=(30071)8


  可以把上式归纳写成程序的循环的形式如下:


  result=0;


  for(i=0;num[i]!='\0';i++)


  result=result*base+num[i]-'0';


  其中base表示8进制,如果把base用2、8、16中任何一个数表示,那么利用上式的程序,只要num[i]是10以内的数,就都可以把2、8、16进制转化为10进制数了。


  因为16进制数有非数字的字符A-F或a-f,将程序算法稍作变化就可以处理16进制:把num[i]-'0'用num[i]-'A'-'7'代替大写字母,或者num[i]-'a'-87代替小写字母,这样处理的目的是算出16进制中10~15的值。


  为了把大小写字符统一计算,如果遇到小写字符先把小写字符转化为大写字符,即if(num[i]>='a'&&num[i]<='f') num[i]=num[i]-32;那么大小写字母就可统一处理了。


  根据以上的编程思想,二、八、十六进制数转化为十进制数的函数代码如下:


  int Convert_2_8_16to10(int base,char num[])


  //把2、8、16进制转换为10进制


  { //其中base为2、8、16基数,num[]为存放2、8、16进制数的数码


  int i, decimal=0;


  for(i=0;num[i]!='\0';i++) { //如果num[i]!='\0'转换处理结束


  if(num[i]<='9') //判别是否0~9之间的数字


  decimal=decimal*base+num[i]-'0'; //0~9之间的数码处理公式


  else {


  if(num[i]>='a'&&num[i]<='f') //判别是否a~f之间的小写字母


  num[i]=num[i]-32; //把小写字符转换成大写字符


  decimal=decimal*base+num[i]-'7'; //A~F之间的数码处理公式


  }


  }


  return decimal;


特别说明:本站仅协助已授权的杂志社进行在线杂志订阅,非《济南大学学报自然科学版》杂志官网,直投的朋友请联系杂志社。
版权所有 © 2009-2024《济南大学学报自然科学版》编辑部  (权威发表网)   苏ICP备20026650号-8