🔢 1. 关系运算符与逻辑运算符
关系运算符 (结果为 0 或 1)
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
< | 小于 | 3 < 5 | 1 (真) |
> | 大于 | 5 > 8 | 0 (假) |
<= | 小于等于 | 3 <= 3 | 1 (真) |
>= | 大于等于 | 2 >= 5 | 0 (假) |
== | 等于 | 4 == 4 | 1 (真) |
!= | 不等于 | 3 != 5 | 1 (真) |
逻辑运算符真值表
| A | B | A && B | A || B | !A |
|---|---|---|---|---|
| 真 | 真 | 真 | 真 | 假 |
| 真 | 假 | 假 | 真 | 假 |
| 假 | 真 | 假 | 真 | 真 |
| 假 | 假 | 假 | 假 | 真 |
🎮 交互式:逻辑表达式求值
⚠️ 短路求值:
&& 左边为假则不计算右边;|| 左边为真则不计算右边
🔀 2. if 语句三种形式
单分支 if
双分支 if-else
多分支 if-else if
语法形式
if (表达式)
语句;
/* 示例:判断是否及格 */ if (score >= 60) printf("及格!\n");
注意:表达式为非零即为"真"
流程图
开始
输入 score
score>=60?
否→
←是
输出"及格!"
结束
🎮 演示:单分支 if
语法形式
if (表达式) 语句1; else 语句2;
/* 示例:判断奇偶 */ if (n % 2 == 0) printf("%d是偶数\n", n); else printf("%d是奇数\n", n);
流程图
🎮 演示:双分支 if-else
成绩分级演示 (if-else if-else 链)
if (score >= 90) grade = 'A'; else if (score >= 80) grade = 'B'; else if (score >= 70) grade = 'C'; else if (score >= 60) grade = 'D'; else grade = 'F';
🎮 动态判断路径可视化
75
🪆 3. if-else 嵌套与悬挂 else
悬挂 else 问题
/* 看起来像这样... */ if (x > 0) if (y > 0) printf("第一象限"); else printf("x不大于0");
⚠️ 规则:else 与最近的未匹配的 if 配对!
/* 实际上等价于: */ if (x > 0) { if (y > 0) printf("第一象限"); else // 与内层if配对! printf("x不大于0"); }
🎮 判断象限演示
if (x > 0 && y > 0) printf("第一象限"); else if (x < 0 && y > 0) printf("第二象限"); else if (x < 0 && y < 0) printf("第三象限"); else if (x > 0 && y < 0) printf("第四象限"); else printf("在轴上");
🎮 坐标系可视化
点击坐标系判断象限
🔦 4. switch 语句
语法形式
switch (表达式) { case 常量1: 语句序列1; break; case 常量2: 语句序列2; break; /* ... */ default: 默认语句; }
⚠️ 必须注意:每个 case 末尾必须加
break,否则会"贯穿"执行下一个 case!
🎮 星期映射演示
switch (day) { case 1: printf("Monday"); break; case 2: printf("Tuesday"); break; /* ... */ default: printf("Error"); }
⚡ break 贯穿效果演示
✅ 有 break(正确)
switch(n) { case 1: puts("一"); break; case 2: puts("二"); break; case 3: puts("三"); break; }
❌ 无 break(贯穿)
switch(n) { case 1: puts("一"); case 2: puts("二"); case 3: puts("三"); }
❓ 5. 条件运算符(三目运算符)
语法形式
表达式1 ? 表达式2 : 表达式3
等价于:
if (表达式1) 表达式2; /* 为真时的值 */ else 表达式3; /* 为假时的值 */
优先级:右结合,仅次于赋值运算符,常用于简化简单的 if-else
常见用例
/* 取最大值 */ max = (a > b) ? a : b; /* 绝对值 */ abs_x = (x >= 0) ? x : -x; /* 奇偶判断 */ printf((n%2==0) ? "偶数" : "奇数"); /* 嵌套(不推荐) */ grade = (s>=90)?'A':(s>=60)?'B':'C';
🎮 交互式:条件表达式计算器
🧪 6. 综合练习:年份与月份判断
判断闰年
/* 闰年条件: 能被4整除但不能被100整除, 或者能被400整除 */ if ((year%4==0 && year%100!=0) || year%400==0) printf("%d是闰年\n", year); else printf("%d是平年\n", year);
switch 查月份天数
switch (month) { case 1:case 3:case 5: case 7:case 8:case 10: case 12: days = 31; break; case 4:case 6: case 9:case 11: days = 30; break; case 2: days = leap ? 29 : 28; }
/