程序设计基础w04chap04逻辑思维1课件_第1页
程序设计基础w04chap04逻辑思维1课件_第2页
程序设计基础w04chap04逻辑思维1课件_第3页
程序设计基础w04chap04逻辑思维1课件_第4页
程序设计基础w04chap04逻辑思维1课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、课前思考题即白非黑上面的说法正确吗?课前思考题即白非黑上面的说法正确吗?世界首台拟态计算机据新华社上海9月21日电(记者张建松)我国科学家融合仿生学、认知科学和现代信息技术,提出拟态计算新理论,并成功研制出世界首台结构动态可变的拟态计算机。21日,这项名为“新概念高效能计算机体系结构及系统研究开发”项目,在上海通过了国家863计划项目验收专家组的验收。测试表明,拟态计算机典型应用的能效,比一般计算机可提升十几倍到上百倍,高效能特点显著。拟态计算机堪称“变形金刚”。目前所用一般的计算机“结构固定不变、靠软件编程计算”,而拟态计算机的结构动态可变,“靠变结构、软硬件结合计算”。针对用户不同的应用需

2、求,拟态计算机可通过改变自身结构提高效能。 世界首台拟态计算机3第4章 逻辑思维与计算机解题34将实际问题抽象为逻辑关系枚举法解题思路关系与关系表达式程序的循环结构与分支结构学 习 目 标4将实际问题抽象为逻辑关系学 习 目 标5 计算机强大的逻辑分析功能是由人通过程序赋给它的。一些逻辑问题必须转换成计算机能够看得懂的数学表达式和一定的程序指令。这一章我们通过例子来介绍如何将人对问题的思考转换为让计算机能解的数学表达式,同时给出一些通常要用到的程序结构和C/C+语句。5 计算机强大的逻辑分析功能是由人通过程序赋6清华附中有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好

3、事。A说:不是我。B说:是C。C说:是D。D说:他胡说。已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。【任务 4.1】 “谁做的好事”6清华附中有四位同学中的一位做了好事,不留名,表扬信来了之7关系运算符有如下6个 =大于等于 大于 =等于 =小于等于 小于 !=不等于4.1 关系运算符和关系表达式为了讲解关系运算符和关系表达式,先请你在机器上建立和运行下列程序。7关系运算符有如下6个4.1 关系运算符和关系表达式为8 为了解这道题,我们需要学习如何通过逻辑思维与判断解这类问题的思路。8 为了解这道题,我们需要学习如何通过逻辑思维与判断9/ */ * 程 序:

4、3_0.cpp */ * 功 能: 为讲解关系运算而编 */ * 编制人: wuwh */ * 时 间: 2001年6月27日 */ *9/ *10 #include using namespace std; 要计算的内容 int main( ) cout 2 的逻辑值是” 2) “, 1为真。”endl ;cout= 2 的逻辑值是”=2) “, 1为真。”endl ;cout“3 = 2 的逻辑值是” (3=2) “, 0为假。”endl ;cout“3 2 的逻辑值是” (32) “, 0为假。”endl ;cout“3 = 2 的逻辑值是” (3=2) “, 0为假。”endl ;co

5、ut“3 != 2 的逻辑值是” (3!=2) “ , 1为真。”endl ; return 0 ; 10 #include 11程序运行结果是: 计算出来的3 2 的逻辑值是 1 , 1为真。3 = 2 的逻辑值是 1 , 1为真。3 = 2 的逻辑值是 0 , 0为假。3 2 的逻辑值是 0 , 0为假。3 = 2 的逻辑值是 0 , 0为假。3 != 2 的逻辑值是 1 , 1为真。11程序运行结果是: 计算出来的12 关系表达式的一般格式 关系运算符 例如:表达式b c 在程序中系统要测试由关系表达式所表示的关系是否成立,成立为真,不成立为假。 关系表达式是有值的,这个值非 0 即 1

6、,是布尔值。关系表达式成立时,其值为 1 ;关系表达式不成立时,其值为 0 。12 关系表达式的一般格式13 结合任务4.1,可以将四个人说的四句话写成关系表达式。 在定义变量时,让 thisman 表示要寻找的做了好事的人,定义它是字符变量。 char thisman = ; / 定义字符变量并初始化为空 “=” 的含义为 “ 是 ” , “!= ” 的含义为 “ 不是”。使用关系表达式解决问题13 结合任务4.1,可以将四个人说的四14利用关系表达式将四个人所说的话表示成说话人说的话写成关系表达式A“不是我”thisman!=AB“是C”thisman=CC“是D”thisman=DD“他

7、胡说”thisman!=D14利用关系表达式将四个人所说的话表示成说话人说的话写成关系15在C/C+中字符在存储单元中是以ASCII码的形式存放的。因此,用赋值语句thisman = A; 与thisman = 65;两者是等效的,在以thisman为标识的存储单元中存的是数字65。建议你用如下实验加以验证。thisman 65地址xxxx15在C/C+中字符在存储单元中是以ASCII码的形式16/ */ * 程 序: 3_1.cpp */ * 功 能: 验证A和65是否相等 */ * 编制人: wuwh */ * 时 间: 2001年6月27日 */ *#include / 预编译命令usi

8、ng namespace std;int main( )/ 主函数/ 主函数开始char thisman;/ 声明字符变量thisman,thisman = A;/ thisman赋值为A/ 输出关系表达式“65=A”的值cout 65=A 关系表达式的值为 (65=A) , 1为真。 endl; return 0;计算/ 主函数结束16/ *17 结合任务4.1分析,A、B、C、D四个人,只有一位是做好事者。令做好事者为1,未做好事者为0,可以有如下 4 种状态(情况)4.2 枚举法的思路状态ABCD1100020100300104000117 结合任务4.1分析,A、B、C、D四个18这四

9、种状态可简化写成状态赋值表达式1thisman=A2thisman=B3thisman=C4thisman=D 显然第一种状态是假定A是做好事者,第二种状态是假定B是做好事者,。所谓枚举是按照四种假定逐一地去测试四个人的话有几句是真话,如果不满足三句为真,就否定掉这一假定,换下一个状态再试。 具体做法如下:18这四种状态可简化写成状态赋值表达式1thisman=A19(1)假定让 thisman = A 代入四句话中说话人说的话关系表达式真吗Athisman!=A;A!=A0Bthisman=C;A=C0Cthisman=D;A=D0Dthisman!=D;A!=D1四个关系表达式的值的和为1

10、,显然不是A做的好事19(1)假定让 thisman = A 代入四句话中说20(2)假定让 thisman = B 代入四句话中说话人说的话关系表达式真吗Athisman!=A;B!=A1Bthisman=C;B=C0Cthisman=D;B=D0Dthisman!=D;B!=D1四个关系表达式的值的和为2,显然不是B做的好事20(2)假定让 thisman = B 代入四句话中说21(3)假定让 thisman = C 代入四句话中说话人说的话关系表达式真吗Athisman!=A;C!=A1Bthisman=C;C=C1Cthisman=D;C=D0Dthisman!=D;C!=D1四个关

11、系表达式的值的和为3,就是C做的好事21(3)假定让 thisman = C 代入四句话中说22综上所述一个人一个人去试,就是枚举。 从编写程序看,实现枚举最好用 循环结构。22综上所述一个人一个人去试,就是枚举。23for (int k=0; k4; k+) / 计数型循环,循环的控制变量为k / 循环体开始thisman = A+k; / 产生被试者,依次为A,B,C,D / 赋值给thismansum = ( thisman!=A ) / 测试A的话是否为真 +( thisman=C ) / 测试B的话是否为真 +( thisman=D ) / 测试C的话是否为真 +( thisman

12、!=D ) ; / 测试D的话是否为真 / 循环体结束23for (int k=0; k4; k+) 24for是计数型循环的标识符,圆括号括起的是三个表达式。其下的大括号括起的部分是循环体。图 4.1 描述了 for 循环的结构。for语句的格式为for ( 表达式1;表达式2;表达式3 )循环体(语句组);4.3 循环结构24for是计数型循环的标识符,圆括号括起的是三个表达式25图 4.125图 4.126求解表达式1,置循环控制变量的初值测试表达式2,测试是否未到循环控制变量的终值 2-1 如果表达式2的值为真,则执行3 2-2 如果表达式2的值为假,则退出循环转5执行循环体语句组,

13、之后转44. 求解表达式3,让循环控制变量增值或减值,再转25. 执行for语句的下一条语句for循环的执行过程如下:26求解表达式1,置循环控制变量的初值for循环的执行过程如27/ */ * 程 序: 4._2.cpp(计数循环示例) */ * 功 能: 求自然数1100之和 */ * 编制人: wuwh */ * 时 间: 2001年9月10日 */ * #include / 预编译命令 using namespace std; int main( ) / 主函数 / 主函数开始int sum=0; / 声明sum为整型变量并初始化为0for (int i=0; i100; i+) /

14、for 循环 / 循环体开始sum = sum+(i+1) ; / 累加求和 / 循环体结束cout自然数1100之和为 sum endl; / 输出累加结果 return 0 ; / 主函数结束课堂练习27/ *28 为了解决例 4-1中的问题,还需要用到分支语句,即需要判断当四句话中有 3 句为真时,我们要将该人判定为做好事者。 请看如下程序段:4.4 分支结构28 为了解决例 4-1中的问题,还需要用到29if (sum = 3) /如果sum真的 等于3 时, 做cout This man is A+k 0) y=1; / 如果x0,将1赋给 yelse / 否则if (x=0) /

15、如果x=0,将 0 赋给 y y=0; else y=-1; / 否则(x0) y=1; / 如果x34能不能将图改一下呢?用 3 条 if 语句 t x0 f y=1; t x=0 f y=0 ; t x0 ) y=1; /如果x大于0, y赋值为1 if ( x=0 ) y=0; /如果x等于0, y赋值为0 if ( x0 ) y= -1; /如果x小于0, y赋值为-135 36/*/* 程 序 名:4_4.cpp(分支程序示例) */* 作 者:wuwh */* 编制时间:2001年8月 */* 主要功能:实现符号函数 */*36/*37 #include / 预编译命令 using

16、 namespace std ; int main()/ 主函数 / 主函数开始float x=0.0 , y=0.0 ;/ 声明x,y为浮点型变量,并初始化为0cout 请输入x x ; / 从键盘输入实数送至 x 中if (x0) / 如果x0,将1赋给 y y=1; elseif (x=0) / 如果x=0,将 0 赋给 y y=0; else y=-1; / 否则(x0),将 -1赋给 ycout 当x= x 时, y= y endl; / 输出x,y的值 return 0 ; /主函数结束3738NS图有了上述了解之后,我们来看解“谁做的好事”的程序框图图 4.738NS图有了上述了

17、解之后,我们来看解“谁做的好事”的程序框39现在我们来分析“谁做的好事”的NS流程图。它是由两大块组成的,如图4.8循环体for(k=0; k4; k+)语句1;图 4.8第一块循环结构第二块分支结构39现在我们来分析“谁做的好事”的NS流程图。它是由两大块组40 第一块是循环结构,功能是产生被试对象,依次为A、B、C、D。并测试四句话有多少句为真,如有3句为真,则可确定做好事者,同时置有解标志为1。 第二块为分支结构,功能是判断是否无解,如为真,则输出无解信息。 这是粗看。再往细看,第一块的循环体又由两块组成,如图4.9,中含两条赋值语句中含一条分支语句40 第一块是循环结构,功能是产生被试

18、对象,41希望大家掌握NS图,这对今后的学习会有好处。按照程序框图很容易写出程序(如下页所示)thisman = A+k;sum=( thisman!=A )+ ( thisman=C )+ ( thisman=D )+ ( thisman!=D );图 4.9sum = 3真假输出该被测试者;有解标志置1;41希望大家掌握NS图,这对今后的学习会有好处。按照程序框42/ */ * 程 序 名:4_5.cpp */ * 作 者:wuwh */ * 编制时间:2001年8月 */ * 主要功能:谁做的好事 */ *42/ *43#include / 预编译命令using namespace st

19、d ;int main() / 主函数 / 主函数开始int g=0 ; / 整型变量,初始化为0,表示“无解”for(int k=0;k4;k=k+1 ) / k是循环控制变量 / for 循环体开始char thisman = A+k;int sum = ( thisman!=A )+ ( thisman=C ) + ( thisman=D ) + ( thisman!=D );if (sum=3) / 如果3句话为真,则输出该人 cout 做好事者为 char(A+k) endl; g=1; / 有解标志置1,表示找到解了 / for 循环体结束if (g!=1) cout Cant f

20、ound! endl; / 输出无解信息 return 0 ; 43#include 444445换个思路 数字 0 表示 A 0 A 数字 1 表示 B 1 B 数字 2 表示 C 2 C 数字 3 表示 D 3 D 让 K 表示要找的人,K从0到3,表示从A 找到D,这时 A说:不是我; 可形式化为 K !=0; B说:是C ; 可形式化为 K=2; C说:是D; 可形式化为 K=3; D说:他胡说; 可形式化为 K!=3;45换个思路46/ */ * 程 序 名:3_6.cpp */ * 作 者:wuwh */ * 编制时间:2001年8月 */ * 主要功能:谁做的好事 */ *#in

21、clude / 预编译命令void main()/ 主函数 / 主函数开始int g=0; / 声明变量为整数类型,初始化为0for(int k=0; k4; k+) / 循环从k为0到3,int sum=0; / 用sum累计真话数if (k!=0) sum=sum+1; / 如A的话为真,则让sum加1;if (k=2) sum=sum+1; / 如B的话为真,则让sum加1;if (k=3) sum=sum+1; / 如C的话为真,则让sum加1;if (k!=3) sum=sum+1; / 如D的话为真,则让sum加1;if (sum=3)/ 若有三句话为真,则做下列两件事 cout

22、This man is char(A+k) endl; / 输出做好事者 g=1;/ 让有解标志置1if (g!=1)/ 则输出无解信息 cout Cant found! endl;/ 主函数结束46/ *47for ( int k = 0; k 4; k+ )int sum=0;if ( k != 0 ) sum = sum+1; / 如A的话为真, 则让sum加1;if ( k =2 ) sum = sum+1; / 如B的话为真,则让sum加1;if ( k =3 ) sum = sum+1; / 如C的话为真,则让sum加1;if ( k != 3 ) sum = sum+1; / 如D的话为真,则让sum加1; . . .47for ( i

温馨提示

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

评论

0/150

提交评论