①用getchar将字符进行转换
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int dec = 0, flag = 0 ;
char ch ;
float weight = 1.0, sum = 0 ;
printf("请输入一个二进制串(可带小数):\n") ;
while ((ch=getchar())!='.' && ch != '\n')
{
if (ch == '1' || ch == '0')
dec = dec*2 + ch - '0' ;
else
{
flag = 1 ;
break ;
}
}
if(ch == '.')
while ((ch=getchar()) != '\n')
{
if (ch == '1' || ch == '0')
{
weight = weight/2 ;
sum = sum + (ch - '0') * weight ;
}
else
{
flag = 1 ;
break ;
}
}
if (flag == 0)
printf("%f", sum+dec);
else
printf("输入无效") ;
}
②用整形变量转换
#include <stdio.h>
#include <stdlib.h>
int pow(int i)
{
if (0 == i)
return 1 ;
else return pow(i-1)*2 ;
}
double bpow(int j)
{
if (1 == j)
return 0.5 ;
else
return bpow(j-1)*0.5 ;
}
void main(void)
{
int x, k, n, s = 0, i = 0, j = 0 ;
double m = 0 ;
printf("请输入一个二进制串(可带小数):\n") ;
k = scanf("%d.%d", &x, &n) ;
if (2 != k)
n = 0 ;
while (x != 0)
{
k = x%10 ;
x/=10 ;
if (1 != k && 0 != k)
{
i = -1 ;
break ;
}
else
s+=pow(i)*k ;
i++ ;
}
k = n ;
while (k != 0)
{
k/=10 ;
j++ ;
}
while (n != 0)
{
k = n%10 ;
n/=10 ;
if (1 != k && 0 != k)
{
i = -1 ;
break ;
}
else
m+=bpow(j)*k ;
j-- ;
}
if (-1 == i)
printf("输入无效") ;
else
printf("%lf", s+m) ;
}
③用字符数组
(1)
#include <stdio.h>
#include <stdlib.h>
#define N 50
void main(void)
{
char a[N] ;
printf("请输入一个二进制串(可带小数):\n") ;
scanf("%s", a) ;
int i = 0, flag = 0, s = 0, j ;
float m = 0, n = 1 ;
if ('.' == a[0])
flag = 1 ;
while (a[i] != '.' && a[i] != '\0')
{
if ('0' == a[i] || '1' == a[i])
s = s*2 + a[i] - '0' ;
else
{
flag = 1 ;
break ;
}
i++ ;
}
if ('.' == a[i] && '\0' == a[i+1])
flag = 1 ;
j = i;
while (a[i+1] != '\0')
{
if ('\0' == a[j])
break;
else if ('0' == a[i+1] || '1' == a[i+1])
{
n /= 2 ;
m += n*(a[i+1] - '0') ;
}
else
{
flag = 1 ;
break ;
}
i++ ;
}
if (0 == flag)
printf("%lf", s+m) ;
else
printf("输入无效") ;
}
(2)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 50
int pow(int j)
{
if (1 == j)
return 1 ;
else
return pow(j-1)*2 ;
}
double bpow(int j)
{
if (1 == j)
return 0.5 ;
else
return bpow(j-1)*0.5 ;
}
void main(void)
{
char a[N] ;
int i, flag = 0, s = 0, j ;
float m = 0 ;
printf("请输入一个二进制串(可带小数):\n") ;
scanf("%s", a) ;
for (i = 0 ; a[i] != '.' && a[i] != '\0' ; i++);
for(j = 0 ; j < i ; j++)
{
if ('0' == a[j] || '1' == a[j])
s += pow(i-j)*(a[j] - '0') ;
else
{
flag = 1 ;
break ;
}
}
for (j = i+1 ; j-i < strlen(a)-i ; j++)
{
if ('.' == a[0])
flag = 1 ;
else if ('0' == a[j] || '1' == a[j])
m += bpow(j-i)*(a[j] - '0') ;
else
{
flag = 1 ;
break ;
}
}
if (0 == flag)
printf("%lf", s+m) ;
else
printf("输入无效") ;
}