原题是这样的,编写一个函数,输入一个十进制数,输出相应的二进制数.
请告诉我十进制转化为二进制,整数、小数、负数的运算原理分别是什么。
请再将完整的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])ï¼
}
ç±äºæ¶é´ä»ä¿ï¼ç¨åºå¯è½æä¸è¶³çå°æ¹ï¼æè§è° ï¼
å®ç°è¯¥åè½å¦ä¸ï¼
ï¼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取整,顺序输出
#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。可根据需要的精度决定转化的位数。
原因出在输入输出上。double的标示应该是%lf而不是%f,也就是输入和输出分别改为:
scanf("%lf",&score[i]);
printf("不及格者的成绩总合为%lf",av);
就可以用double型了。
十进制转化二进制的话,整数部分不断除以2,保存余数,小数部分不断乘以2,保存小数点前面的数。所以整数转化后肯定还是有限位,小数的话很有可能有无限位,除非它所对应的分数分母只有因子2。可根据需要的精度决定转化的位数。
第3个回答 2007-03-20
对不起,我只会Qbasic语言.
第4个回答 2007-03-24
哦!这么简单!!