之前有一个很流行的段子:
英文:“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] = '