首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

杭電OJ 2008 題解:正負零計數——浮點數分類統計

     編輯:關於C

題目描述

多組測試。每組先輸入整數 n,n=0 結束。隨後輸入 n 個浮點數。統計負數、零、正數的個數並輸出。

標準解法


#include 

int main(void) {
    int n;
    while (scanf("%d", &n) == 1) {
        if (n == 0) break; // 終止條件
        int neg = 0, zero = 0, pos = 0;
        for (int i = 0; i < n; i++) {
            float x;
            scanf("%f", &x);
            if (x < 0) neg++;
            else if (x == 0) zero++;
            else pos++;
        }
        printf("%d %d %d\n", neg, zero, pos);
    }
    return 0;
}

關鍵點

  1. 終止條件:n == 0 時退出外層循環,不處理後續數據。
  2. 浮點數比較:直接 x == 0 判斷零值。輸入為精確十進制表示時安全;若涉及計算產生的浮點數,需用 fabs(x) < EPS。
  3. 三路分支:if-else if-else 互斥覆蓋所有情況。
  4. 計數器類型:int 足夠(n 通常 ≤ 10000)。

測試用例

輸入輸出說明
3
-1.5 0 2.5
0
1 1 1各一個
5
0 0 0 0 0
0
0 5 0全零
4
-1 -2 -3 -4
0
4 0 0全負

浮點數比較最佳實踐補充


// 通用浮點數零值判斷
#define FLOAT_EPS 1e-9
int float_cmp(float x) {
    if (x < -FLOAT_EPS) return -1; // 負
    if (x > FLOAT_EPS) return 1;   // 正
    return 0;                      // 零
}

本題輸入為直接給定的十進制數,x == 0 安全有效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved