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

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;


}


...全文
142 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
  • 打赏
  • 举报
回复
帮顶~
基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)内容概要:本文围绕基于模型预测控制(MPC)的微电网调度优化展开研究,并提供了完整的Matlab代码实现。文章重点介绍了MPC在微电网能量管理中的应用,通过建立系统动态模型,结合可再生能源出力、负荷需求及储能状态等多重约束,采用滚动优化与反馈校正机制实现对未来一段时间内系统运行状态的预测与优化调度。该方法能够有效提升微电网运行的经济性、稳定性和对不确定性因素的适应能力。文中还提到了多个相关研究方向,如虚拟电厂优化、经济调度、电力负荷预测等,展示了其在综合能源系统中的广泛应用前景。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事能源优化领域的工程技术人员。; 使用场景及目标:①用于教学与科研中理解模型预测控制在微电网调度中的实现原理;②为实际微电网项目提供算法设计与仿真验证的技术参考;③支持进一步扩展至多能源耦合系统的优化控制研究。; 阅读建议:建议读者结合文档提供的Matlab代码进行实践操作,重点关注MPC的滚动优化过程与约束建模方式,同时可参考文中提及的其他优化方法进行对比分析,以加深对微电网调度问题的整体理解。

70,032

社区成员

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

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