




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 三 章 逻辑思维与计算机解题(续)第 三 章 逻辑思维与计算机解题(续)例 3-3 求10!/*/* 程序名:3_3.cpp(循环语句示例) */* 作 者:wuwh */* 编制时间:2002年9月20日 */* 主要功能:计算10 的阶乘 */*#include / 预编译命令void main() / 主函数 / 主函数开始int i = 0, j = 0, k = 0; / 声明 i,j,k 为整型变量,并初始化为0long sum = 1; / 声明 sum 为长整型变量,并初始化为1for (i = 10; i = 1; i = i-1) / 用 for 循环作累乘运算cout
2、 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;/ 显示运算结果 /主函数结束2例 3-3 求10!/*#include void main() int i = 0, j = 0, k = 0; long sum = 1; for (i = 10; i = 1; i = i-1)cout i= i
3、 ; 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; 3#include 3i=10sum=10i=9sum=90i=8sum=720i=7sum=5040i=6sum=30240i=5sum=151200i=4sum=604800i=3sum=1814400i=2sum=3628800i=1sum=362880010!=3628800该程序的运行结果如下:4i=10sum=10该程序的运行结果如下:4将1
4、0!展开为10987654321让整型变量 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! 的思路是,5将10!展开为10987654321求 图3.26图3.26恰好计算机擅长做这种重复操作,使用 for循环是最佳选择。让循环控制变量 i 就是数字 10,9,1。i 的初值为 10,终值为 1。for 循环的三个表达式为:表达式
5、1 为 i = 10;表达式2 为 i = 1;表达式3 为 i = i - 1;7恰好计算机擅长做这种重复操作,使用 for循环是最佳选择。7for循环的NS图为了以后讲解的方便,有必要使用更为简便的N-S结构流程图,如图3.3for (i=1; i=100; i=i+1)循环体图3.38for循环的NS图for (i=1; i=100; i=iif (sum = 3)cout This man is char(64+k) endl;g=1;这一段程序可以读作:如果sum真的为 3 时,做下面两件事(1)输出做好事的人;(2)将本题的有解标志置为 1。其中(sum=3)为条件判断语句中的条件
6、,根据其真假使程序分支。例 3-1 的解要用到分支语句,即需要判断当四句话中有 3 句为真时,我们要将该人判定为做好事者。请看如下程序段9if (sum = 3)例 3-1 的解要用到分支语句下面我们画出分支程序的NS流程图,这种图直观清晰,一目了然。图3.410下面我们画出分支程序的NS流程图,这种图直观清晰,一目了if ( 表达式 ) 语句 1;else 语句 2;如果表达式为真,执行语句1;否则执行语句2if ( 表达式 )语句块 1;else语句块 2;11if ( 表达式 ) 语句 1;11一般格式if ( 表达式 ) 语句 1;如果表达式为真,执行语句 1;否则什么都不做.if (
7、 表达式 )语句块 1; 如果表达式为真,做语句块 1 的内容;否则什么都不做;12一般格式12举例:实现如图函数图3.513举例:实现如图函数图3.513/*/* 程 序 名:3_4.cpp(分支程序示例) */* 作 者:wuwh */* 编制时间:2001年8月 */* 主要功能:实现符号函数 */*#include / 预编译命令void main()/ 主函数 / 主函数开始int x=0,y=0;/ 声明x,y为整型变量,并初始化为0cout 请输入x x;/ 从键盘输入整数送至x中if (x0)/ 如果x0,将1赋给yy=1;elseif (x=0)/ 如果x=0,将0赋给yy=
8、0;elsey=-1;/ 否则(x0),将-1赋给ycout 当x= x 时, y= y endl; / 输出x,y的值 /主函数结束14/*NS图图3.615NS图图3.615NS图有了上述了解之后,我们来看解“谁做的好事”的程序框图图3.716NS图有了上述了解之后,我们来看解“谁做的好事”的程序框图图现在我们来分析“谁做的好事”的NS流程图。它是由两大块组成的,如图3.8循环体for(k=1; k=4; k+)语句1;图3.8第一块循环结构第二块分支结构17现在我们来分析“谁做的好事”的NS流程图。它是由两大块组 第一块是循环结构,功能是产生被试对象,依次为A、B、C、D。并测试四句话有
9、多少句为真,如有3句为真,则可确定做好事者,同时置有解标志为1。 第二块为分支结构,功能是判断是否无解,如为真,则输出无解信息。 这是粗看。再往细看,第一块的循环体又由两块组成,如图3.9,中含两条赋值语句中含一条分支语句18 第一块是循环结构,功能是产生被试对象,依次我们讲这一段是希望你掌握NS图,这对今后的学习会有好处。按照程序框图很容易写出程序(如下页所示)thisman = 64+k;sum=( thisman!=A )+ ( thisman=C )+ ( thisman=D )+ ( thisman!=D );图3.9sum = 3真假输出该被测试者;有解标志置1;19我们讲这一段是
10、希望你掌握NS图,这对今后的学习会有好处。/ */ * 程 序 名:3_5.cpp */ * 作 者:wuwh */ * 编制时间:2001年8月 */ * 主要功能:谁做的好事 */ *#include / 预编译命令void main() / 主函数 / 主函数开始int k=0,sum=0,g=0; / 声明变量为整数类型,且均初始化为0char thisman= ;for(k=1;k=4;k=k+1) / k既是循环控制变量,也表示第k个人 / for 循环体开始thisman = 64+k;sum=( thisman!=A ) + ( thisman=C ) + ( thisman=
11、D ) + ( thisman!=D );if (sum=3) / 如果4句话有3句话为真,则输出该人/ 输出做好事者cout 做好事者为 char(64+k) endl;g=1; / 有解标志置1 / for 循环体结束if (g!=1) / 则输出无解信息 cout Cant found! endl; / 主函数结束20/ *#include void main() int k =0, sum =0 , g =0; char thisman = ;for ( k = 1; k = 4 ; k = k+1 ) thisman = 64 + k;sum = ( thisman != A ) +
12、( thisman=D ) + ( thisman=C ) + ( thisman !=D );if ( sum=3 ) cout 做好事者为 char(64+k) endl;g=1; if (g!=1) cout Cant found! endl;21#include 21/ */ * 程 序 名:3_6.cpp */ * 作 者:wuwh */ * 编制时间:2001年8月 */ * 主要功能:谁做的好事 */ *#include / 预编译命令void main()/ 主函数 / 主函数开始int k=0,sum=0,g=0;/ 声明变量为整数类型,且均初始化为0for(k=1;k=4;
13、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 This man is char(64+k) endl;/ 输出做好事者g=1;/ 让有解标志置1if (g!=1)/ 则输出无解信息 cout Cant found! endl
14、;/ 主函数结束22/ *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; . . . 23for ( k = 1; k = 4; k = k+1 )/ */ * 程 序 名:3_7.cpp */ * 作 者:wuwh */ * 编
15、制时间:2001年8月 */ * 主要功能:谁做的好事 */ *#include / 预编译命令void main() / 主函数 / 主函数开始int k=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 Cant foun
16、d! endl; / 主函数结束上述程序可以简化为:24/ *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; 25for ( k = 1; k = 4 ; k = k+1 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=
17、 4; k= k+ 1 第 四 章 逻辑判断与解题思路第 四 章 逻辑判断与解题思路某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:A、B 至少有一人作案;A、E、F 三人中至少有两人参与作案;A、D 不可能是同案犯;B、C 或同时作案,或与本案无关;C、D 中有且仅有一人作案;如果 D 没有参与作案,则 E 也不可能参与作案。试编一程序,将作案人找出来。逻辑表达式28某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:逻辑表达式1、逻辑与,运算符为 &图4.1为了解这道题,我们要研究逻辑运算符与逻辑表达式。如图电路A 表示开关A合上;B 表示开关B合上;A&B 表示灯亮;291、逻辑与,运算符为
18、 &图4.1为了解这道题,我们要研究逻1 表示真,0 表示假,这是逻辑变量的取值,非真即假ABA&B111100010000301 表示真,0 表示假,这是逻辑变量的取值,非真即假AB2、逻辑或,运算符为|图 4.2如图电路A 表示开关A合上;B 表示开关B合上;A|B 表示灯亮;312、逻辑或,运算符为|图 4.2如图电路311 表示真,0 表示假ABA | B111101011000321 表示真,0 表示假ABA | B11110101103、逻辑非,运算符为 !两队比赛篮球,变量 A 表示 A 队到场,!A 表示 A 队不到场,变量 B 表示 B 队到场,!B 表示 B 队不到场。这场
19、球赛能够赛成,得两队都到场。假定 “能赛成” 用逻辑变量 C 表示,则C = A & B333、逻辑非,运算符为 !33赛不成当然用 !C 表示,D= !C,D 表示赛不成则D = !A | !B理解为 A 不到场或 B 不到场,球赛无法进行。34赛不成当然用 !C 表示,D= !C,34思路:1、案情分析:将案情的每一条写成逻辑表达式,第一条用 CC1 表示,第二条用 CC2 表示,35思路:1、案情分析:35CC1:A和B至少有一人作案令 A 变量表示 A 作案,B 变量表示 B 作案ABCC1000101011111显然这是或的关系,有CC1= ( A | B )36CC1:A和B至少有
20、一人作案ABCC100010101111CC2:A和D不可能是同案犯可以分析为:A 如果是案犯,D一定不是案犯,写成A & ( !D )D 如果是案犯,A一定不是案犯,写成 D &( !A )A 和 D 都不是案犯,写成 (!A) & (!D)这三者之间是或的关系,因此有CC2 = !( A & D )37CC2:A和D不可能是同案犯37CC2 = !( A & D )ADA&DCC2100111100001010138CC2 = !( A & D )ADA&DCC21CC3:A、E、F 中至少有两人涉嫌作案分析有三种可能第一种,A 和 E 作案,(A & E)第二种,A 和 F 作案,(A
21、& F)第三种,E 和 F 作案,(E & F)这三种可能性是 或 的关系,因此有CC3 = (A & E)|(A & F)|(E & F)我们写出 CC3 的真值表。39CC3:A、E、F 中至少有两人涉嫌作案39AEFCC311111101101101110010010010000000CC3 = (A&E)|(A&F)|(E&F)40AEFCC3111111011011011100100100CC4:B和C或同时作案,或都与本案无关第一种情况:同时作案(B & C)第二种情况:都与本案无关(!B & !C)两者为或的关系,因此有 CC4 = (B & C) | (!B & !C)BC!B
22、!CB&C!B&!CCC5110010110010000110000001101141CC4:B和C或同时作案,或都与本案无关BC!B!CB&CCC5:C、D中有且仅有一人作案CC5=(C & !D) | (D & !C)4242CC6:如果D没有参与作案,则E也不可能参与作案。分析这一条比较麻烦一些,可以列出真值表再归纳DE!ECC6含 义1101D作案,E也作案可能1011D作案,E不作案可能0011D不作案,E也不可能作案可能0100D不作案,E却作案不可能43CC6:如果D没有参与作案,则E也不可能参与作案。DE!ECCC6=D | !E1011以上是案情分析,已经化成了计算机可解的逻
23、辑表达式44CC6=D | !E1011以上是案情分析,已经化成了计算 6个人每个人都有作案或不作案两种可能,因此有 种组合,从这些组合中挑出符合6条分析的作案者。 定义 6 个整数变量,分别表示 6 个人A,B,C,D,E,F。枚举每个人的可能性让 0 表示不是罪犯;让 1 表示就是罪犯。2、采取枚举方法,枚举什么呢?枚举组合45 6个人每个人都有作案或不作案两种可能ABCDEF00000000000100001011111146ABCDEF000000000001000010 写一个从000000到111111的程序for( A=0;A=1;A=A+1) for( B=0;B=1;B=B+
24、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) coutABCDEF endl; 47 写一个从000000到111111的程序47 for( F=0;F=1;F=F+1) coutABCDEF endl; 循环体4848 for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 循环体49 for( D=0;D=1;D=D+1) for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutAB
25、CDEF endl; 循环体50 50 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) coutABCDEF endl; 51515252为了给出每个人是否为罪犯的信息,程序中定义了一个二维数组。char info29=“不是罪犯”,“是罪犯”;有两个字串每串最多有91个英文字符是罪犯0不是罪犯0012345678info为数组名1053为了给出每个人是否为罪犯的信息,程序中定义了一个二维数组
26、char 是说,info 数组的元素为字符,2为下标,表示有两个字符串,每个字符串最多有91个字符。因为英文字符占一个字节,而汉字占两个字节,故四个汉字要占 8 个英文字符的地方。每一字串后面自动跟一个空字符0因此可以看出:第 0 号字符串 info0 的内容为“不是罪犯”。第 1 号字符串 info1 的内容为“是罪犯”。54char 是说,info 数组的元素为字符,2为下标,表在输出时用cout “ A: ” infoA endl;如果A为0,则输出 A:不是罪犯如果A为1,则输出 A:是罪犯参考程序 4_1.cpp(案情分析)55在输出时用55/*/* 程 序 名:3_4.cpp */
27、* 作 者:wuwh */* 编制时间:2001年8月 */* 主要功能:案情分析 */*#include void main(void) /案情分析 /A和B至少有一人作案; cc1=(A | B) /A和D不可能是同案犯; cc2=(A & (!D)|(D & (!A) /A,E,F中至少有两人涉嫌作案 cc3=(A & E )| / (A & F )| / (E & F ) /B和C或同时作案或都与本案无关 cc4=(B & C)|(!B & !C) /C,D中有且仅有一人作案; cc5=(C & !D)|(D & !C) /如果D没有参与作案,则E也不可能参与作案; cc6=D | (
28、!E) /编程找出犯罪嫌疑人. int cc1,cc2,cc3,cc4,cc5,cc6; /定义6个变量,分别表示6句话 int A,B,C,D,E,F; /定义6个变量,分别表示6个人 char info29 = 不是罪犯, 是罪犯; /定义二维数组,给出是否罪犯信息 56/* for (A=0;A=1;A=A+1) / 枚举A for (B=0;B=1;B=B+1) / 枚举B for (C=0;C=1;C=C+1) / 枚举C for (D=0;D=1;D=D+1) / 枚举D for (E=0;E=1;E=E+1) / 枚举E for (F=0;F=1;F=F+1) / 枚举F cc1
29、=A | B; cc2=!(A & D); cc3=(A & E )| (A & F)|(E & F); cc4=(B & C)|(!B & !C); cc5=(C & !D)|(D & !C); cc6=D|(!E); 57 for (A=0;A=1;A=A+1) /测试6句话都为真时, 才输出谁是罪犯 if ( cc1+cc2+cc3+cc4+cc5+cc6 = 6 ) /输出判断结果 cout A: infoA endl; cout B: infoB endl; cout C: infoC endl; cout D: infoD endl; cout E: infoE endl; cout F: infoF endl; /输出结束 /循环结束 5858讨 论59讨 论59大家参与讨论的题五位跳水高手将参加十米高台跳水决赛,有好事者让五个人据实力预测比赛结果。A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业收益共享协议类承包经营合同范本
- 2025办公室租赁合同标准版范本
- 2025【设备租赁合同(土石方工程)】
- 2025标准保险合同范本
- 一年级地方与课程教学规划
- 2025技术转让合同样本
- 2025商场店铺的租赁合同样本
- 2025房地产合同纠纷仲裁申请书范文
- 2025年租房合同简易模板
- 设计师方案高逼格指南
- GB/T 700-2006碳素结构钢
- GB/T 28732-2012固体生物质燃料全硫测定方法
- GB/T 17214.1-1998工业过程测量和控制装置工作条件第1部分:气候条件
- 猪生殖器官(课堂PPT)
- 2023年广东学位英语试题学位英语考试真题(含答案)
- 《旅行社经营管理》考试复习题库及答案
- 粤教版五年级下册科学知识点
- 危大工程巡视检查记录表(深基坑)
- 《最好的未来》合唱曲谱
- GB∕T 36765-2018 汽车空调用1,1,1,2-四氟乙烷(气雾罐型)
- 《觉醒年代》朗诵稿
评论
0/150
提交评论