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

一、程序中的运算

程序中的计算

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容