【小知识】黑白分明的计算机世界——关系表达式,逻辑表达式和三目运算符

1.逻辑变量

    在现实世界中,有些事情是不能直接分辨真假的。但计算机中的真假是黑白分明的。

    在C++中,用0来表示false,即假。用非零数(通常为1)来表示true,即真。用bool类型的变量来储存真和假的信息。比如:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){ 
    bool flag=true;//创建一个逻辑变量flag,并将其初始化为true
    printf("%d\n",flag);//可以将逻辑变量看成整数来使用
    flag=0;//可以直接用0和1来代替true和false
    printf("%d\n",flag);
    int i=10+flag;
    printf("%d\n",i);//flag也可以当做整数参与运算
    return 0;
}

输出:

1
0
10

2.关系表达式和逻辑表达式

2.1.关系表达式

2.1.1.例题——a和b的关系

输入两个数a和b,我们想知道:
1)a是否小于b
2)b是否大于等于a
3)a是否等于0
输出0和1即可。

想要解决这个问题,我们首先要知道常见的关系表达式

符号读作作用
>大于左边的数大于右边的数就返回真,否则返回假。
<小于左边的数小于右边的数就返回真,否则返回假。
==(不是=)等于两边的数相等就返回真,否则返回假。
>=大于等于左边的数大于或等于右边的数就返回真,否则返回假。
<=小于等于左边的数小于或等于右边的数就返回真,否则返回假。

程序示例:

#include<iostream>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    cout<<(a<b)<<endl;
    cout<<(b>=a)<<endl;
    cout<<(a==0)<<endl;
    return 0;
}

注意:没有括号会报错。

2.1.2.浮点数精度误差

    计算机在储存浮点数的时候,一般都会有精度误差。所以一般不用 == 来判断两个浮点数是否相等。
    正确的方式:比较这两个数的差值是否小于一定程度
    比如:假设 fabs(a-b)<1e-6 成立,就可以认为浮点数 a 和 b 相等。
程序示例:

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    double a,b;
    cin>>a>>b;
    bool p=fabs(a-b)<1e-6;//将表达式的返回值当做初始值赋给p
    cout<<p;
    return 0;
}

注意:这个差值要根据实际情况而定。

2.2.逻辑表达式

2.2.1.常见的逻辑运算符

    逻辑表达式,就是把多个条件复合成一个条件进行判断。
    常见的逻辑运算符有以下几个。

逻辑与:a&&b。当两边条件同时为真时返回1,否则返回0。
逻辑或:a||b。当两边条件有一个以上为真时返回1,否则返回0。
异或:a^b。当两边条件只有一个为真时返回1,否则返回0。
逻辑非:!a。当a为假时返回1,否则返回0。

具体0-1真值如下:

逻辑与&&

左值右值经过与运算之后的结果
000
010
100
111

逻辑或||

左值右值经过或运算之后的结果
000
011
101
111

异或^

左值右值经过异或运算之后的结果
000
011
101
110

逻辑非!

经过非运算之后的结果
01
10

2.2.2.优先级

优先级列表(从高到低,即第一个最高,接下来的优先级依次递减)

符号
( 、) (左右括号)
!、- (负号)、 ++、 – (现在还没学,不用着急,先记住)
*、 /、 %
+、 -(加减运算)
<<、 >>(左右位移)(跟上面的一样,现在还没学,先记住)
<、 >、 <=、 >=
==、!=
逻辑与(&&)
逻辑或(表格里打不出来)

例题:数的性质 - 洛谷

2.2.3.注意事项

2.2.3.1.在写逻辑表达式的时候,一般会用括号括起来,这样就能显得主次分明。
2.2.3.2.【新手必看】==千万不要打成=。这是99%新手都会犯的错误。
2.2.3.3.严格来说异或^是位运算符,但经常用来做逻辑运算,这里就一起讲了。

2.3.数的性质

2.3.1.题目描述

一些整数可能拥有以下的性质:

  • 性质 1:是偶数;
  • 性质 2:大于 4 4 4 且不大于 12 12 12

小 A 喜欢这两个性质同时成立的整数;Uim 喜欢这至少符合其中一种性质的整数;小 B 喜欢刚好有符合其中一个性质的整数;正妹喜欢不符合这两个性质的整数。现在给出一个整数 x x x,请问他们是否喜欢这个整数?

2.3.2.输入格式

输入一个整数 x ( 0 ≤ x ≤ 1000 ) x(0\le x \le 1000) x(0x1000)

2.3.3.输出格式

输出这 4 4 4 个人是否喜欢这个数字,如果喜欢则输出 1,否则输出 0,用空格分隔。输出顺序为:小 A、Uim、小 B、正妹。

2.3.4.样例 #1

2.3.4.1.样例输入 #1
12
2.3.4.2样例输出 #1
1 1 0 0

程序示例:

#include<iostream>
using namespace std;
int main(){
    int x;
    cin>>x;
    bool p1= x%2==0;//x是否符合性质1
    bool p2= x>4&&x<=12;//x是否符合性质2
    cout<<(p1&&p2)<<" ";//两种情况都符合就输出1
    cout<<(p1||p2)<<" ";//至少有一种情况符合就输出1
    cout<<(p1^p2)<<" ";//只有一种情况符合就输出1
    cout<<(!p1&&!p2)<<" ";//两种情况都不符合就输出1
    return 0;
}

3.三目运算符

    三目运算符又被称为问号表达式。是C++中唯一一个具有三个操作对象的运算符。其基本语法如下:
(p1)? p2 :p3;//空格和括号不一定要打
例如:
实现一功能,输入一整数x,求它是否是偶数。是就输出"even",否则输出"odd"。

代码示例:

#include<iostream>
using namespace std;
int main(){
    int x;
    cin>>x;
    x%2==0?cout<<"even":cout<<"odd";
    cout<<endl;
    //不可以采用cout<<(x%2==0)?"even":"odd";这种写法。不然会直接输出x%2==0的结果。
    return 0;
}

喜欢就订阅此专辑吧!

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值