上一课标准答案:
a = 7b = 7result = truea = 5;是把 5 存进a;a == 5是判断a是否等于 5。
最重要的一点还是:
=
是赋值,
==
是判断是否相等。
第 4 课:if / else ------ 让程序自己做决定
前面的程序基本都是:
从上往下,一行一行执行。
例如:
int a = 5;
a = a + 1;
std::cout << a << std::endl;
电脑没有任何选择。
但真实机器人肯定不是这样的。
机器人会需要:
如果前面有障碍物,就停止。
如果已经到达目标,就停止运动。
如果电机报错,就报警。
如果夹爪已经闭合,就不要继续夹。
这种"如果......那么......"就是今天的重点。
1. 什么是 if
先看最简单的:
if (条件)
{
条件成立时执行的代码
}
其中:
if
就是英文:
如果。
所以你可以直接把它读成:
如果(条件成立)
{
执行这里
}
2. 一个最简单的例子
int a = 5;
if (a == 5)
{
std::cout << 100 << std::endl;
}
我们一步一步看。
首先:
int a = 5;
此时:
a = 5
然后:
if (a == 5)
先判断:
a 是否等于 5?
因为:
a = 5
所以:
a == 5
结果是:
true
条件成立。
因此进入:
{
std::cout << 100 << std::endl;
}
最终输出:
100
3. 如果条件不成立呢?
看:
int a = 3;
if (a == 5)
{
std::cout << 100 << std::endl;
}
现在判断:
a == 5
也就是:
3 == 5
结果:
false
于是:
{
std::cout << 100 << std::endl;
}
整块代码直接跳过。
所以这个程序不会输出 100。
可以画成:
a == 5 ?
/ \
true false
│ │
▼ ▼
执行代码 跳过
这就是程序第一次真正出现"分路"。
4. if 里面为什么又有 {}
你之前已经学过:
{
}
表示划出一块代码区域。
所以:
if (a == 5)
{
int b = 10;
std::cout << b << std::endl;
}
意思是:
如果
a == 5成立,那么执行花括号里的这一整块代码。
不是只执行第一句。
5. 机器人例子
假设机械臂关节目标角度是:
double target = 50.0;
当前角度:
double current = 50.0;
我们可以判断:
if (current == target)
{
std::cout << "Target reached" << std::endl;
}
先不用管:
"Target reached"
为什么用了双引号。
你现在只把它理解成:
输出一段文字。
程序逻辑就是:
current 是否等于 target?
│
是
│
▼
输出 Target reached
这已经开始接近真实机器人控制逻辑了。
6. else 是什么?
现在出现另一个重要词:
else
意思是:
否则。
基本结构:
if (条件)
{
条件成立时执行
}
else
{
条件不成立时执行
}
翻译成中文:
如果条件成立:
做 A
否则:
做 B
7. 例子
int a = 10;
if (a == 5)
{
std::cout << 1 << std::endl;
}
else
{
std::cout << 2 << std::endl;
}
判断:
a == 5
实际上:
10 == 5
所以:
false
因此:
if
里面不执行。
程序进入:
else
最终输出:
2
8. 可以把它想成岔路口
条件
│
┌─────┴─────┐
│ │
true false
│ │
▼ ▼
if 里面 else 里面
一定注意:
if / else只会走其中一条路。
不会两边都执行。
9. 再看一个机器人例子
bool motor_error = true;
if (motor_error == true)
{
std::cout << "Stop motor" << std::endl;
}
else
{
std::cout << "Motor running" << std::endl;
}
因为:
motor_error = true;
所以判断:
motor_error == true
成立。
于是输出:
Stop motor
10. bool 还有更简单的写法
刚才写的是:
if (motor_error == true)
实际上以后经常直接写:
if (motor_error)
因为 motor_error 本身就是:
bool
它里面已经是:
true
或者:
false
所以:
if (motor_error)
就相当于问:
motor_error是不是true?
例如:
bool motor_error = true;
if (motor_error)
{
std::cout << "Error" << std::endl;
}
会输出:
Error
不过你现在刚开始学,可以暂时先写:
if (motor_error == true)
等你熟悉以后再简化。
11. 新的比较符号:> 和 <
只会:
==
还不够。
真实程序经常需要判断:
大于、小于。
例如:
int temperature = 80;
判断:
if (temperature > 70)
这里:
>
表示:
大于。
因为:
80 > 70
成立,所以进入 if。
<
<
表示:
小于。
例如:
double distance = 0.05;
if (distance < 0.1)
{
std::cout << "Very close" << std::endl;
}
因为:
0.05 < 0.1
成立。
所以输出:
Very close
这已经很像机器人视觉或者避障了。
比如:
物体距离 < 10 cm
就停止机械臂。
12. 再认识两个:>= 和 <=
>=
表示:
大于或等于。
例如:
age >= 18
表示:
age 大于或者等于 18。
<=
表示:
小于或等于。
例如:
distance <= 0.1
表示:
距离小于或等于 0.1。
所以比较运算符目前可以整理成:
== 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
还有一个很重要的,我们马上学。
13. !=:不等于
!=
表示:
不等于。
例如:
int state = 1;
if (state != 0)
{
std::cout << "Robot active" << std::endl;
}
判断:
1 != 0
成立。
所以输出:
Robot active
你可以把:
!=
理解成:
"不是等于"。
其中:
!
以后你会发现经常和"否定"有关。
14. 六个比较运算符先记住
现在整理:
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
它们的计算结果全部都是:
true
或者:
false
也就是说:
比较运算最终产生的是
bool。
例如:
5 > 3
结果:
true
5 < 3
结果:
false
5 == 5
结果:
true
5 != 5
结果:
false
15. 一个完整机械臂例子
假设我们设置一个简单的角度限制。
#include <iostream>
int main()
{
double angle = 95.0;
if (angle > 90.0)
{
std::cout << "Angle too large" << std::endl;
}
else
{
std::cout << "Angle OK" << std::endl;
}
return 0;
}
逐步执行。
首先:
double angle = 95.0;
所以:
angle = 95
然后:
if (angle > 90.0)
也就是:
95 > 90
结果:
true
所以执行:
std::cout << "Angle too large" << std::endl;
输出:
Angle too large
而:
else
里面的内容不会执行。
16. 这已经是"安全判断"的雏形
以后你的机械臂代码可能会有:
if (angle > max_angle)
{
stopMotor();
}
可以翻译成:
如果关节角度超过最大允许角度,就停止电机。
或者:
if (distance < safe_distance)
{
stopRobot();
}
意思是:
如果距离小于安全距离,就停止机器人。
所以你现在学的 if,绝对不是"为了学语法"。
它以后直接就是:
机器人安全逻辑、状态判断和控制逻辑的基础。
17. 现在看一段程序,你应该能自己推演
int speed = 80;
if (speed > 100)
{
std::cout << 1 << std::endl;
}
else
{
std::cout << 2 << std::endl;
}
电脑先判断:
80 > 100?
答案:
false
于是走:
else
最终:
输出 2
本课小练习
第 1 题
int a = 10;
if (a > 5)
{
std::cout << 1 << std::endl;
}
else
{
std::cout << 2 << std::endl;
}
输出什么?
第 2 题
int state = 2;
if (state == 1)
{
std::cout << 10 << std::endl;
}
else
{
std::cout << 20 << std::endl;
}
输出什么?
第 3 题
下面:
a != 5
是什么意思?
第 4 题
假设:
double distance = 0.08;
我们希望:
当距离小于
0.1时进入if
应该写:
if ( __________ )
{
}