[問題] 對不起忘了貼..(修正)

看板C_and_CPP (C/C++)作者 (小噗子)時間16年前 (2009/10/13 03:36), 編輯推噓6(6026)
留言32則, 6人參與, 最新討論串1/1
經過板大的指點.. 我修改到這裡.. 但是還是有問題 = O = 有人可以解救我嗎? #include <stdio.h> #include <stdlib.h> #include <math.h> main() { int x, y, z, w; float avg; printf("Input X="); scanf("%d",&x); printf("Input Y="); scanf("%d",&y); printf("Input Z="); scanf("%d",&z); printf("X=%d, Y=%d, Z=%d\n",x,y,z); w = sqrt((float)(x+y+z)/2.0); avg = sqrt(w*(w-x)*(w-y)*(w-z)); printf("sqrt(w*(w-x)*(w-y)*(w-z)))=%f\n",avg); system("pause"); } 算出來答案更怪..求救.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.40.159.230

10/13 03:48, , 1F
算w不用sqrt
10/13 03:48, 1F

10/13 03:50, , 2F
ok!! 修改了.. 還有哪裡?? 因為答案還是錯的!!...
10/13 03:50, 2F

10/13 06:08, , 3F
int x, y, z, w; -> float x, y, z, w;
10/13 06:08, 3F

10/13 07:39, , 4F
目前我執行了!!可是他單數的答案都是錯誤..雙數都正確..
10/13 07:39, 4F

10/13 07:39, , 5F
這樣算正常嗎??
10/13 07:39, 5F

10/13 08:49, , 6F
第一個不用sqrt明明我上面回文就已經寫了....
10/13 08:49, 6F

10/13 08:51, , 7F
然後3F明明就提示你了, 至少把w改用float宣告, 你到底
10/13 08:51, 7F

10/13 08:51, , 8F
有沒有認真的看別人的回應啊!?
10/13 08:51, 8F

10/13 08:53, , 9F
算了, 看在你也很拚的份上....
10/13 08:53, 9F

10/13 08:53, , 10F
你的w宣告成int, 所以計算(x+y+z)/2.0的時候, 雖然計算
10/13 08:53, 10F

10/13 08:54, , 11F
時有個2.0所以可以正確算出#.5的浮點數, 但是因為w是整
10/13 08:54, 11F

10/13 08:54, , 12F
數, 所以這裡發生了一個隱式的浮點轉整數的取整動作, 因
10/13 08:54, 12F

10/13 08:55, , 13F
此只要(x+y+z)是奇數, 你算的結果就不對, 但只要是雙數
10/13 08:55, 13F

10/13 08:55, , 14F
因為本來就可以被2除盡沒有誤差, 所以結果就正確了.
10/13 08:55, 14F

10/13 09:00, , 15F
Ex: float f=3/2; // f=1.0 int i=3.0/2.0; // i=1
10/13 09:00, 15F

10/13 09:05, , 16F
最後補充一點, 不清楚你寫程式的環境為何, 但是可以練習
10/13 09:05, 16F

10/13 09:05, , 17F
學著用IDE的Debug工具, 搭配Step by Step, Break Point,
10/13 09:05, 17F

10/13 09:06, , 18F
Watch監看變數等; 不用Debug工具, 這個問題單靠程式裡多
10/13 09:06, 18F

10/13 09:06, , 19F
自己print幾個變數的結果當Debug Message也可以, 這樣的
10/13 09:06, 19F

10/13 09:06, , 20F
技巧只要繼續寫程式的話, 以後都一定用得到的:)
10/13 09:06, 20F

10/13 15:42, , 21F
我也不知道為什麼學校要給我們上這堂課!!跟專業無關的..
10/13 15:42, 21F

10/13 15:42, , 22F
考試也無關.. 現在還在努力中!!
10/13 15:42, 22F

10/13 15:43, , 23F
剛學什麼都不懂所以你們回應我都會想很久..sorry.
10/13 15:43, 23F

10/13 15:43, , 24F
我現在改寫這樣.. float w=(x+y+z)/2.0; 可是他說錯誤..
10/13 15:43, 24F

10/13 15:43, , 25F
為什麼阿?? 還是位子我放錯了??
10/13 15:43, 25F

10/13 15:49, , 26F
起碼說一下什麼錯誤訊息吧, 只有一行實在看不出來為什麼
10/13 15:49, 26F

10/13 15:52, , 27F
sorry.. In function `main':
10/13 15:52, 27F

10/13 15:52, , 28F
conflicting types for 'w'
10/13 15:52, 28F

10/13 15:52, , 29F
previous declaration of 'w' was here
10/13 15:52, 29F

10/13 15:58, , 30F
你有把 int x, y, z, w; 這個 w 去掉嗎?
10/13 15:58, 30F

10/13 16:01, , 31F
還沒有..
10/13 16:01, 31F

10/13 16:03, , 32F
謝謝你們 我完成了!!..
10/13 16:03, 32F
文章代碼(AID): #1AquKl_a (C_and_CPP)
文章代碼(AID): #1AquKl_a (C_and_CPP)