A. c语言 进制转换
最难理解的应该是ttor()这个函数。也不知道怎么讲,就拿6转换成二进制来举例子吧。
ttor(6,2){
ttor(3,2){
ttor(1,2){
ttor(0,2){
printf("%c",(0%2)+'0');
}
printf("%c",(1%2)+'0');
}
printf("%c",(3%2)+'0');
}
printf("%c",(6%2)+'0');
}
这样看,程序从最里层输出,完全符合十进制转换成二进制的方法。
” n % r > 9 ? n % r - 10 + 'A' : n % r + '0' “这句话中,三目运算符的优先级最低,更直观的看可以写成 (n % r > 9) ?( n % r - 10 + 'A') :( n % r + '0') ,其中用数字加'A'和‘0’,就会的到相应的字符,比如(2+‘0’)就是字符'2',2+'A'就是字符'C'这是根据ASCII编码换算的,而整个表达式的意思,就是如果余数小于9就用数字字符表示,如果余数大于9就用字母字符表示,这符合16进制的写法。
B. C语言用基础的方法将一个数转变为任一进制的数。
#include<stdio.h>
//将十进制的n转换为k进制的字符串
char*Change(unsignedn,intk,charnum[]){//要求k<=36
inti=0,t;
while(n){
t=n%k;
if(t>9)num[i]='A'+t-10;
elsenum[i]=t+'0';
n/=k;
++i;
}
num[i]=0;
returnnum;
}
intmain(){
chars[50];
intn,k,T;
scanf("%d",&T);
while(T--){
printf("要转换的数:");
scanf("%d",&n);
printf("转换的目标进制数:");
scanf("%d",&k);
printf("%u:%s
",n,Change(n,k,s));
}
return0;
}
C. c语言的进制转换问题
#include<stdio.h>
main()
{
int
a,i,p;
printf("输入1、2或3(1代表8进制,2代表10进制,3代表16进制)\n");
scanf("%d",&i);
if(i==1)
{
printf("输入所转换为的进制2或3(1代表8进制,2代表10进制,3代表16进制)\n");
scanf("%d",&p);
if(p==2)
{
/*
[缺花括号]*/
scanf("%o",&a);
printf("%d\n",a);
}
/*
[缺花括号]*/
if(p==3)
{
/*
[缺花括号]*/
scanf("%o",&a);
printf("%x\n",a);
}
/*
[缺花括号]*/
}
else
if(i==2)
{
printf("输入所转换为的进制1或3(1代表8进制,2代表10进制,3代表16进制)\n");
scanf("%d",&p);
if(p==1)
{
/*
[缺花括号]*/
scanf("%d",&a);
printf("%o\n",a);
}
/*
[缺花括号]*/
if(p==3)
{
/*
[缺花括号]*/
scanf("%d",&a);
printf("%x\n",a);
}
/*
[缺花括号]*/
}
else
{
/*
[缺花括号]*/
printf("输入所转换为的进制1或2(1代表8进制,2代表10进制,3代表16进制)\n");
scanf("%d",&p);
if(p==1)
{
/*
[缺花括号]*/
scanf("%x",&a);
printf("%o\n",a);
}
if(p==2)
{
/*
[缺花括号]*/
scanf("%x",&a);
printf("%d\n",a);
}
/*
[缺花括号]*/
}
/*
[缺花括号]*/
}
/*
以上是改正的程序,
后面跟着
[缺花括号]
就是原程序中缺花括号错误;
程序大体思路没有错。就是缺了点花括号而已;
另外,楼主你用1,2,3代表8,10,16。。不直观,相信你自己检查的时候都头晕吧?
这个题目用switch可能会好一点;switch内嵌套if语句。
*/
D. 用c语言编写十进制转化二进制
#include <stdio.h>
void d2n(unsigned long d,int n)
{
if(d>=n)
{
d2n(d/n,n);
}
printf("%c","0123456789ABCDEF"[d%n]);
}
int main()
{
unsigned long d;
int n;
scanf("%lu",&d);
d2n(d,2);
return 0;
}
E. C语言中如何用算法实现进制间的转化
C语言中实现10进制转换为任意进制的过程为:
定义数组int rs[32],保存转换后的数据,整数的转换结果最多32位(4字节*8位)
定义一个数组char map[]={'0','1','2','3',...,'9','A','B',...'F'},完成相应数值对应的转换后的字符
输入10进制数(整数)num
转入转换进制基数(2-16)ind
循环对num进行模ind运算,得到余数存储到数组rs中
num缩小ind倍
当num为0时结束循环
反向输出数组rs中对应的各元素对应的map字符,得到转换结果
参考代码:
#include<stdio.h>
intmain()
{
charmap[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
inti,c[32],num,ind;
do{printf("inputnum:");scanf("%d",&num);}while(num<0);
do{printf("inputind:");scanf("%d",&ind);}while(ind>16||ind<2);
i=0;
do{
c[i++]=num%ind;
num/=ind;
}while(num!=0);
for(i--;i>=0;i--)
printf("%c",map[c[i]]);
printf(" ");
return0;
}
运行结果:
input num: 100
input ind: 2
1100100
input num: 100
input ind: 8
144
input num: 100
input ind: 16
64
F. C语言进制转换
支持zpfloveyfy的分析,程序风格也很好。
我在这给个数制转换的公式:
十进制数N和其他d进制数的转换基于以下公式:
N
=
(N
div
d)
*
d
+
N
mod
d;
其中:div为整除,mod为求余。
例如将10进制1348转化成2504,运算过程如下:
N
Ndiv8
Nmod8
1348
168
4
168
21
0
21
2
5
2
0
2
看起来有点乱,因为这里会把原来的格式给打乱。
由最后一列4052可以看出,正好是结果2504的倒数,所以用栈来实现它是最理想不过的了。
G. 在c语言中用最简单的方法把十进制转化为十六进制
代码如下:
#include"stdio.h"
intmain()
{
intnum=0;
inta[100];
inti=0;
intm=0;
intyushu;
charhex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
printf("请输入一个十进制整数:");
scanf("%d",&num);
while(num>0)
{
yushu=num%16;
a[i++]=yushu;
num=num/16;
}
printf("转化为十六进制的数为:0x");
for(i=i-1;i>=0;i--)//倒序输出{
m=a[i];
printf("%c",hex[m]);
}
printf("
");
}
程序运行结果:
(7)c语言进制基础转化扩展阅读
C语言中,十进制转换十六进制,可以先输入十进制整数,然后去拼十六进制,十六进制由数字 0~9、字母 A~F 或 a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头,只需把二进制除以16得到余数去上面定义的hex[16]数组进行取值接可以得到转换的数字。
H. 任意进制数的转换c语言
任意进制数转换为十进制,可以用 strtol()函数。
函数定义:
long int strtol(const char *nptr,char **endptr,int base);
见 网页链接 网络。
十进制转换为任意进制,可以用itoa()函数。
// itoa 例子
#include<stdio.h>
#include<stdlib.h>
intmain(){
inti;
charbuffer[33];
printf("Enteranumber:");
scanf("%d",&i);//输入整数i
itoa(i,buffer,10);//将i转化为10进制数,存到buffer中
printf("decimal:%s
",buffer);//输出打印buffer
itoa(i,buffer,16);//将i转化为16进制数,存到buffer中
printf("hexadecimal:%s
",buffer);//输出打印buffer
itoa(i,buffer,2);//将i转化为2进制数,存到buffer中
printf("binary:%s
",buffer);//输出打印buffer
return0;}
I. C语言 进制转化
这种计数的方法就是BCD码,即4位二进制数用来表示十进制的1位。如果收到的是字符串,下面程序转化,如果非字符串,请再追问。
#include<stdio.h>
int getBCD(unsigned char *s) { int xx; xx=s[2]*10+s[3]; return xx; }
void main()
{ unsigned char process[4]={ '0','x','1','4' };
int x;
x=getBCD(process);
}
J. c语言十进制转化为十六进制原理
十进制数 由 0到9 组成, 逢10 进1, 各个位的权 是 10 的 i 次方,整数部分 i 从 0 起算。小数部分 i 从 -1 起算。
十六进制 由 0到十五组成,逢16进1,各个位的权 是 16 的 i 次方,整数部分 i 从 0 起算。小数部分 i 从 -1 起算。
十六进制 的十到十五用 a,b,c,d,e,f 表示。
整数部分,十进制 转化为十六进制 可以用 不断地 除以16 “取余数” 的方法 得到。
小数部分,十进制 转化为十六进制 可以用 不断地 乘16“取整数”的 的方法 得到。
例如:十进制 17852.5 转化为十六进制,
17852/16 = 1115 余 12 -- c
1115/16 = 69 余 11 -- b
69/16 = 4 余 5
4/16 = 0 余 4
整数部分 得16进制: 45bc
.5 * 16 = 8.0 取 8 余 0
小数部分 得16进制: .8
合起来 0x45bc.8
c 语言程序 printf("%x", 17852); %x格式 输出 16进制: 45bc 可用于转换整数。