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

C 語言二分查找入門:scanf 取址符遺漏導致運行錯誤

     編輯:程式設計綜合問答

錯誤代碼

scanf("%d", x); // ❌ 缺少 &,傳值而非地址

修正

scanf("%d", &x); // ✅ 傳遞變數地址

完整可運行代碼

#include <stdio.h>

int main() {
    int num[15] = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}; // 遞減序列
    int low = 0, high = 14, target, mid, pos = -1;

    printf("請輸入欲查找的數 x: ");
    if (scanf("%d", &target) != 1) return 1;

    while (low <= high) {
        mid = (low + high) / 2;
        if (target == num[mid]) { pos = mid; break; }
        else if (target > num[mid]) high = mid - 1; // 遞減序列:目標較大 → 在左半部
        else low = mid + 1;
    }

    if (pos != -1)
        printf("數字位於第 %d 位 (索引 %d)\n", pos + 1, pos);
    else
        printf("陣列中無此數字\n");
    return 0;
}

關鍵點

  • scanf 所有非陣列/指標變數**必須加 &** 取址。
  • 陣列為**遞減**序列,比較邏輯與遞增相反:target > mid_val → high = mid-1。
  • 索引從 0 起算,輸出位次通常 +1。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved