《C语言实例解析精粹》中编译环境采用的是Turbo C 2.0。但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记。
实例18:将一个无符号整数转换为任意d进制(d在2~16之间)。
主要思路:对无符号整数n求d的余数,就能得到n的d进制的最低位数字,重复上述步骤,直至n为0。依此得到n的d进制表示的最低位至最高位数字,由数字转换成字符,得到结果。
1 /*函数trans将无符号整数n转换成d进制(2<=d<=16)
2 表示的字符串s*/
3 #define M sizeof(unsigned int)*8 //将无符号数转换为字符串,每个字符8位
4 int trans(unsigned n,int d,char s[])
5 {
6 static char digits[] = "012345678ABCDEF";
7 char buf[M+1];
8 int j,i = M;
9
10 if(d<2 || d>16)
11 {
12 s[0] = ''; //字符串的截至位
13 return 0;
14 }
15
16 buf[i] = '';
17 do
18 {
19 buf[--i] = digits[n%d];
20 n /= d;
21 }while(n);
22 /*将工作数组中的字符串复制到s*/
23 for(j=0; (s[j]=buf[i]) != ''; j++,i++);
24 return j;
25 }
26
27 int main()
28 {
29 unsigned int num = 0;
30 int scale[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1}; //进制2~16
31 char str[33];
32 int i;
33 clrscr(); //清屏函数只在Turbo中使用 采用的方案是将其改为system("cls")
34 //但实际测试中此程序是否由这句对结果并没有什么影响。
35 puts("Please input a number to translate:");
36 scanf("%d",&num);
37 printf("The number you input is %d.nThe translation result are:n",num);
38 //此循环用来测试,显示同一个无符号整数转换成不同进制的结果。
39 for(i=0; i40 {
41 if(trans(num,scale[i],str))
42 printf("%5d = %s(%d)n",num,str,scale[i]);
43 else
44 printf("%5d => (%d) Error!n",scale[i]);
45 }
46 printf("nPress any key to quit...n");
47 return 0;
48 }
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!