为什么能运行却得不到结果呢??

eric491179912 2009-05-31 11:15:18
大家好我是新手,写了一个递归方法的二进制数转十进制数的程序,输入整数结果正确,用win-tc编译通过点运行输入小数部分就出问题了,窗口立刻消失,麻烦大家看看处理小数部分的递归函数哪里出了问题..谢谢!!

#include "Stdio.h"

int integer(int zhengshu);

float decimal(float xiaoshu);



int main(void)
{
float n,xs;

int zs;

printf("\n enter 2 jinzhi:");

scanf("%f",&n);

zs=(int)n;

xs=n-zs;

printf("\n10 jinzhi:");

printf("%f",(integer(zs)+ decimal(xs)));

getch();



}








int integer(int zhengshu) /* 处理整数部分*/
{
static int m,t1=1,sum1=0; /*m为各位数,t为各位权值*/

m=zhengshu%10;

if((zhengshu/10)!=0)
{

sum1+=m*t1;

t1*=2;

integer(zhengshu/10);

}


else if((zhengshu/10)==0)

{

return sum1+m*t1;

}


}












float decimal(float xiaoshu)
{
static int t2=2;

static float sum2=0;

int n;

float f;



if(xiaoshu>0)
{

f=xiaoshu*10;



n=(int)f;

sum2+=n/t2;

t2*=2;

f=f-n;

decimal(f);

}

else if(xiaoshu==0)

return sum2;


}


...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
eric491179912 2009-06-01
  • 打赏
  • 举报
回复
谢谢各位好心人了
小弟感谢!!
lingyin55 2009-05-31
  • 打赏
  • 举报
回复
else if(xiaoshu==0)

像浮点数的大小比较,用==是得不出结果的,你只能用两个数的差的绝对值小于
某一个误差值进行判断。这个误差值根据需要由自己定义,一般为10的-6次方
上山老人 2009-05-31
  • 打赏
  • 举报
回复
晚上要睡觉 没时间看 有时间帮你看下吧 自己研究一下吧 细节方面注意一点
lingyin55 2009-05-31
  • 打赏
  • 举报
回复
up3楼,这里sum2+=n/t2; n/t2的类型还是int型。
你也可以用sum2+=(float)n/t2;先强制转换一下
liao05050075 2009-05-31
  • 打赏
  • 举报
回复

#include "stdio.h"

int integer(int zhengshu);

float decimal(float xiaoshu);


int main(void)
{
float n,xs;

int zs;

printf("\n enter 2 jinzhi:");

scanf("%f",&n);

zs=(int)n;

xs=n-zs;

printf("\n10 jinzhi:");

printf("%f",(integer(zs)+ decimal(xs)));

// getch();


}


int integer(int zhengshu) /* 处理整数部分*/
{
static int m,t1=1,sum1=0; /*m为各位数,t为各位权值*/

m=zhengshu%10;

if((zhengshu/10)!=0)
{

sum1+=m*t1;

t1*=2;

integer(zhengshu/10);

}


else if((zhengshu/10)==0)

{

return sum1+m*t1;

}


}


float decimal(float xiaoshu)
{
static float t2=2; //这里原来的int要改成float,不然下面n/t2就变成int/int,结果还是一个int(1/2==0)

static float sum2=0;

int n;

float f;


if(xiaoshu>0)
{

f=xiaoshu*10;



n=(int)f;

sum2+=n/t2;

t2*=2;

f=f-n;

decimal(f);

}

// else if(xiaoshu==0) //浮点数在内存中保存是不精确的,也就是说你不能拿它跟一个比较是不是相等,因为很可能1.5可能用float来存会得
//到1.49999999999 它永远不会直接==1.5, 所以通常用fabs(a-b)<1e-6(一个很小的数),来比较两个浮点数是否相等,
//你的程序在这里不用这个else if也行,所以直接去掉吧

return sum2;


}
eric491179912 2009-05-31
  • 打赏
  • 举报
回复
对上面程序加了点注释,希望帮忙解答谢谢

#include "Stdio.h"

int integer(int zhengshu);

float decimal(float xiaoshu);



int main(void)
{
float n,xs;

int zs;

printf("\n enter 2 jinzhi:");/*提示输入一个二进制数,必须由1或0组成*/

scanf("%f",&n);

zs=(int)n;/*得到整数部分*/

xs=n-zs;/*m得到小数部分*/

printf("\n10 jinzhi:");

printf("%f",(integer(zs)+ decimal(xs)));/*输出十进制数*/

getch();



}








int integer(int zhengshu) /* 处理整数部分*/
{
static int m,t1=1,sum1=0; /*m为各位数,t为各位权值*/

m=zhengshu%10;

if((zhengshu/10)!=0)
{

sum1+=m*t1;

t1*=2;

integer(zhengshu/10);

}


else if((zhengshu/10)==0)

{

return sum1+m*t1;

}


}












float decimal(float xiaoshu)/* 处理小数部分*/
{
static int t2=2;

static float sum2=0;

int n;

float f;



if(xiaoshu>0)
{

f=xiaoshu*10;



n=(int)f;

sum2+=n/t2;

t2*=2;/*权值*/

f=f-n;

decimal(f);

}

else if(xiaoshu==0)

return sum2;


}

liliangbao 2009-05-31
  • 打赏
  • 举报
回复
帮顶~

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧