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

C語言指針參數交換變量值:考試改錯題標準解法與字符統計、因子求和函數實現

     編輯:C 語言問答

題目一:指針交換改錯

原錯誤代碼


int fun(int *x, int y) {
    int t;
    t = x;      // ❌ x 是地址,t 應存值
    x = y;      // ❌ 修改局部指針副本,不影響實參
    return y;
}
main() {
    int a=3, b=8;
    b = fun(&a, b);  // 期望 a=8, b=3
}

正確修改(僅修改標記區域)


int fun(int *x, int y) {
    int t;
    t = *x;    // ✅ 取值
    *x = y;    // ✅ 通過指針修改實參 a
    return t;  // ✅ 返回原 a 的值賦給 b
}

核心:*x 解引用訪問實參 a,return t 將原 a 的值作為函數返回值賦給 b,實現交換。

題目二:字符統計函數


int fun(char *ss, char c) {
    int count = 0;
    while (*ss != '\0') {
        if (*ss == c) count++;
        ss++;
    }
    return count;
}

題目三:因子求和函數(不含 1 和自身)


void fun(int n) {
    int sum = 0;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            sum += i;
            if (i != n / i) sum += n / i;  // 避免平方數重複加
        }
    }
    printf("sum=%d\n", sum);
}

調用示例:n=856,因子 2,4,8,107,214,428 → 和 763。

考試答題規範提醒

  • 嚴格遵守「不改主函數、不增刪行、不改結構」
  • 僅在 /********found********/ 標記區填寫
  • 注意指針解引用 *ptr 與地址傳遞 &var 的配合
  • 字符串遍歷以 '\0' 為終止條件

此類題目考察指針語義理解、函數參數傳遞機制、邊界條件處理,是 C 語言基礎考試高頻考點。

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