錯誤代碼
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。