主要内容 #
1. 再看 else #
小练习:
请补全下面的程序,判断一个数是否是负数。
如果是,则输出“是负数”。否则不做处理。
// 请补全 #include < iostream > using namespace std; int main() { int input(0); cout << "请输入一个整数" << endl; cin >> input; if(input >= 0) { } else { } return 0; }
示例程序:
#include < iostream > using namespace std; int main() { int input(0); cout << "请输入一个整数" << endl; cin >> input; if(input >= 0) { } else { cout << "是负数" << endl; } return 0; }
2. 逻辑关系“非”:取反(取和表达式相反的值) #
我们来详细看一下上面的 if 结构。
if(input >= 0) // 条件 1 { } else { out << "是负数" << endl; // 语句 X }
请问:(选择题)
如果,我们希望执行“语句 X”,“条件表达式 1 ” 应该如何?
这里,应该是选择B;
还记得我们在数学中,怎么表达这样的关系吗?
上面的关系,在数学中被称为: 逻辑关系“非”。
input | -1 | 1 |
不等式是否成立 | 成立 | 不成立 |
其实,逻辑关系“非”非常容易理解,甚至还有点哲学的味道。
一些通俗的解释:
3. 逻辑关系表达式 #
3.1 “!”符号 #
上面的数学不等式,在 C++ 可以表达为:
!(input >= 0) // 这里的 括号 不能缺少。
上面的关系,可以再写作:
bool is_ok; is_ok = !(input >= 0); is_ok = !(is_ok); // 如果是变量,可以省略括号 is_ok = !is_ok; // 如果是变量,可以省略括号 is_ok = !true; // 如果是 bool 值,可以省略括号 is_ok = !0; // 如果是 bool 值,可以省略括号
“逻辑关系表达式”的取值说明:
bool is_ok = !(条件表达式 1)
条件表达式 1 | is_ok |
true | false |
false | true |
3.2 取反“关系表达式” #
在上面的代码中,你一定发现了,我们还可以这样来改写;
if(input >= 0) // 条件 1 { } else { out << "是负数" << endl; // 语句 X }
等价于下面的写法
if(input < 0) // 条件 2 { out << "是负数" << endl; // 语句 X }
请仔细分析以一下,条件 1 和 条件 2 的逻辑关系。
!(input >= 0) <== 等价于 ==> (input < 0)
很显然,这个逻辑是成立的。
我们来看一些例子:
!(input >= 0) <== 等价于 ==> (input < 0) !(input > 0) <== 等价于 ==> (input <= 0) !(input == 0) <== 等价于 ==> (input != 0) !(input <= 0) <== 等价于 ==> (input > 0) !(input < 0) <== 等价于 ==> (input >= 0) !(true ) <== 等价于 ==> (false ) !(false ) <== 等价于 ==> (true )
在这之中,还有一些更复杂的变换,我们将在下节说明。至此,请务必掌握这里列出的所有变换。