控制流与运算符
if/switch/循环、位运算。
30 分钟
控制流与运算符
if、循环与位运算是 C 日常逻辑的核心。对照 /roadmaps/c,本课覆盖分支、循环及嵌入式常见的位操作。
学习目标
- 熟练使用
if、switch与三种循环 - 掌握算术、逻辑、比较与赋值运算符
- 理解位运算与掩码用法
- 避免 C 中常见的逻辑陷阱(如
=与==)
核心概念
控制流示例
#include <stdio.h>
#include <stdint.h>
enum { LED_RED = 1, LED_GREEN = 2, LED_BLUE = 4 };
static int clamp(int v, int lo, int hi) {
if (v < lo) return lo;
if (v > hi) return hi;
return v;
}
int main(void) {
int score = 85;
char grade;
if (score >= 90) grade = 'A';
else if (score >= 80) grade = 'B';
else if (score >= 60) grade = 'C';
else grade = 'F';
switch (grade) {
case 'A': puts("优秀"); break;
case 'B': puts("良好"); break;
default: puts("继续加油"); break;
}
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
int n = 5, fact = 1;
while (n > 1) {
fact *= n--;
}
int arr[] = {3, 1, 4, 1, 5};
for (int j = 0; j < 5; j++) {
printf("%d ", arr[j]);
}
printf("\n");
uint8_t flags = LED_RED | LED_BLUE;
if (flags & LED_GREEN) {
puts("green on");
} else {
flags |= LED_GREEN;
}
printf("sum=%d fact=%d clamp=%d flags=0x%02X\n",
sum, fact, clamp(150, 0, 100), flags);
return 0;
}
运算符要点
| 类别 | 运算符 | 说明 |
|---|---|---|
| 算术 | + - * / % | % 仅用于整数 |
| 逻辑 | && || ! | 短路求值 |
| 位 | & | ^ ~ << >> | 掩码、权限标志 |
| 自增 | ++ -- | 前缀/后缀语义不同 |
| 三元 | a ? b : c | 类似 Java |
C 中 0 为假,非零为真;switch 的 case 必须是整型常量。
与 C++/Java 对照
| 特性 | C | C++ | Java |
|---|---|---|---|
| 范围 for | 无(C99 前) | for (auto x : v) |