03-Logic
03-Logic
关系运算符和逻辑运算符
概述:
到目前为止所写的程序代码都是一句接着一句执行的,但实际上大多数的决定都需要根据实际情形作判断。例如,如果X大于等于0,那么输出X的平方根。逻辑是让程序做出判断的必要条件。
逻辑学是由古希腊的亚里斯多德创立的。在他之后的两千多年里,来自世界各地的无数的哲学家、逻辑学家和数学家不断地对他的理论进行发展。现在我们说的逻辑是属于数学的一个分支,但是早期的逻辑完全和数学没有关系。直到17世纪,一些数学家才把它看成是数学的一个领域。在现代数学中,逻辑学已成为一个非常强大的工具。
通过本节的学习,我们将学会用逻辑表达式来描述生活中的逻辑问题;能够确定哪些是真,哪些是假;能把开关图与程序的逻辑表达式互相转换。
1. 布尔值: true, false
在人类知道的事物中,有些量的变化是连续的,如时间的流动;有些量的变化是非连续的,如人口的数量总是自然数,不可能有小数出现;还有些量只可能是真或假两种情况。例如,“亚马逊河是世界上最长的河流。(假)”,“1小时等于60分钟。(真)”,“实数a减去b的值大于0。(可能真也可能假,根据a和b的具体数值决定)”。
下面的例子说明了如何在程序中判断“真”和“假”。
例1:输出关系表达式的值 [上机做一遍]
设x和y为整数类型变量,那么x>y的值只可能是真(true)或假(false)。
using System;
class App1
{
static void Main()
{
int x,y; //定义x,y为整数类型变量
x=1; //把1赋给
y=2; //把2赋给y
Console.WriteLine(x>y); //输出表达式x>y的值
}
由于x的值小于y的值,所以执行x>y的值应该是“假”。运行结果如下
输出表达式x>y的值
例2.把关系表达式的值(true或者false)赋给布尔类型的变量 [上机做一遍]
using System;
class App1
{
static void Main()
{
bool b; //定义b是布尔类型变量
int x, y; //定义x,y为整数类型变量
x=1; //把1赋给
y=2; //把2赋给y
b=x>y; //把表达式x>y的值赋给b
Console.Write(b); //输出b的值
}
把关系表达式的值赋予布尔类型变量
乔治.布尔(Boole, George 1815-1864),英国著名的
数学家和逻辑学家,发展了布尔代数学.他的一生大
部分是自学成名的。1849年布尔受聘为爱尔兰考克州
皇家学院的数学教授。1854年在一次概率思想的研究
中,布尔提出了一套数学系统,就是现在有名的布尔
代数学.在布尔代数学中逻辑命题可以由抽象的符号
来代表,这样以来逻辑命题就可以通过抽象的数学操
作来执行,与概率逻辑相对应。布尔代数的提出对于早先的计算机的设计
和数学思想的研究都有很重要的作用。因此,乔治.布尔被看作是计算技
术和信息技术的奠基人之一。
2. 关系运算符
例3.6个关系表达式的判断 [上机做一遍]
假设有下面的定义:
int i = 1;
int j = 2;
int k = 2;
char c = ’2’;
char d = ‘3’;
char e = ‘2’;
下列表达式的值为true.
c==e //当两个操作数的值相等的时候==为真值
i!=k //当两个操作数的值不同的时候!=为真值
i d>e //当左侧的操作数的值大于右侧的操作数的值的时候>为真值 i<=k //当左侧的操作数的值不大于右侧的操作数的值的时候<=为真值 j>=k //当左侧的操作数的值不小于右侧的操作数的值的时候>=为真值 下列表达式的值为false . i==j //当两个操作数的值不相等的时候==为假值 c!=e //当两个操作数的值相等的时候!=为假值 j //当左侧的操作数的值小于右侧的操作数的值的时候>=为假值 3. 逻辑运算:(&&、||、!) 通过前面的学习已经知道布尔变量的值不是True 就是False 。正如实数变量可以通过加、减、乘、除符号构成表达式一样,布尔变量也有它的运算符,叫做逻辑运算符。下面将学习逻辑运算符的用法。 逻辑运算符有3个,它们是“与”、“或”、“非”。“与”运算符用“&&”表示;“或”运算符用“||”表示;“非”运算符用“!”表示。为了能形象地说明三个运算符的使用方法,这里用电路开关作为描述手段。 例1.用电路开关的闭合与断开表示布尔变量的True 和False 1937年,美国数学家克劳德.香农发现电路开关能够实现逻辑运算:当电路上有一个开关,而这个开关闭合时,电流能够通过,相当于逻辑上的“是”;开关断开时,电流不能通过,相当于逻辑上的“非”。由于布尔类型变量的值只可能是true 或者false ,所以把布尔变量看作一个开关。断开的状态是false ;闭合的状态是true 。 例2.电路开关的串联与并联表示布尔变量的“与”和“或” 当电路上串连着两个开关时,有串联和并联两种组合方式。串联时,只有p 和q 都闭合电路才导通;并联时,p 或q 的任何一个闭合电路就导通。并联用符号||表示,读作“或”;串联用符号&&表示,读作“与”。 开关的两种状态 p q 串联: p && q 并联: p || q 例3.“与”、“或”运算的规则 下表的左侧两列呈现了布尔变量p和q的所有组合。右侧两列呈现了串联和并联开关电路的值。也就是说从这张表可以知道“与”和“或”运算的规则。 例4.用电路开关表示逻辑运算符“非” 开关的断开与闭合是两种相反的状态。如果p 的值是false ,则!p 就是true 。感叹号在这里是取反符号,读作“非”。 “&&与、||或、!非”统称为逻辑运算符。 p 逻辑运算符“非”的开关图 上面的例子说明了逻辑运算符的表示方法和运算规则。请运用逻辑运算符的规则解下列例题,然后比较自己的解答过程与例题的解,看看是否正确。 例5.例题 1.假设下面的定义是有效的, bool Q1 = true; bool Q2 = true; bool Q3 = false; 那么,下面表达式的值是什么? (Q1 && Q2) || Q3 解: (1). 把变量的值代入逻辑表达式,得到( true && true ) || false。 (2). 括号内的表达式先执行,得到true || false。 (3). 所以运算结果为true。 2. 假设下面的定义是有效的 bool Q1 = true; bool Q2 = true; bool Q3 = false; 那么,下面的表达式的值是什么? ( ! (Q1 && Q2) ) || Q3 解: (1).代入布尔值,得 (!(true && true)) || false (2). (!(true))||false (3). false || false (4). false 3. 假设下面的定义是有效的, int i = 5; int j = 10; int k = 30; 那么,下面的表达式的值是什么? ( i > j ) && ( k > 10 ) 解: (1).代入变量的值,得 (5 > 10 ) && ( 30 > 10) (2). false && true (3). false 4. 逻辑运算符的优先级别 算术运算的先后顺序是先乘除后加减。逻辑运算符也有先后顺序,叫做逻辑运算符的优先级别。 例6.判断运算符的优先级别 设p, q, r为布尔类型变量。逻辑表达式p || q && r对应下面哪个开关图? ( p || q ) && r p || ( q && r ) 正如四则运算时先算乘除再算加减,逻辑运算符也有优先级的先后顺序。也就是说“与”、“或”、“非”哪个先算,哪个后算。 解决优先级问题的思路是:首先写出表达式( p || q ) && r和p || ( q && r )的真值表,然后编写程序输出表达式p ||q && r的值。最后把程序输出的值与真值表比较,找到等价表达式就能确定优先级。 第1步. 为判断“与”、“或”的优先级,我们首先找出p, q, r的所有组合,然后分别计算( p || q ) && r和p || ( q && r )的真值表。 第2步. 把真值表内的值依次赋给p, q, r,输出表达式p ||q && r的结果。 using System; class Class1 { static void Main() { bool p,q,r; p=true;q=true;r=true;//真值表的第一行 Console.Write(p||q&&r); } } 第3步. 把程序的输出结果和真值表做比较,发现p || q && r和p || ( q && r )的真值序列相同。因此根据等价定理得知,“与”的优先级高于“或”的优先级。 * 更简便的办法是仅测试真值表第5或第7行的值,就能得知运算符的优先顺序。 自测练习: 1.逻辑运算符“非”和“与”相比,哪个优先级别高? 2.假设下面的定义是有效的 int i = -3; int j = 10; int k = 30; 那么,下面表达式的值是什么? ( i != j ) && (( i < 5 ) || ( j <10 ) || ( k >= 30 )) True 3. 假设下面的定义是有效的 int i = 3; int j = 13; int k = 30; bool B1 = true; 那么,下面的表达式的值是什么? ( i == j ) && ((( i > 5 ) || ( j < 10 )) && B1 ) False 活动:根据逻辑表达式画开关图 活动分析:逻辑表达式和开关图可以互相转换。把逻辑表达式转换为形象的开关图可以帮助掌握逻辑运算的规则。 材料:白纸、笔 要求:根据表格中的逻辑表达式和变量的值画出开关图。