→ pthuang:哇 這篇是從不良牛來的耶 XD 140.126.21.58 12/12 00:36
我想問題出在於對 int及float的型別宣告、觀念等仍不熟,
而且程式中還看到只有人類才會出現的算數思考模式!
舉個例:
35 ÷7 = 5
35 ÷2 = 17.5
若是結構式程式語言, 則應該這麼做:
int a = 35;
float b = 35;
printf("a除以7等於%d\n", a /= 7);
printf("b除以2等於%f\n", b /= 2);
簡單講就是運算的數值型別跟printf的型別必須一樣!
已經分別用不同顏色標示出來給你看囉!!!
有人回文說數值不會自動轉換, 這是正確的!
因此程式設計師必須要特別注意數值型別及運算!!
有兩個方式修改:
法一:
printf("1a除以2為%f\n", a/=2); //紅色是錯誤
--> printf("1a除以2為%d\n", a/=2); //綠色是修正
法二:
printf("1a除以2為%f\n", float(a/=2)); //綠色是修正
在一兩篇回文有看到說原始程式的寫法是不建議且不符合ANSI C,這的確是!
而且原作者的程式撰寫習慣在觀念易產生錯誤!就像原作者的錯誤觀念是一樣的 !
正確的寫法應該是按部就班,這對初學程式語言的人較易於釐清觀念。
所以保險做法應該是這樣子:
int a = 35;
float 1a = (float(a))/2; //先將int型別的a轉換成float型別, 再運算!
--
※ 引述《jiannrong@kkcity.com.tw ( )》之銘言:
: 我有一個問題,請看以下語法(我只是修改printf的敘述)
: #include<stdlib.h>
: main()
: {
: int a=7;
: printf("a=%d\n",a);
: printf("a加上5為%d\n",a+=5);
: printf("a減掉5為%d\n",a-=5);
: printf("a乘以5為%d\n",a*=5);
: printf("1a除以2為%f\n",a/=2);
: printf("a除以3餘數為%d\n",a%=3);
: float b=35;
: printf("b除以2為%f\n",b/=2);
: printf("2a除以2為%f\n",a/=2);
: system("PAUSE");
: return 0;
: }
: 執行的結果為
: a=7
: a加上5為12
: a減掉5為7
: a乘以5為35
: 1a除以2為0.000000
: a除以3餘數為2
: b除以2為17.500000
: 2a除以2為17.500000
: 請按任意鍵繼續 . . .
: 現在的重點是a是int型態
: printf("1a除以2為%f\n",a/=2);
: printf("2a除以2為%f\n",a/=2);
: 而輸出結果為
: 1a除以2為0.000000
: 2a除以2為17.500000
: 為何2a那一行會有小數出現?
--
╭──── Origin:<不良牛牧場> bbs.badcow.com.tw (210.200.247.200)─────╮
│ ↘ Welcome to SimFarm BBS -- From : [59.113.165.104] │
╰◣◣◢ ◢◢《不良牛免費撥接→電話:40586000→帳號:zoo→密碼:zoo》 ◣◣◢ ─╯