
1、首先,定中扰义两个整型变量,保存计算出的每位二进制数和二进制位数的统计。
2、定义一个实型变量,保存计算的十进制小数。
3、输入汪散一个十进制小数,保存在变量d中。
4、卖陵旦do-while循环中,将十进制小数乘以2。
5、取十进制数的整数部分,保存在变量b中。
6、输出该位的二进制数,同时将十进制数的整数部分减掉。
7、运行程序,输入任意一个十进制小数,计算机就会输出相应的二进制小数。
求蔽裤十进制转换二进制C语言代码代码如下:
#include<stdio.h>
#define NR(sizeof(int)*8) //二进制位的个数
voiddeciToBin(intnum)//十进制转换为二进制函数声明
/*主函数*/
intmain(void)
{
intnum
fprintf(stdout,"请输入一个正整数:")
/*获取并检查用户输入*/
while(1)
{
if(fscanf(stdin,"%d",&num)!=1)
{
fprintf(stderr,"输入错误!请重新输入:")
while(getchar()!='\n')//去掉多余的非法字符
continue
}
elseif(num<0) //输入的数不能为负数
{
fprintf(stderr,"请输入错误!请输入正整数:")
continue
}
else
break
}
fprintf(stdout,"对应二进制为:")
#if1/*方法一:不使用递归*/
charbitArr[NR]
inti=-1
/*算法:栈的数学模型*/
do{
i+=1
bitArr[i]=num%2
num/=2
}while(num!=0)
/*逆序打印*/
for(ii>=0i--)
{
fprintf(stdout,"%d",bitArr[i])
}
fputc('\n',stdout)
#else/*方法歼衫二:使用递归*/
if(num==0)
{
fprintf(stdout,"0\n")
}
else
{
deciToBin(num) //调用第归函数
fputc('\n',stdout)
}
#endif
return0
}
/*
*@函数名:deciToBin
*@函数功能:实现十进制转换为二进制
*@参数:需要转换的十进制整数
*/
voiddeciToBin(intnum)
{
/*第归结束条件*/
if(num==0)
{
return
}
/*第归调用*/
deciToBin(num/2)
/*逆序打印*/
fprintf(stdout,"%d",num%2)
}
扩展资料:
使用C语言编程实现任意进制数(2-16进制)转换为其他任意进制数(2-16进制)方法:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
intTenNum(chara[],intB)
voidNumchange(intm,intB)
intTenNum(chara[],intB)
{
intlen,i,num
intsum=0
len=strlen(a)
for(i=0i<leni++)
{
if(a[i]>='0'&&a[i]<='9')
num=a[i]-'0'
elseif(a[i]>='A'&&a[i]<='F')
num=a[i]-'A'+10
sum=sum*B+num
}
returnsum
}
voidNumchange(intm,intB)
{
intn
if(m)
{
Numchange(m/B,B)
n=m%B
if(n<10)
printf("%d",n)
else
printf("%c",n+55)
}
}
intmain()
{
intB,b
chara[20]
printf("请输入待转换数的进制(2-16):")
do{
scanf_s("%d",&B)
}while(B<2&&B>16)
printf("请输入待转换数:")
getchar()
gets_s(a)
intm=TenNum(a,B)
printf("请输入需要氏并腔转成几进制数(2-16):")
do{
scanf_s("%d",&b)
}while(B<2&&B>16)
printf("%d进制数%s转换为%d进制数的结果为:",B,a,b)
Numchange(m,b)
printf("\n")
system("pause")
return0
}
首先要明白十进制转换成其他进制的方法:
十进制数x不停对y进制进行除法 *** 作,最后再倒取余凳肆数。
比方稿桥说十进制数35转换为二进制:
结果就是100011.
然后我们看change函数,实际上是递归的方法。
c是x对r求余,再打印c之前,键粗猛把x/r的值再对r求余......直到x/r=0为止。
比方说还是上面这个例子。
c0=x%r=35%2=1
c1=x/r%r=17%2=1
c2=x/r/r%r=8%2=0
.......
c5=x/r/r/r/r/r%r=1%2=1
到这里之后x的值已经是1了,然后因为1/2=0了,所以不再进行下去了。
然后打印方式是越后面出现的先打印。
还有不懂的请追问哦。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)