之前有一个很流行的段子:
英文:“If you do not leave with me , we will die together.”
翻译:
四级水平:如果不滚开,我就和你同归于尽;
六级水平:你若不离不弃,我必生死相依;
八级水平:问世间情为何物,直教人生死相许;
专家水平:天地合,乃敢与君绝;
活佛水平:你见或者不见,爱就在那里,不增不减。
同理
对于问题:“用C语言实现将一个十进制整数转换为二进制数。”
解答:
C语言四级水平:
1 #include2 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("\n");23 return 0;24 }
解释说明:将十进制数转换为二进制的最基本的原理是除二取余倒排列。应用一个数组先顺序的将整型数除以二的余数存起来,然后倒序输出。
C语言六级水平:
#includeint 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所指向的值始终为0p--;i--;} printf("\n",*p);return 0;}
解释:这里学习了指针之后,可以应用指针来对数组进行操作,仅对本问题而言就是多了一种解决问题的方法,就像从四级到六级扩大了词汇量一样。
C语言八级水平:
1 #include2 void Decimal_to_binary(int N); 3 void main() 4 { 5 int N; 6 scanf("%d",&N); 7 Decimal_to_binary(N); 8 printf("\n"); 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 #include2 void Decimal_to_binary(int N); 3 void main() 4 { 5 int N; 6 scanf("%d",&N); 7 Decimal_to_binary(N); 8 printf("\n"); 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 #include2 #include 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] = '\0'; //C语言中字符输出的结尾是'\0'16 printf("%s\n",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语言重剑无锋,路漫漫求修远兮!
声明:本文为原创,转载请声明。