C语言十进制转化为二进制

原题是这样的,编写一个函数,输入一个十进制数,输出相应的二进制数.
请告诉我十进制转化为二进制,整数、小数、负数的运算原理分别是什么。
请再将完整的C语言代码写在下面,辛苦了。
顺便帮我看看这个程序哪里出问题了,怎么把double换成float就可以运行了呢?
#include "stdio.h"
main()
{ double score[3],av=0;
int i;
for(i=0;i<3;i++)
scanf("%f",&score[i]);
for(i=0;i<3;i++)
{ if(score[i]<60)
av+=score[i];
}
printf("不及格者的成绩总合为%f",av);
}
楼下的大哥们,辛苦你们了,可各位似乎都没看懂我的题意。
1.我要求写出程序;
2.我要求使用C语言,而不是C++。本来这个程序也不应该使用指针的,因为第五章还没学指针了。
3.重点是要小数和负数部分,整数的我自已也会啊。
希望各位能把题看清楚了再回答。

位权是转换的核心,比如说,二进制的位权是2的n次方,就是说将需转换的数除以2取余数组成的0,1串即为所求了(倒排)
实现该功能如下:
#include<stdio.h>
main()
{int i,j,k=0,AA[50];/*数组用来存放余数*/
printf("Input:\t");/*命令提示输入一个数*/
scanf("%d\n",&i);
while(1)
{ j=i%2;
i=i/2;
AA[k++]=j;
if(i==0) break; /*i==0时,跳出循环,结束运算*/
}
printf("Output:\t");/*命令提示输出运算结果*/
for(k=k-1;k>=0;k--)
printf("%d",AA[k]);
}

由于时间仓促,程序可能有不足的地方,望见谅!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-03-12
整数部分除2取余,逆序输出
小数部分乘2取整,顺序输出

#include<iostream.h>
#include<math.h>

void f1(int m, int n) { //转整数部分
if(m) { f1(m/n,n);
if(n<10) cout<<m%n;
else m%n>=10? cout<<char(m%n-10+'A') : cout<<m%n;
}
}

void f2(double m, int n) { //转小数部分
while(m) { if(n<10) cout<<int(m*n);
else m*n>=10? cout<<char(int(m*n)-10+'A') : cout<<int(m*n);
m = m*n - int(m*n);
}
}

void f(double m, int n) {
f1(m, n);
if(int(m) == m) return;
cout<<'.';
m -= int(m);
f2(m, n);
}

void f10(char c[], double m) {
cout<<' '<<c<<" 转换成"<< 2<<"进制 = "; f(m, 2); cout<<endl;
cout<<' '<<c<<" 转换成"<< 8<<"进制 = "; f(m, 8); cout<<endl;
cout<<' '<<c<<" 转换成"<<16<<"进制 = "; f(m,16); cout<<endl;
}

double fn_10(char c[], int n) {
char z[100];
int i = 0, j;
double b = 0;
cout<<' '<<c<<" 转换成10进制 = ";
while(*c != '.' && *c != '\0') z[i++] = *c++;
i--;
if(*c == '\0') c--;
for(j = 0; j <= i; j++)
if(z[j] < 65) b += (z[j]-48) * pow(n,i-j);
else b += (z[j]-55) * pow(n,i-j);
for(c++, j = -1; *c != '\0' ; c++, j--)
if(*c < 65) b += (*c-48) * pow(n,j);
else b += (*c-55) * pow(n,j);
cout<<b<<endl;
return b;
}

void main() {
cout<<" 进制转换\n";
char c[100];
int n;
cout<<"\n 输入一数与它的进制: ";
cin>>c>>n;
cout<<endl;
f10(c, fn_10(c,n));
}
第2个回答  2007-03-12
先回答第二个问题。
原因出在输入输出上。double的标示应该是%lf而不是%f,也就是输入和输出分别改为:
scanf("%lf",&score[i]);
printf("不及格者的成绩总合为%lf",av);
就可以用double型了。
十进制转化二进制的话,整数部分不断除以2,保存余数,小数部分不断乘以2,保存小数点前面的数。所以整数转化后肯定还是有限位,小数的话很有可能有无限位,除非它所对应的分数分母只有因子2。可根据需要的精度决定转化的位数。
第3个回答  2007-03-20
对不起,我只会Qbasic语言.
第4个回答  2007-03-24
哦!这么简单!!

相关了解……

你可能感兴趣的内容

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