[問題] 請教一些程式問題

作者: 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