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

看板C_and_CPP作者 (God黛娜女神)時間5年前 (2018/07/24 23:21), 編輯推噓4(4010)
留言14則, 6人參與, 5年前最新討論串1/1
大家好,小妹剛學程式,遇到問題還不擅長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

07/24 23:45, 5年前 , 1F
輸入的是int所以 x0到x2都不對?
07/24 23:45, 1F

07/24 23:50, 5年前 , 2F
你的輸入a b都沒有給值所以你的輸入被變成findmin(0,0)
07/24 23:50, 2F

07/24 23:56, 5年前 , 3F
把printf的ab改成第一個findmin的5,-5試試看(findmin
07/24 23:56, 3F

07/24 23:56, 5年前 , 4F
),雖然不是很懂幹嘛寫兩個findmin
07/24 23:56, 4F

07/24 23:57, 5年前 , 5F
另外這個版問問題有格式要注意哦
07/24 23:57, 5F

07/25 00:32, 5年前 , 6F
抱歉QQ 一時心急沒注意到格式,我把printf那邊改findmi
07/25 00:32, 6F

07/25 00:32, 5年前 , 7F
n(-5,5) 答案還是0 Orz
07/25 00:32, 7F

07/25 01:01, 5年前 , 8F
因為 findMin 傳進去的參數是 兩個 int , 所以會用整數
07/25 01:01, 8F

07/25 01:01, 5年前 , 9F
運算 所以你的 x1 會是-2(無條件捨去) 不會是-2.5。
07/25 01:01, 9F

07/25 01:01, 5年前 , 10F
更改方法 可以把傳進去的參數 直接改型態變成 float,
07/25 01:01, 10F

07/25 01:01, 5年前 , 11F
或是 可以在a, b運算之前 * 1.0 強制變成小數運算即可
07/25 01:01, 11F

07/25 01:01, 5年前 , 12F
07/25 01:01, 12F

07/27 09:46, 5年前 , 13F
先學會print
07/27 09:46, 13F

07/27 09:46, 5年前 , 14F
hello world
07/27 09:46, 14F
文章代碼(AID): #1RLqFpnp (C_and_CPP)