(八十三)逻辑表达式

逻辑表达式的核心是 逻辑运算符

 

逻辑运算符有三个:

①“||”,注意,没有双引号,意思是 or 。在||左右两边的表达式,只要有一个成立,那么这个逻辑表达式的值就是true。只有两个都不成立,才是false;

 

②“&&”,同样没有双引号,意思是 and。在&&左右两边的表达式,只要有至少一个不成立,就是false,只有两个都成立,才是true;

 

③“!”,没有双引号,意思是 not。例如,“==”是等于,而“!=”是不等于(not 等于)。

 

上代码:

#include<iostream>

int main()
{
	using namespace std;
	int a = 1;int b = 11;
	if (a > 1 || b > 12) { cout << "a > 1 || b > 12" << endl; }
	if (a > 1 || b > 10) { cout << "a > 1 || b > 10" << endl; }
	if (a > 0 || b > 12) { cout << "a > 0 || b > 12" << endl; }
	if (a > 0 || b > 10) { cout << "a > 0 || b > 10" << endl; }

	if (a > 1 && b > 12) { cout << "a > 1 && b > 12" << endl; }
	if (a > 1 && b > 10) { cout << "a > 1 && b > 10" << endl; }
	if (a > 0 && b > 12) { cout << "a > 0 && b > 12" << endl; }
	if (a > 0 && b > 10) { cout << "a > 0 && b > 10" << endl; }

	if (!(a > 1 && b > 12)) { cout << "!(a > 1 && b > 12)" << endl; }
	if (!(a > 1 && b > 10)) { cout << "!(a > 1 && b > 10)" << endl; }
	if (!(a > 0 && b > 12)) { cout << "!(a > 0 && b > 12)" << endl; }
	if (!(a > 0 && b > 10)) { cout << "!(a > 0 && b > 10)" << endl; }
	system("pause");
	return 0;

}

输出:

a > 1 || b > 10
a > 0 || b > 12
a > 0 || b > 10
a > 0 && b > 10
!(a > 1 && b > 12)
!(a > 1 && b > 10)
!(a > 0 && b > 12)
请按任意键继续. . .

结论:

①从代码中可以看出,在第一部分“||”的四个代码中,前3个至少有一个成立,于是输出了结果;

 

②在第二部分的“&&”四个代码中,只有最后一个两个都成立的,才输出了结果;

 

③在第三部分加了“!”的“&&”四个代码中,我们发现,原本不成立的,输出了结果,原本成立的,反而不能输出结果,这就是not作用。

 

 

 

小技巧:

①表示范围:用&&,

例如10<a<20,用a>10&&a<20;

也可以用于判断字符,代码:

#include<iostream>

int main()
{
	using namespace std;
	char a;
	cin >> a;
	if (a >= 'a'&&a <= 'z') { cout << "你输入的在a~z之间。"; }
	else if (a >= 'A'&&a <= 'Z') { cout << "你输入的在A~Z之间。"; }
	else if (a >= '0' && a <= '9') { cout << "你输入的是0~9之间的一个数。"; }	//之所以用'0',是因为数字0的ASCII值不是0
	else { cout << "恕我实在不知道你输入的是什么。" << endl; }
	system("pause");
	return 0;

}

当输入小写字母,则输出第一句;

输入大写字母,则输出第二句;

输入数字(注意,若代码中不是判断0~9,那么判断的是输入的第一个数字),则输出第三句;

输入其他,则输出第四句。

 

②若是输入大小写字母都可以,使用“||”,如代码:

#include<iostream>

int main()
{
	char a;

	for (int i = 1;i < 5;i++)
	{
		std::cout << "请输入你的性别:\nA.男\nB.女\n";
		std::cin >> a;
		if ('a' == a || 'A' == a) { std::cout << "你的性别是:男。"; }
		if ('b' == a || 'B' == a) { std::cout << "你的性别是:女。"; }
		std::cout << "\n\n";
	}

	system("pause");
	return 0;
}

输出:

请输入你的性别:
A.男
B.女
a
你的性别是:男。

请输入你的性别:
A.男
B.女
A
你的性别是:男。

请输入你的性别:
A.男
B.女
b
你的性别是:女。

请输入你的性别:
A.男
B.女
B
你的性别是:女。

请按任意键继续. . .

循环4遍是为了测试四种输入都可以。假如输入除了a、b、A、B之外的,将无输出,自动进入下一遍循环。

 

 

③注意不要使用10<a<20;这样的语法,他的作用是先判断:

10<a=》假如a=11,那么10<a是真=》然后表达式值为1,值1的确小于20=》于是这个表达式值为true。

看起没问题,那么假如a=30,30显然不在10~20之间的范围内。

同样带入,方法相同,输出的还是true,肯定是不对的。

int i = 30;

if (10 < i < 20) { cout << "10<i<20"<<endl; }

是能输出结果10<i<20的。

 

④代码,判断输入的值是否超出类型限定范围:

#include<iostream>
#include<climits>
using namespace std;
bool max(double);	//至少要用一个比int类型范围大的,因为测试的是int类型,假如比int类型范围小,那么无论如何,不可能出界了。
//bool类型是因为只需要返回结果是1或者0,也可以用int,然后在函数内部,return 1或者0.

int main()
{
	double b;	//同上面解释,要比int范围大,比如LL,但LL的问题是,输入的数值也可能超出他的范围,所以double相对靠谱点
	cout << "请输入一个数值:" ;
	cin >> b;
	for (;max(b) != 1;)	//
	{
		cin >> b;
	}
	cout << "你输入的数值符合要求,是:" << b << endl;
	system("pause");
	return 0;
}

bool max(double a)
{
	if (a<INT_MIN || a>INT_MAX)	//比最大大或者比最小小。返回值0(给main函数的for),要求继续输入
	{
		cout << "你输入的值过大或者过小了,请重新输入:" ;
		return 0;	//也可以返回false,但总之要上下呼应
	}
	else return 1;	//不满足,那么肯定就是在范围内了,让返回1,破for循环。
	//也可以用a>INT_MIN && a<INT_MAX 效果其实是一样的,调整返回值即可。
}

输出:

请输入一个数值:12345678911
你输入的值过大或者过小了,请重新输入:1234567891
你输入的数值符合要求,是:1.23457e+09
请按任意键继续. . .

效果看注释。原则是,输入后,判断一次,超范围,返回继续循环,不超范围,离开循环,执行下面的。

 

 

⑤运算符优先级:

“||”和“&&”的优先级,比较低,至少低于关系运算符,例如<、>、==等。

即:a<1 || a>5 表示的意思是a比1小或者比5大。

“&&”同“||”

 

但是“!”的优先级很高,超过关系运算符,也超过||和&&

例如:!a<1 || a>5 ,这行代码的意思不是!(a<1 || a>5),而是(!a)>1 || a>5,因为比如a是1,!a是false,比如a是0,则!a是true,

代码:

#include<iostream>
using namespace std;

int main()
{
	int a = -1;
	cout << "a = -1" << endl;
	if (a < 1 || a>5) { cout << "a < 1 || a>5" << endl; }	//实质上是 a<1 或 a>5
	if (!a < 1 || a>5) { cout << "!a < 1 || a>5" << endl; }	//实质上是 (!a)<1 ===也就是false <1,或 a>5,前者成立,返回是true
	if (!(a < 1 || a>5)) { cout << "!(!a < 1 || a>5)" << endl; }	//实质上是a<1或a>5,因为是true,所以输出false
	system("pause");
	return 0;
}

输出:

a = -1
a < 1 || a>5
!a < 1 || a>5
请按任意键继续. . .

注意:

假如!a:

如果a是0,被!认为是false,反转后是true(1);

如果a是1,被认为是true,反转后是false(0);

然后再计算!a< b:

假如b是2,那么无论如何,表达式结果true,

如果b是0,那么无论如何,表达式结果是false;

假如b是1,那么当a=1时,结果是true;a=0为false。

即!1<1是true,!0<1是false

 

 

⑥运算符的替代:

“||”可以用“or”替代;

“&&”可以用“and”替代;

“!”可以用“not”替代;

如代码:

#include<iostream>
#include<iso646.h>	//按照教程说明,只有c语言需要这个头文件,但是C++不需要啊。但实际上如果不加这个,会提示错误

int main()
{
	using namespace std;
	int a = 2;
	cout << "a = 2" << endl;
	if (a > 1 and a < 3) { cout << "a>1 and a<3" << endl; }
	if (a < 5 or a>10) { cout << "a < 5 or a>10" << endl; }
	if (not(a < 1 and a>3)) { cout << "not(a < 1 and a>3)" << endl; }
	system("pause");
	return 0;
}

输出:

a = 2
a>1 and a<3
a < 5 or a>10
not(a < 1 and a>3)
请按任意键继续. . .

奇怪之处:按照教程说,C++无需头文件,但是,若不加这个头文件,那么就无法正常使用and 、or和not了。

时间: 2024-07-28 17:44:57

(八十三)逻辑表达式的相关文章

导演王天林去世享年八十三岁儿子王晶发表声明

导演王天林 王晶和父亲王天林 新浪娱乐讯 2010年11月16日晚,著名导演王天林去世,儿子王晶发表声明,宣布父亲离世的消息:我们敬爱的父亲王天林,今晚(十一月十六日晚)八时二十分,于香港浸会医院,因身体机能衰退,与世长辞,享年八十三岁,父亲临终时,各子女均侍候在旁,送他安然离去.治丧详情,日后公布. 王天林 浙江绍兴人,生于上海.17岁到香港,1947年由叔父王鹏翼引进影坛,先后做过冲印.录音.场记.助导等工作.1950年正式任导演,处女作<峨嵋飞剑侠>,成名作<桃花江>.195

windows常用 API函数

系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时

windows常用API函数

系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时

Unity全面的面试题(包含答案)

这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么错误,(包括错别字和知识点),或者发现哪里描述的不清晰,请在下面留言,我会重新更新,希望大家共同来帮助开发者 一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中的碰撞器和触发器的区别? 碰撞器是触发器的载体,而触发器只是碰撞器身上的一个

强大的语言

我越来越感慨语言之美,语言之强大.  这里的语言,是一个比较广的概念,既可以是中文,英文这类自然语言,也可以是C,C#,Python,Lisp这类通用语言,也可能是自己定义的领域特定语言(DSL).更广泛的可以是音乐和DNA序列. 语言就是字符串,一组由不同字符串组成的顺序链条.然而,大巧不工,越朴素简单的模式,其能力就越强大. 语言代表了知识: E=mc2 语言代表了美感: "人生若只如初见,何事秋风悲画扇" 语言代表了力量:"尔曹身与名俱灭,不废江河万古流" 语

中华人民共和国安全生产法

中华人民共和国主席令第70号 <中华人民共和国安全生产法>已由中华人民共和国第九届全国人民代表大会常务委员会第二十八次会议于2002年6月29日通过,现予公布,自2002年11月1日起施行. 中华人民共和国主席 江泽民 2002年6月29日 中华人民共和国安全生产法 第一章 总 则 第一条 为了加强安全生产监督管理,防止和减少生产安全事故,保障人民群众生命和财产安全,促进经济发展,制定本法. 第二条 在中华人民共和国领域内从事生产经营活动的单位(以下统称生产经营单位)的安全生产,适用本法:有关

澳大利亚网络安全战略截至目前几乎未能取得任何进展

6月2日讯 自去年四月澳大利亚发布网络安全战略以来,该国政府在绝大多数倡议的执行力度相当糟糕.根据最新一项调查结果显示,总计投入金额达到2.3亿美元的计划的八十三项举措当中,竟然只有四项得到确切落实. <澳大利亚网络安全战略>为澳大利亚未来4年(至2020年)确立了针对网络安全行动的五个主题:全国性的网络合作.稳固的网络防御能力.全球性责任及影响.发展与创新.网络智能国家.同时该战略旨在促进政府及各企业更好地推进威胁情报共享. 澳网络安全战略落实广受诟病 澳政府公布数据与智库机构报告结论有差异

在现在交通事故当中,重型车肇事的死亡率是最高的

每晚十一点半,七张面孔给你一个不睡的理由,这里是"主持人时间带",今天是"柴静时间".两个月前我收到一封卡车司机的来信,在信里面他说,如果你在路上遇到东风天龙卡车,麻烦您,尽量一定要避开,因为我们很可能控制不了自己的刹车,在信里面他说,你一定知道,在现在交通事故当中,重型车肇事的死亡率是最高的,但你可能听说的更多的是司机的人为原因,超速,超载,违章,但有一个因素被很多人忽略了,那就是机械故障,刹车失灵.收到这 封信之后,我们联系这位司机,开始调查. 1. 问题到底有

中华人民共和国的行政许可法

中华人民共和国行政许可法中华人民共和国主席令第7号 <中华人民共和国行政许可法>已由中华人民共和国第十届全国人民代表大会常务委员会第四次会议于2003年8月27日通过,现予公布,自2004年7月1日起施行.中华人民共和国主席 胡锦涛二○○三年八月二十七日中华人民共和国行政许可法 第一章 总则 第一条 为了规范行政许可的设定和实施,保护公民.法人和其他组织的合法权益,维护公共利益和社会秩序,保障和监督行政机关有效实施行政管理,根据宪法,制定本法. 第二条 本法所称行政许可,是指行政机关根据公民.