題目描述題目分析小屁孩為什麼要寫這篇部落格呢,這道題本身並沒有難度,但很多初學程式語言的朋友在這道題上會遇上乙個讓人特別頭疼的問題,明明程式沒什麼問題,但為什麼測試的時候就會出問題呢?尤其是輸入樣例二,輸出結果為什麼會是ok呢?先給大家看一看**。#include
int main (
void
)else
if(v
1.5)
else
return0;
}
為什麼要寫成v - l < l * 0.1而不能寫成v < 1.1 *l 呢?肯定是這樣寫有問題,因為浮點數存在精確度的問題,當你輸入 v = 110,l = 100時,你認為此時v == 1.1 * l,實際上可能是這樣的 110 < 110.00000000000001,後者是我親自實驗計算機輸出的值,應該是有限字元效應。運算過程中的有限字長效應與所用的數制(定點制、浮點制)、碼制(原碼、反碼、補碼)及量化方式(捨入、截尾處理)都有複雜的關係。例如,使用定點制時,每次乘法之後,會引入誤差;而浮點制時,每次加法和乘法之後均會引入誤差那你可能又會有疑問了,為什麼後面的v < l * 1.5又沒有問題呢?這個你就要問計算機了,浮點數的脾氣就是這麼古怪,喜怒無常。如果你寫成v < 1.1 *l 還是不行,那麼你可以嘗試其他的等價表達。if
(v-l
0.1)
讓你們直觀的看看浮點數的小脾氣:
習題3 2 高速公路超速處罰
習題3 2 高速公路超速處罰 15分 浙大版 c語言程式設計 第3版 題目集 按照規定,在高速公路上行使的機動車,達到或超出本車道限速的10 則處200元罰款 若達到或超出50 就要吊銷駕駛證。請編寫程式根據車速和限速自動判別對該機動車的處理。輸入在一行中給出2個正整數,分別對應車速和限速,其間以空...
習題3 2 高速公路超速處罰
按照規定,在高速公路上行使的機動車,達到或超出本車道限速的10 則處200元罰款 若達到或超出50 就要吊銷駕駛證。請編寫程式根據車速和限速自動判別對該機動車的處理。輸入在一行中給出2個正整數,分別對應車速和限速,其間以空格分隔。在一行中輸出處理意見 若屬於正常行駛,則輸出 ok 若應處罰款,則輸出...
3 2 高速公路超速處罰
按照規定,在高速公路上行使的機動車,達到或超出本車道限速的10 則處200元罰款 若達到或超出50 就要吊銷駕駛證。請編寫程式根據車速和限速自動判別對該機動車的處理。輸入格式 輸入在一行中給出2個正整數,分別對應車速和限速,其間以空格分隔。輸出格式 在一行中輸出處理意見 若屬於正常行駛,則輸出 ok...