這是我的作業題目
設計一個程式,輸入英哩數和碼數,可以轉換成公里
1英哩=1.607公里 1英哩=1760碼
以下是我寫的程式
//鍵盤輸入英哩數(mileage)和碼數(yardage),將其轉換成?公里(kilometer)
#include
void main()
{
int m,y;//m代表英哩數 y代表碼數
double mileage,km,kilometer;
cout <<"請輸入碼數";
cin >>y;
mileage=y/1760*1.609;
cout <<"請輸入英哩數";
cin >>m;
km=m*1.609;
kilometer=(km+mileage);
cout<<"\\n"<<"公里數是"<
基本上是沒有太大的問題,但是當我 碼數輸入1760以下,轉變出來的公里數因為不足整數"1",就把它直接省略掉。
我想請問一下,為什麼會這樣,有沒有辦法改善這個狀況。
2006-10-21 18:39:01 · 3 個解答 · 發問者 tj3au6u4 1 in 電腦與網際網路 ➔ 程式設計
#include
void main()
{
int m,y;//m代表英哩數 y代表碼數
double mileage,km,kilometer;
cout <<"請輸入碼數";
cin >>y;
mileage=(y/(double)1760)*1.609;
cout <<"請輸入英哩數";
cin >>m;
km=m*1.609;
kilometer=(km+mileage);
cout<<"\n"<<"公里數是"<
有一點要知道就是....
除法有分整數運算和浮點數運算.
之所以會出問題是
mileage=y/1760*1.609;
你的y變數是整數.而像1760這種常數也視為整數.
整數相除.會只取商的部份.所以你1760以下會取到商為0
0*1.609當然就變成0.
你可以讓 (y*1.609)/1760
這樣y會被提升到浮點數做運算.
2006-10-21 19:08:34 · answer #1 · answered by ? 4 · 0⤊ 0⤋
mileage=y/1760*1.609 //程式會先算y/1760才去乘上1.609
因為你y是設int,當程式在計算y/1760的時候小數部分會被自動捨去,所以你輸入1760以下就會被省略了,既然最後你要輸出的是double,建議你把y也設成double吧
2006-10-21 20:02:13 · answer #2 · answered by Albert 2 · 0⤊ 0⤋
問題在於「資料型態」mileage=y/1760*1.609;當 y 為整數型態, y/1760 的結果是「整數型態」值。當 y 為倍精度浮點數型態, y/1760 的結果是「倍精度浮點數型態」值。重點在於「分子」的型態,所以才會出現「不足整數 1」的現象。
2006-10-21 19:03:19 · answer #3 · answered by Big_John-tw 7 · 0⤊ 0⤋