用C语言编写二进制转换十进制的程序。

请用C语言写一个二进制转十进制的程序。注意:1.支持正整数,小数,负数的转换。2.支持比较大的数字的转换。非常感谢!... 请用C语言写一个二进制转十进制的程序。注意:1.支持正整数,小数,负数的转换。2.支持比较大的数字的转换。 非常感谢! 展开
 我来答
我的java笔记
高粉答主

2019-07-28 · 每个回答都超有意思的
知道答主
回答量:724
采纳率:38%
帮助的人:28万
展开全部

1、为了完成进制的转换,在主函数中声明了个函数Sum,主要用于将二进制的每一位转换为十进制后的数相加,返回值就是相加后的和。另外定义了一个数组array[8],用于存放输入的八位二进制数。

2、然后使用了一个for循环语句,用于输入八位二进制数。在scanf函数里,在%d之间加了一个1,即%1d,这样是好连续的输入八个数,如果没有中间的1,则编译器会认为你只输入了一个数,即那个八位数。然后使用printf函数输出,并且调用Sum函数,数组名作为实参。

3、在Sum函数中,又声明了一个power函数,power函数的作用是求2的n次方,其实这里可以调用库函数pow,但是老师要求不调用库函数,因此就自己写了一个求2的n次方的函数,在这里n为指数,term为每一位数转换为十进制后的的数,如1*(2*2),sum为总和。

4、接着,使用了一个for循环语句,i用于控制循环的次数,n从最高的指数7开始每次循环减一,如果指数大于或等于零的,就进行循环,因为二进制的最后一位转换为十进制数时指数就是零,此后循环就结束。调用power函数时,将n作为实参,最后将和返回,即将sum作为返回值返回给Sum函数。

5、在power函数中,如果b等于零,即指数为零,则返回1,否则就进入一个循环,j用于控制循环次数,有疑问的可以用笔算算乘2的个数对不对,最后将i返回。

6、最后看一下运行的结果。

依然特雷西sky
高粉答主

2019-07-30 · 繁杂信息太多,你要学会辨别
知道答主
回答量:1511
采纳率:33%
帮助的人:68.9万
展开全部

1、为了完成进制的转换,在主函数中声明了个函数Sum,主要用于将二进制的每一位转换为十进制后的数相加,返回值就是相加后的和。另外定义了一个数组array[8],用于存放输入的八位二进制数

2、然后使用了一个for循环语句,用于输入八位二进制数。

3、在Sum函数中,又声明了一个power函数,power函数的作用是求2的n次方。

4、接着,使用了一个for循环语句,i用于控制循环的次数,n从最高的指数7开始每次循环减一,如果指数大于或等于零的,就进行循环。

5、在power函数中,如果b等于零,即指数为零,则返回1,否则就进入一个循环,j用于控制循环次数,有疑问的可以用笔算算乘2的个数对不对,最后将i返回。

6、最后看一下运行的结果。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-10-10
展开全部
一下两个程序均在VC在编译通过。

/*

如果这个二进制数比较大的话, 大到只能用数组储存这个二进制数,
当然如果大到转化成10进制int存不下的情况那另当别论
*/
#include<stdio.h>
#include<string.h>

int main()
{
char a[33];
int i, num = 0;
scanf("%s", a);

for(i=strlen(a)-1; i>=0; i--)
{
num*=2; /*如果用位运算的话,速度会更快*/
num+=a[i]-'0';
}
printf("%d\n", num);
return 0;
}

/*
如果这个二进制数的位数不超过10位的话
可用这个程序

*/
#include<stdio.h>
int main()
{
int num = 0, a, j=1;
scanf("%d", &a);

while(a)
{
num += (a%10) * j;
a /= 10;
j *= 2;
}
printf("%d\n", num);
return 0;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zz迎风
2017-08-02 · TA获得超过217个赞
知道小有建树答主
回答量:408
采纳率:81%
帮助的人:196万
展开全部

#include<stdio.h>

#include<math.h>

void main()

{

char bit[30];

int i=0,t,s=0;

printf("please input:\n");

scanf("%c",&bit[0]);

while(bit[i]!='\n')

{

i++;

scanf("%c",&bit[i]);

}

for(t=0;i>=0;i--)

{

if(bit[i]>='0'&&bit[i]<='9')

{

s=s+(bit[i]-48)*pow(2,t);

t++;

}

}

printf("%d\n",s);

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-20
展开全部
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>
//bin二进制串
//返回其对应的十进制数
//返回-1表示失败
//end表示终止位置
unsigned BinToDec(char *bin,char **end)
{

int dec = 0;
int i = 0;
int j = 0;
if(bin == NULL)
{
return -1;
}
i = strlen(bin);
*end = bin+i;

while(i>=0)
{
if(*(bin+i) == '1')
{
dec+=pow(2,j);
j++;
}
else if(*(bin+i) == '0')
{
j++;
}
else
{
//无效位
//重新计算
*end = bin+i;
j = 0;
dec = 0;//
}
i--;
}

return dec;
}

int main(int argc,char *argv[])
{
char str[100] = "";
char *p = NULL;
unsigned int r = 0 ;
printf("input the bin string:\n>>");
scanf("%s",str);
r = BinToDec(str,&p); printf("result = %d\n",r);
printf("end pos ->%s",p);
getche();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式