看板 C_and_CPP 關於我們 聯絡資訊
大家好,小妹剛學程式,遇到問題還不擅長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,在這裡先 謝謝大家回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.76.212.103 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1532445683.A.C73.html
jerryh001: 輸入的是int所以 x0到x2都不對? 07/24 23:45
nh60211as: 你的輸入a b都沒有給值所以你的輸入被變成findmin(0,0) 07/24 23:50
b0920075: 把printf的ab改成第一個findmin的5,-5試試看(findmin 07/24 23:56
b0920075: ),雖然不是很懂幹嘛寫兩個findmin 07/24 23:56
b0920075: 另外這個版問問題有格式要注意哦 07/24 23:57
GabbyPink: 抱歉QQ 一時心急沒注意到格式,我把printf那邊改findmi 07/25 00:32
GabbyPink: n(-5,5) 答案還是0 Orz 07/25 00:32
tony02258: 因為 findMin 傳進去的參數是 兩個 int , 所以會用整數 07/25 01:01
tony02258: 運算 所以你的 x1 會是-2(無條件捨去) 不會是-2.5。 07/25 01:01
tony02258: 更改方法 可以把傳進去的參數 直接改型態變成 float, 07/25 01:01
tony02258: 或是 可以在a, b運算之前 * 1.0 強制變成小數運算即可 07/25 01:01
tony02258: 。 07/25 01:01
Sex5F: 先學會print 07/27 09:46
Sex5F: hello world 07/27 09:46