VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1094|回复: 8

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

[复制链接]
Syc 发表于 2017-9-7 00:39:50 | 显示全部楼层 |阅读模式


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++中的三个逻辑运算符的优先级是怎么样的顺序呢?http://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课免费试看,下载地址稍后奉上!

#######################################################
获得所有教学视频、课件、源代码以及售后答疑详见:
《实用C++》:http://www.cctry.com/thread-275996-1-1.html
VC驿站官方客服QQ:8260671

#######################################################

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

wssfcn 发表于 2017-9-7 09:35:44 | 显示全部楼层
三目运算符

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

csa 发表于 2017-9-7 09:49:37 | 显示全部楼层
期待中,谢谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

SummerGull 发表于 2017-9-7 21:08:08 | 显示全部楼层
学习了,谢谢大佬分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

Mtong 发表于 2017-9-11 20:04:35 | 显示全部楼层
起学习 一起进步。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

lm68140318 发表于 2017-9-13 09:21:54 | 显示全部楼层
期待老师的课程早日发布

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

ydyxqin 发表于 2017-9-15 20:53:08 | 显示全部楼层
看看。。。。。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

zhougcs123 发表于 2017-9-26 21:52:33 | 显示全部楼层
感谢有你

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站

本版积分规则

展开

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )

返回顶部
x

VC驿站微信公众号cctry2009

GMT+8, 2017-10-18 04:45

Powered by Discuz!

© 2009-2017 cctry.com

快速回复 返回顶部 返回列表