C語言float和double輸入問題

2022-02-06 12:00:52 字數 997 閱讀 3905

統計給定的n個數中,負數、零和正數的個數。

input

輸入資料有多組,每組佔一行,每行的第乙個數是整數n(n<100),表示需要統計的數值的個數,然後是n個實數;如果n=0,則表示輸入結束,該行不做處理。

output

對於每組輸入資料,輸出一行a,b和c,分別表示給定的資料中負數、零和正數的個數。

sample input

6 0 1 2 3 -1 0

5 1 2 3 4 0.5

0 sample output

1 2 3

0 0 5

1 #include 2

using

namespace

std;

3int

main()else

if(temp > 0

)else19}

20 printf("

%d %d %d\n

", negative, zero, positive);21}

22return0;

23 }

(1)printf的%f說明符既可以輸出float型又可以輸出double型。

根據「預設引數提公升」規則(在printf這樣的函式的可變引數列表中,不論作用域內有沒有原型,都適用這一規則)float型會被提公升為double型。因此printf()只會看到雙精度數。

(2)scanf對於float型別必須用%f,double必須用%lf,對於scanf,情況就完全不同了,它接受指標,這裡沒有類似的型別提公升。

(通過指標)向float儲存和向double儲存大不一樣,因此,scanf區別%f和%lf。

(3)事實上,printf中沒有定義%lf,但是很多系統可能會接受它。要確保可移植性,就要堅持使用%f。

建議大家使用double型別時,用%lf輸入,%f輸出避免出錯。

float佔32位,double佔64位,(52位為系數字 11位為指數部分,1位為符號位)

double和float的區別

float a 0.1 編譯器報錯 warning c4305 initializing truncation from const double to float 原因 在c c 中 也不知道是不是就在vc 中這樣 上述語句等號右邊0.1,我們以為它是個float,但是編譯器卻把它認為是個doub...

float和double儲存方式

在c c 中float是32位的,double是64位的,兩者在記憶體中的儲存方式和能夠表示的精度均不同,目前c c 編譯器標準都遵照ieee制定的浮點數表示法來進行float,double運算。無論是float還是double,在記憶體中的儲存主要分成三部分,分別是 1 符號位 sign 0代表正...

double和float的誤區!

float是單精度型別,精度是8位有效數字,取值範圍是10的 38次方到10的38次方,float占用4個位元組的儲存空間 double是雙精度型別,精度是17位有效數字,取值範圍是10的 308次方到10的308次方,double占用8個位元組的儲存空間 當你不宣告的時候,預設小數都用double...