統計給定的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 <cstdio> 2 using namespace std; 3 int main(){ 4 int n; 5 while(scanf("%d", &n) == 1 && n){ 6 int positive = 0; 7 int zero = 0; 8 int negative = 0; 9 double temp = 0.0; 10 for(int i = 0; i < n; i++){ 11 scanf("%lf", &temp); 12 if(temp == 0){ 13 zero++; 14 }else if(temp > 0){ 15 positive++; 16 }else{ 17 negative++; 18 } 19 } 20 printf("%d %d %d\n", negative, zero, positive); 21 } 22 return 0; 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位為符號位)
