1. 自增/自減運算子
++a:先加後用(值為 a+1)
a++:先用後加(值為 a,隨後 a 變 a+1)
int x=5, y;
y = x++ + 5; // y=10, x=6
y = ++x + 5; // y=12, x=7
2. 位元運算
| 運算子 | 規則 | 範例 |
| & (AND) | 同為1得1 | 1110 & 1010 = 1010 |
| | (OR) | 同為0得0 | 1110 | 1010 = 1110 |
| ~ (NOT) | 逐位取反 | ~1111 = 0000 |
| ^ (XOR) | 異為1,同為0 | 1010 ^ 0110 = 1100 |
| << (左移) | 乘 2^n | x << 1 ≡ x*2 |
3. 條件運算子 (三元)
max = (a > b) ? a : b; // 真取前,假取後
4. 最大公約數 (GCD) - 輾轉相除法
int gcd(int a, int b) {
while (b) { int t = a % b; a = b; b = t; }
return a;
}
// LCM = a * b / gcd(a,b)
5. 隨機數生成
// 產生 [x, y] 範圍整數
int rand_range(int x, int y) {
return x + rand() % (y - x + 1);
}
// 例:10~100 → 10 + rand() % 91
6. 水仙花數(三位數自冪和)
// 153 = 1^3 + 5^3 + 3^3
for (int i=100; i<1000; i++) {
int a=i/100, b=i/10%10, c=i%10;
if (a*a*a + b*b*b + c*c*c == i) printf("%d ", i);
}
7. 字串長度未知時的遍歷
for (int i=0; str[i]; i++) { ... } // 遇 \0 結束
8. 亂數填充陣列指定範圍
for (int i=0; i<20; i++)
a[i] = rand_range(30, 70); // [30,70]
9. 冒泡排序 (升序)
void bubble_sort(int a[], int n) {
for (int i=0; ii; j--)
if (a[j] < a[j-1]) {
int t = a[j]; a[j] = a[j-1]; a[j-1] = t;
}
}
10. 字元陣列 vs 字串常值
char str1[] = {'o','k'}; // 長度2,無 \0
char str2[] = "ok"; // 長度3,含隱含 \0
char str3[10] = "hello"; // 初始化前5字元,其餘自動填 \0
11. 逐字元讀取輸入直到換行
char c;
while ((c = getchar()) != '\n') {
putchar(c);
}
12. 字串初始化多種寫法
char s1[] = "hello";
char s2[10] = {'h','e','l','l','o'};
char s3[10] = "hello"; // 推薦:自動補 \0
速記口訣
- 前綴自增先加,後綴自增後加。
- 位元運算:與全1、或全0、異或異1、非全反。
- GCD 輾轉相除,LCM 乘積除 GCD。
- 冒泡 n-1 趟,每趟把最大泡到最後。
- 字串必以 \0 結尾,strlen 不算 \0。