【小知识】黑白分明的计算机世界——关系表达式,逻辑表达式和三目运算符
- 1.逻辑变量
- 2.关系表达式和逻辑表达式
- 2.1.关系表达式
- 2.1.1.例题——a和b的关系
- 2.1.2.浮点数精度误差
- 2.2.逻辑表达式
- 2.2.1.常见的逻辑运算符
- 2.2.2.优先级
- 2.2.3.注意事项
- 2.2.3.1.在写逻辑表达式的时候,一般会用括号括起来,这样就能显得主次分明。
- 2.2.3.2.【新手必看】==千万不要打成=。这是99%新手都会犯的错误。
- 2.2.3.3.严格来说异或^是位运算符,但经常用来做逻辑运算,这里就一起讲了。
- 2.3.数的性质
- 2.3.1.题目描述
- 2.3.2.输入格式
- 2.3.3.输出格式
- 2.3.4.样例 #1
- 2.3.4.1.样例输入 #1
- 2.3.4.2样例输出 #1
- 3.三目运算符
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真值如下:
逻辑与&&
左值 | 右值 | 经过与运算之后的结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
逻辑或||
左值 | 右值 | 经过或运算之后的结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
异或^
左值 | 右值 | 经过异或运算之后的结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
逻辑非!
值 | 经过非运算之后的结果 |
---|---|
0 | 1 |
1 | 0 |
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(0≤x≤1000)
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;
}
喜欢就订阅此专辑吧!
【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。
欢迎扫码关注蓝胖子编程教育