五种境界之 二进制转换为十进制(C语言版)

之前有一个很流行的段子:

英文:“If you do not leave with me , we will die together.”

翻译:

四级水平:如果不滚开,我就和你同归于尽;

六级水平:你若不离不弃,我必生死相依;

八级水平:问世间情为何物,直教人生死相许;

专家水平:天地合,乃敢与君绝;

活佛水平:你见或者不见,爱就在那里,不增不减。

同理

对于问题:“用C语言实现将一个十进制整数转换为二进制数。

解答:

C语言四级水平:

 1 #include<stdio.h>
 2 enum BOOL 
 3 {
 4     FALSE = 0,
 5     TRUE = !FALSE
 6 }typedef bool; //这里应用枚举类型重新定义bool类型的原因是应用gcc编译不支持bool类型
 7 int main(void)
 8 {
 9     int i=0,j,N;
10     bool Num[32];//C语言中整形数4个字节32位
11     scanf("%d",&N);
12     while(1)
13     {
14     Num[i]=N%2;
15     N=N/2;
16     if(N==0)
17     break;
18     i++;
19     }
20     for(j=i;j>=0;j--)
21         printf("%d",Num[j]);
22         printf("
");
23 return 0;
24 }

解释说明:将十进制数转换为二进制的最基本的原理是除二取余倒排列。应用一个数组先顺序的将整型数除以二的余数存起来,然后倒序输出。

C语言六级水平:

#include<stdio.h>
int main()
{
    int Num[32]={0};
    int *p=Num;
    /*
    这里可以分部的写成:
    int *p;
    p=Num;(实际上就是:p=&Num[0];)
    */
    int i=0,n;
    scanf("%d",&n);
while(n>0)
{
     *p=n%2;
     i++;   
     n=n/2;
     p++;
}
while(i>0)
{
printf("%d",*(p-1));//由于在上面的一个while循环中p已经加了1,即完成上面的一个循环后p所指向的值始终为0
p--;
i--;
}
    printf("
",*p);
return 0;
}

解释:这里学习了指针之后,可以应用指针来对数组进行操作,仅对本问题而言就是多了一种解决问题的方法,就像从四级到六级扩大了词汇量一样。

C语言八级水平:

 1 #include<stdio.h>
 2 void Decimal_to_binary(int N);
 3 void main()
 4 {
 5   int N;
 6   scanf("%d",&N);
 7   Decimal_to_binary(N);
 8   printf("
");
 9 }
10 void Decimal_to_binary(int N)
11 {
12      if(N)  //if语句只要条件为真即去执行
13      {
14        Decimal_to_binary(N/2); //在函数自身中调用自身,即递归的思想
15        printf("%d",N%2);
16      }
17 } 

解释:应用递归的思想,反复的去去除二取余,在Decimal_to_binary(int N)函数的if语句中第一次调用printf函数是在经过若干次除以二商为零时。

C语言专家水平:

 1 #include<stdio.h>  
 2 void Decimal_to_binary(int N);
 3 void main()
 4  {
 5    int N;
 6    scanf("%d",&N);
 7    Decimal_to_binary(N);
 8    printf("
");
 9  } 
10 void Decimal_to_binary(int N)  
11 {  
12   int i,t;   
13   t=1<<31;  
14   for(i=1;i<=32;i++)  
15   {  
16     putchar(N&t?'1':'0');  
17     N=N<<1;  
18     if(i%8==0)  
19     printf("  "); 
20   }  
21 }  

解释:该方法的最大特点是引用的C语言的中的位操作,即左移动运算。基本的思想是将1左移动31位,然后循环的对函数Decimal_to_binary(int N)传入的参数进行移位取出每一位与1相与,输出的为结果为0则输出0,结果为1则输出1.

C语言活佛水平:

 1 #include<stdio.h>
 2 #include <stdlib.h>
 3 
 4 void Decimal_to_binary(int number)
 5 {
 6      int i=0; 
 7      char *P;
 8      P = (char*)malloc(33); //应用动态内存分配
 9      for(i;i<32;i++)
10      {
11          P[i] = number & (1<<(31-i));
12          P[i] = P[i] >> (31-i);
13          P[i] = (P[i] == 0) ? '0' : '1';
14      }
15      P[i] = ''; //C语言中字符输出的结尾是''
16      printf("%s
",P);
17      free(P);//释放内存
18 }
19 void main()
20 {
21    int n;
22    scanf("%d",&n);
23    Decimal_to_binary(n);
24 }

解释:应用动态内存分配的思想,分配33字节的存储空间,然后应用移位的方法,进行按位操作,最后释放所分配的存储空间。这样做可以最大限度的节省存储空间。

Sum:C语言重剑无锋,路漫漫求修远兮!

声明:本文为原创,转载请声明。

原文地址:https://www.cnblogs.com/ShanShi012/p/5313456.html