逻辑思维与计算机解题(续).ppt_第1页
逻辑思维与计算机解题(续).ppt_第2页
逻辑思维与计算机解题(续).ppt_第3页
逻辑思维与计算机解题(续).ppt_第4页
逻辑思维与计算机解题(续).ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章逻辑思维与计算机解题 续 2 例3 3求10 程序名 3 3 cpp 循环语句示例 作者 wuwh 编制时间 2002年9月20日 主要功能 计算10的阶乘 include 预编译命令voidmain 主函数 主函数开始inti 0 j 0 k 0 声明i j k为整型变量 并初始化为0longsum 1 声明sum为长整型变量 并初始化为1for i 10 i 1 i i 1 用for循环作累乘运算 cout i i 显示isum sum i 每一步乘积cout tsum sum endl 显示每一步乘积for j 1 j 5500 j j 1 用for循环延迟时间for k 1 k 10000 k k 1 用for循环延迟时间 cout 10 sum endl 显示运算结果 主函数结束 3 includevoidmain inti 0 j 0 k 0 longsum 1 for i 10 i 1 i i 1 cout i i sum sum i cout tsum sum endl for j 1 j 5500 j j 1 for k 1 k 10000 k k 1 cout 10 sum endl 4 i 10sum 10i 9sum 90i 8sum 720i 7sum 5040i 6sum 30240i 5sum 151200i 4sum 604800i 3sum 1814400i 2sum 3628800i 1sum 362880010 3628800 该程序的运行结果如下 5 将10 展开为10 9 8 7 6 5 4 3 2 1让整型变量i去表示10 9 1让长整型变量sum来表示乘积 初始时让其为1将求10的阶乘考虑成累乘问题 让i 10去乘sum再将积存至sum中 即sum sum i之后让i i 1 再用上式累乘 不断地反复做这两个运算 从i 10 9 1 就完成了求10 的任务 见图3 2 求10 的思路是 6 图3 2 7 恰好计算机擅长做这种重复操作 使用for循环是最佳选择 让循环控制变量i就是数字10 9 1 i的初值为10 终值为1 for循环的三个表达式为 表达式1为i 10 表达式2为i 1 表达式3为i i 1 8 for循环的NS图为了以后讲解的方便 有必要使用更为简便的N S结构流程图 如图3 3 图3 3 9 if sum 3 cout Thismanis char 64 k endl g 1 这一段程序可以读作 如果sum真的为3时 做下面两件事 1 输出做好事的人 2 将本题的有解标志置为1 其中 sum 3 为条件判断语句中的条件 根据其真假使程序分支 例3 1的解要用到分支语句 即需要判断当四句话中有3句为真时 我们要将该人判定为做好事者 请看如下程序段 10 下面我们画出分支程序的NS流程图 这种图直观清晰 一目了然 图3 4 11 if 表达式 语句1 else语句2 如果表达式为真 执行语句1 否则执行语句2if 表达式 语句块1 else 语句块2 12 一般格式if 表达式 语句1 如果表达式为真 执行语句1 否则什么都不做 if 表达式 语句块1 如果表达式为真 做语句块1的内容 否则什么都不做 13 举例 实现如图函数 图3 5 14 程序名 3 4 cpp 分支程序示例 作者 wuwh 编制时间 2001年8月 主要功能 实现符号函数 include 预编译命令voidmain 主函数 主函数开始intx 0 y 0 声明x y为整型变量 并初始化为0cout x 从键盘输入整数送至x中if x 0 如果x 0 将1赋给y y 1 elseif x 0 如果x 0 将0赋给y y 0 else y 1 否则 x 0 将 1赋给ycout 当x x 时 y y endl 输出x y的值 主函数结束 15 NS图 图3 6 16 NS图 有了上述了解之后 我们来看解 谁做的好事 的程序框图 图3 7 17 现在我们来分析 谁做的好事 的NS流程图 它是由两大块组成的 如图3 8 图3 8 第一块循环结构 第二块分支结构 18 第一块是循环结构 功能是产生被试对象 依次为A B C D 并测试四句话有多少句为真 如有3句为真 则可确定做好事者 同时置有解标志为1 第二块为分支结构 功能是判断是否无解 如为真 则输出无解信息 这是粗看 再往细看 第一块的循环体又由两块组成 如图3 9 中含两条赋值语句 中含一条分支语句 19 我们讲这一段是希望你掌握NS图 这对今后的学习会有好处 按照程序框图很容易写出程序 如下页所示 thisman 64 k sum thisman A thisman C thisman D thisman D 图3 9 sum 3 真 假 输出该被测试者 有解标志置1 20 程序名 3 5 cpp 作者 wuwh 编制时间 2001年8月 主要功能 谁做的好事 include 预编译命令voidmain 主函数 主函数开始intk 0 sum 0 g 0 声明变量为整数类型 且均初始化为0charthisman for k 1 k 4 k k 1 k既是循环控制变量 也表示第k个人 for循环体开始thisman 64 k sum thisman A thisman C thisman D thisman D if sum 3 如果4句话有3句话为真 则输出该人 输出做好事者cout 做好事者为 char 64 k endl g 1 有解标志置1 for循环体结束if g 1 则输出无解信息 cout Can tfound endl 主函数结束 21 includevoidmain intk 0 sum 0 g 0 charthisman for k 1 k 4 k k 1 thisman 64 k sum thisman A thisman D thisman C thisman D if sum 3 cout 做好事者为 char 64 k endl g 1 if g 1 cout Can tfound endl 22 程序名 3 6 cpp 作者 wuwh 编制时间 2001年8月 主要功能 谁做的好事 include 预编译命令voidmain 主函数 主函数开始intk 0 sum 0 g 0 声明变量为整数类型 且均初始化为0for k 1 k 4 k k 1 循环从k为1到4 sum 0 循环体内的初始化if k 1 sum sum 1 如A的话为真 则让sum加1 if k 3 sum sum 1 如B的话为真 则让sum加1 if k 4 sum sum 1 如C的话为真 则让sum加1 if k 4 sum sum 1 如D的话为真 则让sum加1 if sum 3 若有三句话为真 则做下列两件事 cout Thismanis char 64 k endl 输出做好事者g 1 让有解标志置1 if g 1 则输出无解信息 cout Can tfound endl 主函数结束 23 for k 1 k 4 k k 1 sum 0 if k 1 sum sum 1 如A的话为真 则让sum加1 if k 3 sum sum 1 如B的话为真 则让sum加1 if k 4 sum sum 1 如C的话为真 则让sum加1 if k 4 sum sum 1 如D的话为真 则让sum加1 24 程序名 3 7 cpp 作者 wuwh 编制时间 2001年8月 主要功能 谁做的好事 include 预编译命令voidmain 主函数 主函数开始intk 0 g 0 声明变量为整数类型 且均初始化为0for k 1 k 4 k k 1 k既是循环控制变量 也表示第k个人 for循环体开始if k 1 k 3 k 4 k 4 3 如果4句话有3句话为真 则输出该人 输出做好事者cout 做好事者为 char 64 k endl g 1 有解标志置1 for循环体结束if g 1 则输出无解信息 cout Can tfound endl 主函数结束 上述程序可以简化为 25 for k 1 k 4 k k 1 if k 1 k 3 k 4 k 4 3 cout 做好事者为 char 64 k endl g 1 26 for k 1 k 4 k k 1 if k 1 k 3 k 4 k 4 3 cout 做好事者为 char 64 k endl g 1 第四章逻辑判断与解题思路 28 某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析 A B至少有一人作案 A E F三人中至少有两人参与作案 A D不可能是同案犯 B C或同时作案 或与本案无关 C D中有且仅有一人作案 如果D没有参与作案 则E也不可能参与作案 试编一程序 将作案人找出来 逻辑表达式 29 1 逻辑与 运算符为 图4 1 为了解这道题 我们要研究逻辑运算符与逻辑表达式 如图电路A 表示开关A合上 B 表示开关B合上 A B 表示灯亮 30 1表示真 0表示假 这是逻辑变量的取值 非真即假 31 2 逻辑或 运算符为 图4 2 如图电路A 表示开关A合上 B 表示开关B合上 A B 表示灯亮 32 1表示真 0表示假 33 3 逻辑非 运算符为 两队比赛篮球 变量A表示A队到场 A表示A队不到场 变量B表示B队到场 B表示B队不到场 这场球赛能够赛成 得两队都到场 假定 能赛成 用逻辑变量C表示 则C A B 34 赛不成当然用 C表示 D C D表示赛不成则D A B理解为A不到场或B不到场 球赛无法进行 35 思路 1 案情分析 将案情的每一条写成逻辑表达式 第一条用CC1表示 第二条用CC2表示 36 CC1 A和B至少有一人作案令A变量表示A作案 B变量表示B作案 显然这是或的关系 有CC1 A B 37 CC2 A和D不可能是同案犯可以分析为 A如果是案犯 D一定不是案犯 写成A D D如果是案犯 A一定不是案犯 写成D A A和D都不是案犯 写成 A D 这三者之间是或的关系 因此有CC2 A D 38 CC2 A D 39 CC3 A E F中至少有两人涉嫌作案分析有三种可能第一种 A和E作案 A E 第二种 A和F作案 A F 第三种 E和F作案 E F 这三种可能性是或的关系 因此有CC3 A E A F E F 我们写出CC3的真值表 40 CC3 A E A F E F 41 CC4 B和C或同时作案 或都与本案无关第一种情况 同时作案 B C 第二种情况 都与本案无关 B C 两者为或的关系 因此有CC4 B C B C 42 CC5 C D中有且仅有一人作案CC5 C D D C 43 CC6 如果D没有参与作案 则E也不可能参与作案 分析这一条比较麻烦一些 可以列出真值表再归纳 44 CC6 D E 以上是案情分析 已经化成了计算机可解的逻辑表达式 45 6个人每个人都有作案或不作案两种可能 因此有种组合 从这些组合中挑出符合6条分析的作案者 定义6个整数变量 分别表示6个人A B C D E F 枚举每个人的可能性让0表示不是罪犯 让1表示就是罪犯 2 采取枚举方法 枚举什么呢 枚举组合 46 47 写一个从000000到111111的程序for A 0 A 1 A A 1 for B 0 B 1 B B 1 for C 0 C 1 C C 1 for D 0 D 1 D D 1 for E 0 E 1 E E 1 for F 0 F 1 F F 1 cout A B C D E F endl 48 for F 0 F 1 F F 1 cout A B C D E F endl 循环体 49 for E 0 E 1 E E 1 for F 0 F 1 F F 1 cout A B C D E F endl 循环体 50 for D 0 D 1 D D 1 for E 0 E 1 E E 1 for F 0 F 1 F F 1 cout A B C D E F endl 循环体 51 for A 0 A 1 A A 1 for B 0 B 1 B B 1 循for C 0 C 1 C C 1 环for D 0 D 1 D D 1 体for E 0 E 1 E E 1 for F 0 F 1 F F 1 cout A B C D E F endl 52 53 为了给出每个人是否为罪犯的信息 程序中定义了一个二维数组 charinfo 2 9 不是罪犯 是罪犯 有两个字串 每串最多有9 1个英文字符 info为数组名 54 char是说 info数组的元素为字符 2 为下标 表示有两个字符串 每个字符串最多有9 1个字符 因为英文字符占一个字节 而汉字占两个字节 故四个汉字要占8个英文字符的地方 每一字串后面自动跟一个空字符 0 因此可以看出 第0号字符串info 0 的内容为 不是罪犯 第1号字符串info 1 的内容为 是罪犯 55 在输出时用cout A info A endl 如果A为0 则输出A 不是罪犯如果A为1 则输出A 是罪犯参考程序4 1 cpp 案情分析 56 程序名 3 4 cpp 作者 wuwh 编制时间 2001年8月 主要功能 案情分析 includevoidmain void 案情分析 A和B至少有一人作案 cc1 A B A和D不可能是同案犯 cc2 A 定义二维数组 给出是否罪犯信息 57 for A 0 A 1 A A 1 枚举Afor B 0 B 1 B B 1 枚举Bfor C 0 C 1 C C 1 枚举Cfor D 0 D 1 D D 1 枚举Dfor E 0 E 1 E E 1 枚举Efor F 0 F 1 F F 1 枚举F cc1 A B cc2 A 58 测试6句话都为真时 才输出谁是罪犯if cc1 cc2 cc3 cc4 cc5 cc6 6 输出判断结果cout A info A endl cout B info B endl cout C info C endl cout D info D endl cout E info E endl cout F info F endl 输出结束 循环结束 59 讨论 60 大家参与讨论的题 五位跳水高手将参加十米高台跳水决赛 有好事者让五个人据实力预测比赛结果 A选手说 B第二 我第三 B选手说 我第二 E第四 C选手说 我第一 D第二 D选手说 C最后 我第三 E选手说 我第四 A第一 决赛成绩公布之后 每位选手的预测都只说对了一半

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论