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

C語言基礎:進制表示、變量交換與經典面試題解析

     編輯:關於C語言

C語言基礎:進制表示、變量交換與經典面試題解析

在C語言程式設計中,理解數據的進制表示、掌握變量交換技巧以及解決經典邏輯題是入門的關鍵環節。本文將系統梳理這些核心知識點,並附帶代碼示例與詳細解析。

一、C語言中的進制總結

C語言支援四種常見進制,各有特定的前綴與輸出格式:

1. 二進制

雖然C標準未強制規定二進制字面量前綴,但GCC等編譯器支援0b前綴。標準庫無直接輸出二進制的格式符,需自行實現。以下為一個通用的二進制打印函數:

#include <stdio.h>

void printfBinary(int n) {
    int bits = sizeof(int) * 8;
    while (bits-- > 0) {
        printf("%d", (n >> bits) & 1);
        if (bits % 4 == 0) printf(" "); // 每4位分組便於閱讀
    }
}

int main() {
    printfBinary(20); // 輸出: 0000 0000 0000 0000 0000 0000 0001 0100
    return 0;
}

2. 八進制

以0開頭(如017),使用%o輸出無符號整數。

3. 十六進制

以0x或0X開頭(如0xFF),使用%x(小寫)或%X(大寫)輸出。

4. 十進制

無特殊前綴,直接書寫數字。使用%d輸出有符號整數,%u輸出無符號整數。

二、互換兩個變量值的多種方法

交換變量值是經典操作,以下是四種常見實現:

1. 使用中間變量(最直觀、通用)

void swapWithTemp() {
    int a = 5, b = 6;
    int temp = a;
    a = b;
    b = temp;
}

2. 算術運算交換(無需臨時變量,但可能溢出)

a = b - a; // a 變為差值
b = b - a; // b 變為原 a
a = b + a; // a 變為原 b

3. 位運算 XOR 交換(無臨時變量,無溢出風險,僅限整型)

a = a ^ b;
b = a ^ b; // 此時 b = a
a = a ^ b; // 此時 a = 原 b

原理利用 XOR 特性:x ^ y ^ x = y。

4. 經典面試題:兩杯子量取 4ml 水

題目:有 A=5ml、B=3ml 兩杯子,水無限,無其他容器,如何得到恰好 4ml?

方法一:

  1. A 滿倒入 B → A 剩 2ml,B 滿 3ml
  2. 倒空 B
  3. A 剩 2ml 倒入 B → B 有 2ml
  4. A 再滿 5ml 倒入 B(B 只能裝 1ml)→ A 剩 4ml ✅

方法二:

  1. B 滿倒入 A → A 有 3ml
  2. B 再滿倒入 A → A 滿 5ml,B 剩 1ml
  3. 倒空 A,B 的 1ml 倒入 A
  4. B 再滿 3ml 倒入 A → A 共 4ml ✅

此題考察邏輯思維與狀態轉移能力,類似圖論中的最短路徑問題。

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