首页计算机计算机软件计算机语言与程序设计 03 逻辑判断(续).ppt

03 逻辑判断(续).ppt

页数:24页文件大小:177.0 KB来源: 计算机语言与程序设计ppt课件

本课件承接逻辑判断,先系统讲解逻辑与、逻辑或、逻辑非三种运算符及真值表,再以六嫌疑人案情分析为案例,把六条线索逐条翻译成CC1至CC6逻辑表达式,随后用0与1枚举六人组合、配合二维字符数组输出每个人是否为罪犯,最后给出跳水高手预测名次的课堂讨论题与一对一错的判定条件。

第三讲逻辑判断续讲封面页,标示本讲用六嫌疑人疑案讲解逻辑表达式
案情题面页,列出六条线索包括至少一人作案、不同案、有且仅有一人作案等条件
逻辑与运算符页,用串联开关电路说明A&&B仅在A、B都合上时灯亮
查看本课件的文字版(共 24 页,供检索与复制)

第1页:第三讲逻辑判断(续)封面

本页为第三讲 逻辑判断(续)章节封面,本讲以某地刑侦大队的六嫌疑人疑案为主线,讲解逻辑运算符与逻辑表达式。

第2页:六嫌疑人案情分析题

某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:

  • A、B至少有一人作案
  • A、E、F三人中至少有两人参与作案
  • A、D不可能是同案犯
  • B、C或同时作案,或与本案无关
  • C、D中有且仅有一人作案
  • 如果D没有参与作案,则E也不可能参与作案

要求编一程序将作案人找出来。

第3页:逻辑与运算符&&

逻辑与的运算符为 &&。以串联开关电路比喻:A 表示开关A合上,B 表示开关B合上,A&&B 表示灯亮。

逻辑与真值表
ABA&&B
111
100
010
000

第4页:逻辑或运算符||

逻辑或的运算符为 ||。以并联开关电路比喻:A 或 B 任一合上,A||B 即灯亮。

逻辑或真值表
ABA||B
111
101
011
000

1 表示真,0 表示假,逻辑变量取值非真即假。

第5页:逻辑非运算符!

逻辑非的运算符为 !。设 A 表示A队到场、B 表示B队到场,能赛成 C = A&&B;赛不成 D = !C,则 D = !A||!B,即 A 不到场或 B 不到场球赛无法进行。

第6页:案情条件CC1

CC1:A 和 B 至少有一人作案。令变量 A 表示 A 作案、B 表示 B 作案,显然是或的关系:

CC1 = (A||B)
CC1 真值表
ABCC1
000
011
101
111

第7页:案情条件CC2

CC2:A 和 D 不可能是同案犯。可分析为:A 若是案犯则 D 一定不是(A&&(!D));D 若是案犯则 A 一定不是(D&&(!A)),两者为或的关系:

CC2 = !(A&&D)
CC2 真值表
ADA&&DCC2
1001
1110
0001
0101

第8页:异或运算

(A&(!B))||((!A)&&B) 称为异或运算,在数字逻辑课中有专门的表示符号,在计算机中对应二进制半加器。

第9页:案情条件CC3

CC3:A、E、F 中有两人涉嫌作案,有三种可能:

  • 第一种,A 和 E 作案:(A&&E)
  • 第二种,A 和 F 作案:(A&&F)
  • 第三种,E 和 F 作案:(E&&F)
CC3 = (A&&E)||(A&&F)||(E&&F)

第10页:CC3真值表

CC3 真值表
AEFCC3
1111
1101
1011
0111
0010
0100
1000
0000

第11页:案情条件CC4与CC5

CC4:B 和 C 或同时作案,或都与本案无关,即同时作案 (B&&C) 或都无关 (!B&&!C):

CC4 = (B && C)||(!B && !C)
CC4 真值表(B、C 同为真或同为假时成立)
BCCC4
111
100
010
001

CC5:C、D 中有且仅有一人作案,即 CC5=(C && !D)||(D && !C)。

第12页:案情条件CC6

CC6:如果 D 没有参与作案,则 E 也不可能参与作案。列出真值表归纳可得:

CC6 = D||!E
CC6 真值表与含义
DECC6含义
111D作案,E也作案,可能
101D作案,E不作案,可能
001D不作案,E也不可能作案,可能
010D不作案,E却作案,不可能

至此案情分析已化成计算机可解的逻辑表达式。

第13页:枚举组合的求解思路

采取枚举方法,枚举六个人作案与不作案的组合。6 个人每人都有作案或不作案两种可能,因此共有 26 种组合,从中挑出符合六条分析的作案者。

  • 定义 6 个整型变量分别表示 A、B、C、D、E、F
  • 让 0 表示不是罪犯;让 1 表示就是罪犯

第14页:组合枚举空间

本页以图示方式展示六个人作案与不作案的组合枚举空间(共 26 种),源文件未给出更多文字说明。

第15页:用二维数组存罪犯信息

为给出每个人是否为罪犯的信息,程序中定义了一个二维数组:

char info[2][9]={"不是罪犯","是罪犯"};

info 为数组名,有两个字符串,每串最多 9-1 个英文字符,串末自动补空字符 '\0'。

第16页:二维字符数组的存储

  • char 说明 info 数组的元素为字符,[2] 为下标表示有两个字符串,每个字符串最多 9-1 个字符
  • 英文字符占一个字节,汉字占两个字节,四个汉字占 8 个英文字符的位置
  • 每一字串后面自动跟一个空字符 '\0'
  • 第 0 号字符串 info[0] 为“不是罪犯”,第 1 号字符串 info[1] 为“是罪犯”

第17页:输出每个人的判定结果

在输出时用 printf("A:%s\n",info[A]);:若 A 为 0 则输出 A:不是罪犯;若 A 为 1 则输出 A:是罪犯。参考程序见 AQFX.c(案情分析)。

第18页:课堂讨论:跳水高手名次

本页为讨论环节标题页,引出下页五位跳水高手预测名次的课堂讨论题。

第19页:跳水高手预测名次题

五位跳水高手参加十米高台跳水决赛,五人据实力预测结果:

  • A选手说:B第二,我第三
  • B选手说:我第二,E第四
  • C选手说:我第一,D第二
  • D选手说:C最后,我第三
  • E选手说:我第四,A第一

决赛成绩公布后每位选手的预测都只说对了一半,即一对一错,请编程解出比赛的实际名次。

第20页:预测条件的逻辑表达式

  • 让关系运算符 == 的含义是“是”,数字 1、2、3、4、5 分别表示名次第一至第五
  • 让整型变量 A、B、C、D、E 分别表示每个选手所得名次
  • A选手说:B==2,A==3;B选手说:B==2,E==4
  • C选手说:C==1,D==2;D选手说:C==5,D==3;E选手说:E==4,A==1

第21页:一对一错的判定条件

每个人说的话一对一错,即一真一假,两个关系表达式之和必为 1,如 (B==2)+(A==3) 应为 1。归纳出五个条件:

ta=((B==2)+(A==3))==1; tb=((B==2)+(E==4))==1; tc=((C==1)+(D==2))==1; td=((C==5)+(D==3))==1; te=((E==4)+(A==1))==1;

ta~te 非 1 即 0,五个条件值加在一起用于判断。

第22页:约束条件与枚举求解

  1. 只有五个条件值之和等于 5 时才都符合每人所说的话,这仅是一个必要条件
  2. 同时还得考虑 A、B、C、D、E 的取值不得有相同者,可作为一个附加条件
  3. 仍可用枚举方法,让变量 A~E 在 1~5 中取值,形成满足上述条件的组合即为所求,可用循环结构实现

第23页:跳水题求解思路

本页以图示方式给出五位选手名次枚举求解的多重循环结构,源文件未给出更多文字说明。

第24页:作业与思考

  1. 请你自己完成这个程序
  2. 思考如何提高效率?
  3. 思考还有什么其它解法?
顶部目录