700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言(递归)实现十进制整数转二进制数

C语言(递归)实现十进制整数转二进制数

时间:2019-05-18 03:02:07

相关推荐

C语言(递归)实现十进制整数转二进制数

目录

一、要求

二、分析与设计

2.1分析

2.2设计

三、代码实现

一、要求

题目非常简洁明了,将十进制的整数,转化为二进制数。是在看《C Primer Plus》时看到递归时给出的一个案例,可以很好的理解递归,分享给大家。

二、分析与设计

十进制转二进制属于计算机基础,在工作中可能会用得很少,但是基础还是需要夯实。现在我们就来复习一下。

2.1分析

十进制整数转化为二进制的标准步骤:整数部分除以2,反向取余数,直到商为0终止。(需要注意的是小数部分是不一样的,初学者可能会混淆),讲的具体一点就是将某个十进制数除2得到的整数部分保留,作为第二次除2时的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为0就结束,将所有得到的余数最终逆序输出,则为该十进制对应的二进制数。

有的同学可能会问,为什么在算二进制的过程中,得到的余数需要倒序输出呢。这里有两种不同的解释,可以自行理解。一种是,在二进制中,奇数的末尾一定是1,偶数的末尾一定是0,所以比如我们的整数是5,5%2得到1,说明它是奇数,所以我们第一次计算的结果就可以得到5的二进制数最后一位是1,推广的一般情况,对于一个整数n,它的二进制最后一位就是n%2。因此计算的第一位数字实际上是输出二进制的最后一位。还有一种说法是,我们知道我们计算出的二进制换算出十进制是将每一位的数乘以它的权,然后相加得到的,从第一位权值0开始,那么如果我们的十进制数比较大,那么从二进制数来看,它是不是就比较长呢,而且是一直向左边延伸,权值一直增大,而从十进制除2取余的计算来看,是不是就是一直往下延伸呢,然后我们倒序输出,新鲜出炉的比较靠下的计算出来的余数是不是就到了二进制的左边!两种理解方式都可以较好地让你理解倒序输出的原因。

2.2设计

按照我们分析的步骤,我们应该先对整数%2得到余数,然后/2得到商,再对商%2取余数,再/2,一直到什么时候呢?一直到商<2结束,倒数第二个是2余0,奇数余1。

现在是时候来编写代码了,我们使用C语言,因为是倒序输出,使用递归就非常方便了。我们在调用递归的时候,就使用一个输出语句,这样子调用完,返回主调函数的过程中,就实现了倒序输出。

三、代码实现

#include<stdio.h>void to_binary(unsigned long n);//函数声明int main(void){unsigned long number;printf("enter an integer (q to quit):\n");while(scanf("%lu",&number)==1){printf("binary equivalent: ");to_binary(number); putchar('\n');printf("enter an integer (q to quit):\n");}printf("done.\n");return 0;}void to_binary(unsigned long n){int r;r=n%2;if(n>=2)to_binary(n/2);putchar(r==0? '0':'1');return;}

运行截图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。