【程序练习】——十进制的转换

十进制转换八进制,二进制,十六进制:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 
  5 #define MAX 20
  6 
  7 int bin_val[MAX];            //存放十进制转换成二进制的结果
  8 
  9 int  get_int()
 10 {
 11     int in;
 12     while(scanf("%d",&in) == -1){
 13         printf("please input a num\n");
 14         while(getchar() != '\n') ;
 15     }
 16 
 17     while(getchar() != '\n') ;
 18     return in;
 19 }
 20 
 21 int menue()
 22 {
 23     int item;
 24     printf("**********************************\n");
 25     printf("1.decimal converted into a binary;\n");
 26     printf("2.decimal converted to a hexadecimal;\n");
 27     printf("3.decimal converted into octal;\n");
 28     printf("4.exit the system;\n");
 29     printf("**********************************\n");
 30 
 31     printf("please input a number you want to do\n");
 32 
 33     while(item = get_int(),item < 1 || item >  4){        //逗号表达式
 34         printf("please input [1-4]\n");
 35     }
 36     return item;
 37 }
 38 
 39 int com_conver_binary()            //转换成二进制的通用函数,为了十进制转换成十六进制做准备
 40 {
 41     int value;                    //需要转换的值
 42     
 43     int mod;                    //余数
 44     int i = 0;                        //记录二进制的位数
 45     printf("please input a num you want to conver :\n");
 46     value = get_int();
 47 
 48     while((mod = value % 2), (value /= 2) != 0){        //十进制转换二进制
 49         bin_val[i++] = mod;
 50     }
 51     bin_val[i++] = mod;        //当value等于零的时候循环已经终止,但是余数还未加到结果中,so......
 52     
 53     return i;
 54 }
 55 
 56 /*****转换八进制和二进制的函数可以通用的,*****/
 57 void conver_octal()                //转换成八进制            
 58 {
 59     int value;                    //需要转换的值
 60     
 61     int mod;                    //余数
 62     int i = 0;                        //记录八进制的位数
 63     printf("please input a num you want to conver :\n");
 64     value = get_int();
 65 
 66     while((mod = value % 8), (value /= 8) != 0){        //十进制转换八进制
 67         bin_val[i++] = mod;
 68     }
 69     bin_val[i++] = mod;        //当value等于零的时候循环已经终止,但是余数还未加到结果中,so......    
 70 
 71     while(i--)
 72         printf("%d",bin_val[i]);
 73 
 74     puts("\n");
 75 }
 76 
 77 void conver_binary()            //转换成二进制
 78 {
 79     int i;
 80     i = com_conver_binary();
 81 
 82     while(i--)
 83         printf("%d",bin_val[i]);
 84 
 85     puts("\n");
 86 }
 87 
 88 char hex_ch(int value)
 89 {
 90     char ch;
 91     switch(value){
 92     case 0:
 93     case 1:
 94     case 2:
 95     case 3:
 96     case 4:
 97     case 5:
 98     case 6:
 99     case 7:
100     case 8:
101     case 9: ch = value + '0'; break;
102     case 10: ch = 'A'; break;
103     case 11: ch = 'B'; break;
104     case 12: ch = 'C'; break;
105     case 13: ch = 'D'; break;
106     case 14: ch = 'E'; break;
107     case 15: ch = 'F'; break;
108     }
109     return ch;
110 }
111 
112 void conver_hex()            //转换成十六进制
113 {
114     char hex_val[MAX];        //由于十六进制中有字母,所以要用char型
115     int bin_bit;        //十进制转换成二进制的位数
116     int hex_bit = 0;        //十六进制的结果位数
117     int i;
118 
119     int sum = 0;        //四位的二进制的十进制和
120     bin_bit = com_conver_binary();                //十进制先转换成二进制
121 
122     for(i = 0; i < bin_bit; i++){                //二进制转换成十六进制
123         switch(i % 4){
124         case 0: sum += (bin_val[i] * 1); break;
125         case 1: sum += (bin_val[i] * 2); break;
126         case 2: sum += (bin_val[i] * 4); break;
127         case 3: sum += (bin_val[i] * 8); break;
128         }
129         if(i % 4 == 3){
130             hex_val[hex_bit++] = hex_ch(sum);
131             sum = 0;
132         }
133     }
134     if(bin_bit % 4 != 0)
135         hex_val[hex_bit++] = hex_ch(sum);                //一定不能忘记,如果二进制的位数不是四的倍数,就需要此部分
136 
137     while(hex_bit--)
138         printf("%c",hex_val[hex_bit]);
139 
140     puts("\n");
141 }
142 
143 int main()
144 {
145     while(1){
146         switch(menue()){
147         case 1:conver_binary(); break;
148         case 2:conver_hex(); break;
149         case 3:conver_octal(); break;
150         case 4:exit(0); break;
151         }
152     }
153 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值