首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言質數統計:邏輯錯誤導致求和結果錯誤修正

     編輯:程式設計綜合問答

錯誤代碼分析

for (; m <= n; m++) {
    if (prime(m) == 1)
        count++; sum = sum + m;  // 缺少大括號!sum 無條件執行
}
int prime(int m) {
    for (i = 2; i <= m-1; i++) {
        if (m % i == 0) return 0;
        else return 1;  // 邏輯錯誤:第一次不整除就返回 1,應循環結束後返回
    }
}

兩大錯誤

  1. 主循環缺少大括號:sum = sum + m 不在 if 作用域內,**每次循環都累加 m**,導致 sum = 1+2+...+10 = 55。
  2. 質數判斷邏輯錯誤:else return 1 使函數在 i=2 不整除時直接返回 1(如 9%2!=0 返回 1,實為合數)。正確寫法是循環結束無因子才返回 1。

修正代碼

#include <stdio.h>
int prime(int m);

int main() {
    int m, n, sum = 0, count = 0;
    printf("Input m: "); scanf("%d", &m);
    printf("Input n: "); scanf("%d", &n);
    for (; m <= n; m++) {
        if (prime(m)) {      // 加大括號
            count++;
            sum += m;
        }
    }
    printf("count=%d, sum=%d\n", count, sum);
    return 0;
}

int prime(int m) {
    if (m <= 1) return 0;
    for (int i = 2; i * i <= m; i++)  // 優化:只需判斷到 sqrt(m)
        if (m % i == 0) return 0;
    return 1;  // 循環結束無因子,是質數
}

優化點

  • 判斷質數只需試除到 sqrt(m)(i*i <= m),大幅減少循環次數。
  • 主循環 if 必須加大括號包裹多語句,養成良好習慣避免此類低級錯誤。

修正後輸入 1 10 正確輸出 count=4, sum=17(質數:2,3,5,7)。

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