美文网首页NOIP之路
【NOIP初赛篇4】基础知识(三)运算与逻辑运算

【NOIP初赛篇4】基础知识(三)运算与逻辑运算

作者: 沧海无雨 | 来源:发表于2017-09-15 10:23 被阅读144次

    一、程序中的运算

    程序中的计算

    计算机程序,其实就是计算机按照我们编写好的代码,一步接一步的执行的过程。在程序中,会经常遇到一些计算,这些计算和我们数学上的计算很相似,但是又有一些区别,我们需要掌握计算机程序中的运算的表达,我们此处只介绍C++的表达。

    类似与数学上的加减乘除、括号,C++中也是同样的。在C++中,加减乘除分别用:『+』、『-』、『*』、『/』来表示。与数学不同的是,在C++的除法中,分两种情况,一种是整除之间的除法、一种小数之间的除法。整数的除法,并不是数学上的除法,而是整除;小数间的除法,才是数学上的除法。那么既然整数之间有整除,必然会存在余数的情况,也就是求余,求余,C++用『%』来表示。

    5+3 = 8

    5*2 = 10

    5/2 = 2           // 注意这里是整除

    5%2 = 1        //求余

    另外,C++中的括号只有小括号(),没有中括号、大括号,遇到有多重的括号,就“嵌套”使用小括号。所谓『嵌套』,我们暂且理解为就是自己里面包含自己。

    一般幂运算,我们都是用多次相乘,开平方,我们用sqrt(x),如『根号2』 表示为sqrt(2)

    数学式子的表达

    二、布尔值

    1、布尔值

    众所周知,在计算机里,我们使用的是二进制,即要么是0,要么是1。虽然我们提倡做人不要“非黑即白”,但是计算机是“一根筋”,它是“非一即零”。同样地,要计算机判断一个事情,在它眼里,也有简单的对错之分,没有中间含糊其辞的“半对”。对或错,在计算机中我们用true 和 false 来表示,我们将这种只有对错的值称为布尔值(bool),这其实是一个译音,就像我们说的“车厘子”(cherry,粤语读法,樱桃)。布尔值,只有两个值,true 和 false。true 表示正确、条件是成立的,是真的;flase 表示错误、条件是不成立的,是假的。

    2、布尔值的判断

    布尔值,只有两个结果,对或者错,那么要如何才能判断呢?首先必须要是命题,才能判断,如果本身都不是命题,则无法判断。命题即是明确描述或表达一种观点的语句。例如:今天是9月1日。这是一个命题,而且我们可以判断它是否正确。一般来讲,命题是陈述句,不能是疑问句。譬如:今天是9月1日吗?这个就不是命题,我们无法判断真假。

    为了更好地理解布尔值的判断,我们用一些案例来说明:

    3.4 > 5                          

    2017年9月14日是星期四

    10是正整数

    15 能被3整除

    15 能被5整除

    对于上面的例子,我们不难得出结果,很显然除了第一个案例是false,其他都是true。

    当然,我们在程序中,不太可能用我们的语言文字去描述,而往往使用表达式来表示,那么常用的关系符号有以下这些。

    常用符号

    a%2 == 0          // a能被2整除,即a对2求余,余数是0

    y>=60              // 年龄y大于等于60岁

    二、与、或、非、异或

    有时,我们的布尔的判断,并不仅仅是一个条件,可能需要同时满足多个条件,这个时候,我们就需要涉及到一些逻辑运算中的连接词。譬如在上面的例子中,15能被3整除、15能被5整除,如果我们需要这两个条件都要同时满足,我们可以这样描述:15既能被3整除且能被5整除。

    1、与运算

    串联电路

    类似于这种需要同时满足的条件,我们称之为“与”运算,可以类似于电学里面的串联电路,不同的条件是串联的几个开关,必须全部条件都满足,才能电路才通,也就是说必须全部条件都成立,最后结果才成立。与运算,在数学符号中,我们常用『∧』来表示,类似于集合中的交集,在C++语言中,与运算我们用“&&” 或者 “ and ” 来表示。一般两个逻辑表达式,我们都用小括号括起来,这是比较良好的代码习惯。

    x能被3整除,且能被5整除                   (x%3 == 0) && (x%5 == 0)  

    语文成绩高于90,数学高于95             (yw>90) && (sx>95)

    运算规则:很显然,与运算中,只有所以条件都为真时,整个条件才为真,只要出现某个条件为假,整个条件就是假。

    2、或运算

    并联电路

    类似于串联电路,也有并联电路,即在若干条件中,只需要满足一个条件就成立,这样的运算我们成为“或”运算。或运算,在数学符号中,我们常用『∨』来表示,类似于集合中的并集,在C++语言中,或运算我们用“||” 或者 “ or ” 来表示。

    乘坐公车,身高低于1.2m或年龄高于60岁的免费             (h<1.2) || (y>60)

    语文超过95或数学超过98的获单科奖励                           (yw>95) || (sx>98)

    运算规则:很显然,或运算中,只要有一个条件为真时,整个条件就为真,只有全部条件都为假,整个条件才是假。

    3、非运算

    上面我们就提到,计算机是『非黑即白』的,非运算,就是对某种情况的对立面。就好比我们抛硬币,在计算机眼中,只有正面和反面,正面的非运算就是反面,反面的非运算就是正面,不存在硬币立起来的情况。非运算,在数学符号中,我们常用『﹁』来表示,类似于集合中的补集,在C++语言中,非运算我们用“!”  来表示。

    a == 0         //  a等于0

    !(a==0)       // 非运算,相当于  (a<0) || (a>0)  也可以写成  a != 0

    b > 2          // b大于2

    !(b>2)        // 非运算,相当于 b<= 2

    运算规则:很显然,非运算中,真条件的非运算是假,假条件的非运算是真。

    4、异或运算

    异或相对上面几个,使用的相对较少,它是一个很奇怪的运算,它一般用在两个条件之间,运算的规则是两个条件相同,即同样为真或同样为假,那它的结果就是假;而如果两个条件不同,即一真一假时,它的结果就为真。异或比较常用在『博弈论』里面。异或运算,在数学符号中,我们常用『』来表示,在C++语言中,与运算我们用“^” 或者 “ xor ” 来表示。

    5、总结

    我们假定有两个命题或条件P、Q,我们用下表来总结与、或、非、异或的计算关系。

    运算结果

    还有需要注意的是运算的先后顺序。运算级比较:>>异或orxor是同级的),当然括号最优先。

    三、练习

    例题1若A=True,B=False,C=True,D=False,以下逻辑运算表达式真的有()。

    A.(A∧B)∨(C∧D∨¬A)             B.((¬A∧B)∨C)∧¬B

    C.(B∨C∨D)∨D∧A                      D.A∧(D∨¬C)∧B

    题解:一个个算结果,比如A选项(AB)(CD¬A) ,根据运算级的比较,我们可以定下运算的顺序,然后按运算顺序计算结果。注意,这类题是有个小技巧的。比如A选项可以先看中间的,为什么呢?因为∨的左右有一边是真就行,可以不去看另外一边

    A选项的结果是:(A∧B)∨(C∧D∨¬A),(A∧B)=假,(C∧D∨¬A)中C∧D =假,¬A=假,所以(C∧D∨¬A)=假。于是A选项可以简写为:假∨(假∨假)=假。

    B选项的结果是:((¬A∧B)∨C)∧¬B,如果¬B是假那么就可以不去看前面的((¬A∧B)∨C),可惜的是¬B是真,那么就要看((¬A∧B)∨C),发现C是真,所以不看(¬A∧B),于是B选项可以简写为:(?∨真)∧真=真。

    C选项的结果是:(B∨C∨D)∨D∧A,D∧A=假,所以不得不看前面部分(B∨C∨D),只要BCD有一个是真,那么(B∨C∨D)=真,而容易发现C=true。所以C选项可以简写为:真∨假=真。

    D选项的结果是:A∧(D∨¬C)∧B,我们很容易发现D选项的特殊结构为 ?∧?∧?,三个?有一个是假,那么D为假,A和B不用计算便可看出,所以先发现B=假,所以D=假。

    历年题目

    1、【2010提高(同2010普及)】以下逻辑表达式的值恒为真的是()。

    A.P∨(┓P∧Q)∨(┓P∧┓Q)

    B.Q∨(┓P∧Q)∨(P∧┓Q)

    C.P∨Q∨(P∧┓Q)∨(┓P∧Q)

    D.P∨┓Q∨(P∧┓Q)∨(┓P∧┓Q)

    2、【2008提高(多选)】若A=True,B=False,C=True,D=False,以下逻辑运算表达式真的有(   )。

    A.(A∧B)∨(C∧D∨¬A)                     B.((¬A∧B)∨C)∧¬B

    C.(B∨C∨D)∨D∧A                              D.A∧(D∨¬C)∧B

    3、【2008普及】设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的是(  )。

    A. (A∧B)∨(C∧D∨¬A)                  B. ((¬A∧B)∨C)∧¬D

    C. (B∨C∨D)∧D∧A                      D. A∧(D∨¬C)∧B

    4、【2007普及】设A=B=True,C=D=False,一下逻辑运算表达式值为假的有( )。

    A.(﹁A∧B)∨(C∧D∨A)

    B.﹁(((A∧B)∨C)∧D)

    C.A∧(B∨C∨D)∨D

    D.(A∧(D∨C))∧B

    5、【2006提高(多选)】设A=B=D=true,C=E=false,以下为真的有( )。

    A. (A∧B)∨(C∧D)∨E           B. (((A∧B)∨C)∧D∧E)

    C. A∧(B∨C∨D∨E)             D. (A∧(B∨C))∧D∧E

    答案:

    1~5  A、BC、B、D、AC

    相关文章

      网友评论

      本文标题:【NOIP初赛篇4】基础知识(三)运算与逻辑运算

      本文链接:https://www.haomeiwen.com/subject/llqwettx.html