[问题] 请教一些程式问题

楼主: GabbyPink (God黛娜女神)   2018-07-24 23:21:21
大家好,小妹刚学程式,遇到问题还不擅长debug,上来问问资深的大大们如何解决
题目:
https://i.imgur.com/OsHMJR4.jpg
以下是我的程式码:
int findmin(int a,int b)
{
float x1=(3*a+b)/4;
float x2=(a+3*b)/4;
float x0=(a+b)/2;
float f1=x1*x1-2*x1+5;
float f2=x2*x2-2*x2+5;
float f0=x0*x0-2*x0+5;
float e;
printf("input e : ");
scanf("%f",&e);
if(b-a<e)
return (a+b)/2;
else if(f1<f2&&f1<f0)
return findmin(a,x0);
else if(f2<f1&&f2<f0)
return findmin(x0,b);
else if(f0<f1&&f0<f2)
return findmin(x1,x2);
}
int main(void)
{
int a,b;
findmin(-5,5);
printf("ans : %f",findmin(a,b));
return 0;
}
在执行程式时 无论收敛值输入多少,答案都是0,一直找不到问题出在哪里QQ,在这里先
谢谢大家回答
作者: jerryh001   2018-07-24 23:45:00
输入的是int所以 x0到x2都不对?
作者: nh60211as   2018-07-24 23:50:00
你的输入a b都没有给值所以你的输入被变成findmin(0,0)
作者: b0920075 (Void)   2018-07-24 23:56:00
把printf的ab改成第一个findmin的5,-5试试看(findmin),虽然不是很懂干嘛写两个findmin另外这个版问问题有格式要注意哦
楼主: GabbyPink (God黛娜女神)   2018-07-25 00:32:00
抱歉QQ 一时心急没注意到格式,我把printf那边改findmin(-5,5) 答案还是0 Orz
作者: tony02258 (Tony)   2018-07-25 01:01:00
因为 findMin 传进去的参数是 两个 int , 所以会用整数运算 所以你的 x1 会是-2(无条件舍去) 不会是-2.5。更改方法 可以把传进去的参数 直接改型态变成 float,或是 可以在a, b运算之前 * 1.0 强制变成小数运算即可。
作者: Sex5F (HTC)   2018-07-27 09:46:00
先学会printhello world

Links booklink

Contact Us: admin [ a t ] ucptt.com