模块二 · 流程与数据 / 第 06 课
06 · if / else 分支
学习目标
- 会写单分支和双分支
- 会写多条件 else if
- 养成「总是加大括号」的习惯
基本形态
#include <stdio.h>
int main(void)
{
int score = 85;
if (score >= 60)
{
printf("及格\n");
}
else
{
printf("不及格\n");
}
return 0;
}
多分支
#include <stdio.h>
int main(void)
{
int score = 78;
if (score >= 90)
{
printf("优秀\n");
}
else if (score >= 60)
{
printf("及格\n");
}
else
{
printf("不及格\n");
}
return 0;
}
为什么要加大括号
if 不写大括号时只控制下一条语句。以后一改代码就容易出错。工程上几乎总是写:
if (ok)
{
step1();
step2(); // 以后加进来也安全
}
从键盘读入再判断
真实程序很少把分数写死。用 scanf 读入:
#include <stdio.h>
int main(void)
{
int score;
printf("请输入分数: ");
scanf("%d", &score); /* 注意:要写 &score,表示“写到这个盒子” */
if (score >= 60)
{
printf("及格\n");
}
else
{
printf("不及格\n");
}
return 0;
}
嵌套 if
条件里还可以再套条件。先想清楚「先判断谁」更合理:
#include <stdio.h>
int main(void)
{
int has_ticket = 1;
int age = 12;
if (has_ticket)
{
if (age >= 18)
{
printf("全票\n");
}
else
{
printf("半票\n");
}
}
else
{
printf("无票\n");
}
return 0;
}
易错点
三个高频错误
- 把
==写成= - 条件忘加小括号:
if score >= 60非法 - 浮点数别用
==直接比:有精度误差,可比较差值是否小于很小的数
单片机场景 · if:温控输出完整赋值
温度决定风扇与加热器状态。每次给两个输出赋值,避免上一次状态残留。
边界与验证:普通变量逻辑示例,不直接驱动 GPIO。调用时传入两个有效变量的地址。原文部分分支未重置另一输出,此处已修正。真实温控还需故障保护和回差。
void control(int temp, unsigned char *fan,
unsigned char *heater)
{
*fan = 0;
*heater = 0;
if (temp > 30) {
*fan = 1;
} else if (temp <= 20) {
*heater = 1;
}
}
本课过关
必做score=75,执行 if(score>=90) A; else if(score>=60) B; else C; 会执行?
逐步解析
else if 不会「每个都执行」,而是从上往下找第一个条件为真的分支,执行完就整段结束。score=75:先比 75>=90?假,跳过 A;再比 75>=60?真,执行 B;后面的 else C 被跳过。所以输出是 B 对应的内容。若改成 score=95,则 A 为真,B/C 都不会执行。若 score=50,则前两个都假,走 else C。
必做作业
- 输入温度 t:t>30 打印「热」,t<10 打印「冷」,否则「舒适」。
- 写判断:既是偶数又大于 10。
- 改错:if score >= 60 printf("ok");
先自己写完,再点开看解答
1:
int t;
scanf("%d", &t);
if (t > 30) printf("热\n");
else if (t < 10) printf("冷\n");
else printf("舒适\n");2:if (n % 2 == 0 && n > 10)
3:条件必须加括号:if (score >= 60) { ... }
学完去哪
下一课:选项很多时用 switch。