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

请用C语言写一个二进制转十进制的程序。注意:1.支持正整数,小数,负数的转换。2.支持比较大的数字的转换。 非常感谢!

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、最后看一下运行的结果。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-30

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、最后看一下运行的结果。

本回答被网友采纳
第2个回答  推荐于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;

}
第3个回答  2017-08-02

#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);

}

第4个回答  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();
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网