《实用C++》第11课:if 语句实现逻辑运算与冒号表达式

本文转载自:VC驿站

https://www.cctry.com/thread-279233-1-1.html

1、逻辑运算概述:
为什么会有逻辑运算呢?举个例子,上节课的一段小代码:
int zhangsan_age = 0, zhangsan_sex = 0;
cin >> zhangsan_age >> zhangsan_sex;

if (zhangsan_age < 18)
{
        if (zhangsan_sex == 1)
        {
                cout << "张三是个男孩" << endl;
        }
}

即:要求年龄在 18 岁以下,性别是男性,两个条件都满足的前提下,才进行打印:张三是个男孩
又或者,我让你用 if 进行这个判断,判断 zhangsan_age 年龄在 1-18岁之间,看是否满足条件?怎么判断呢?
可以这样:
if (zhangsan_age >= 1)
{
        if (zhangsan_sex <= 18)
        {
                cout << "张三是个男孩" << endl;
        }
}

这样写很是麻烦,而且会嵌套了好几层,有没有更简便的写法呢?当然有了,就是使用逻辑运算符:
if (zhangsan_age >= 1 && zhangsan_sex <= 18)
{
        cout << "张三是个男孩" << endl;
}

简单吧?一个 if 就搞定了。

2、C++中提供了三种逻辑运算符:
①、&& 逻辑与 相当于其他语言中的 AND
②、||  逻辑或 相当于其他语言中的 OR
③、!   逻辑非 相当于其他语言中的 NOT

3、逻辑运算符的运算规则:a 和 b 是表达式
a && b 若 a 和 b 同时为真,a && b 的结果为真,只要有一个为假,则 a && b 的结果为假
a || b  若 a 或 b 其一为真,a || b 的结果为真,若 a 和 b 同时为假,则 a || b 的结果为假
!a       若 a 为真,则 !a 为假,若 a 为假,则 !a 的结果为真

int zhangsan_age = 0;
cin >> zhangsan_age;

if (zhangsan_age < 14 || zhangsan_age > 60)
{
        cout << "张三是个小孩或者老人,不能欺负他" << endl;
}

备注:咱们上面说了这么多真和假,一般逻辑表达式的值是一个逻辑的量 “真” 或 “假”。那么反应到我们程序代码中得到运算结果时,以数值 1 代表 “真”,数值 0 代表 “假”。一般更宽泛的做法是:数值 0 代表 “假”,非0都代表 “真”。

举几个例子:
若 int x = 5; 则 !x 的值就是0,因为 x 的值是5,非0,所以是真,!x 就是假了,也就是0了;
若 int x = 5, y = 4; 那么 x && y 的结果就是真,int z = x && y; 你会发现 z 的值是1;
若 int x = 5, y = 4; 那么 !x || y 的结果是多少呢?到底是先算逻辑非,还是先算逻辑或呢?这就涉及到他们的运算符优先级了。大家可以找下《实用C++》第8课的课程说明文档,我当时给大家打包了一个运算符优先级的图标,大家可以查一下C++中的三个逻辑运算符的优先级是怎么样的顺序呢?https://www.cctry.com/thread-278817-1-1.html

4、逻辑运算符的优先级:算是本节课的小作业,大家课后完成!

5、冒号表达式:
冒号表达式又叫条件表达式,是唯一一个三目运算符,就是需要三个参数的运算符。先举个 if 语句的例子,求出 变量 x 和 y 的最大值,并打印出来:
int max = 0;
int x = 0, y = 0;
cin >> x >> y;
if (x > y)
{
        max = x;
}
else
{
        max = y;
}

cout << "最大数是:" << max << endl;

求 x 和 y 中的较大数,我用了一个 if-else,那么有没有简单一点的方法呢?答案是当然有,就是要讲解的这个冒号表达式:
max = x > y ? x : y;
就这么一句话,就可以将 x 和 y 中较大的数的值赋值给 max 变量,怎么样,方便吧?

6、冒号表达式的规则:
表达式1 ? 表达式2 : 表达式3
若表达式1为真,则返回表达式2的值,若表达式1为假,则返回表达式3的值。如此而已!

第11课视频教程下载地址:

https://www.cctry.com/thread-279233-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值