逻辑思维与逻辑问题.ppt_第1页
逻辑思维与逻辑问题.ppt_第2页
逻辑思维与逻辑问题.ppt_第3页
逻辑思维与逻辑问题.ppt_第4页
逻辑思维与逻辑问题.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

逻辑思维与逻辑问题,闰年,我们知道有些年份是闰年,有366天,其规则为如果年份能被400整除,那么它是闰年;否则,如果年份能被4整除并不能被100整除,那么它是闰年,否则为平年,请写一个程序,输入年份,计算此年份是否为闰年。,目前我们所学能做的,整除计算 如果a整除b,等价于b对于a取余为0。 如果a不能整除b,等价于b对于a取余不为0。 显然光有这些不能完成任务的计算。,我们还需要什么?,根据余数的结果对程序进行不同处理 关系运算和关系表达式 条件分支语句,关系运算与关系表达式,用于将数值大小关系使用计算机语言进行描述。 关系运算符,一共6个 = 等于 != 不等于 大于 = 大于等于 = 小于等于,关系表达式,一般形式 关系运算符 如果表达式1的值与表达式2的值满足关系运算符的关系,则此关系表达式的值为1,否则为0。 比如ab,如果a的值为1,b的值为2,则此表达式的值为0;如果a的值为2,b的值为1,则此表达式的值为1。 C语言中使用0表示假,非0表示真,关系表达式值的示例程序,#include int main() printf(“34 的逻辑值是%dn“,34); printf(“3=4 的逻辑值是%dn“,3=4); printf(“3=4 的逻辑值是%dn“,3=4); printf(“3!=4 的逻辑值是%dn“,3!=4); printf(“3=4 的逻辑值是%dn“,3=4); return 0; ,目前我们进了一步,我们可以计算年份是否整除某一个数了。 先定义一个整型变量year来存储用户输入的年份,分支结构,通过计算关系,我们对不同的情况需要进行不同的处理,我们需要学习分支结构。,if 语句,C语言中使用if语句来实现分支结构。 (1) 第1种情况 if (表达式) 语句1; 如果表达式为真,则只执行语句1;否则什么都不做。,if 语句,(2) 第2种情况 if(表达式) 语句块1; 如果表达式为真,则执行语句块1(可能是多条语句)的内容;否则什么都不做。,if 语句,(3) 第3种情况 if(表达式) 语句1; else 语句2; 如果表达式为真,则执行语句1;否则执行语句2。,if 语句,(4) 第4种情况 if(表达式) 语句块1; else 语句块2; 如果表达式为真,则执行语句块1;否则执行语句块2;,if语句的嵌套,由于if语句的子句中也可以是if语句,所以会出现if语句的嵌套情况 if(表达式1) if(表达式2) 语句1; else 语句2;,是哪一种?,else总和它之前的未匹配的最近的一个if匹配 if(表达式1) if(表达式2) 语句1; else 语句2;,强烈建议,建议对所有子句都是用花括号括起来, 这样一来层次很清晰, 二来不会因为if-else匹配问题导致程序逻辑错误。,分支结构实例,计算分段函数,处理流程,判断x的值,根据不同的值,做不同的处理,解决任务4-1,我们学习了if语句后,就有能力解决任务4-1了,【任务4-2】计算器,请设计一个计算器,支持加,减,乘,除四种操作,四种操作分别用操作符(+,-,*,/)表示,每次用户先输入一个操作符,然后输入两个数,计算器输出计算结果。比如输入“+ 1.1 2.2”,输出1.1+2.2=3.3。,我们所学的知识够不够?,读入字符和数值 scanf 判断操作符类型 if 计算数值 算术运算 OK,我们学的已经可以解决这个问题了!,例程,例程不够优美 if-else的嵌套太多了,不清晰,很累赘 C语言提供一个多路开关语句switch,switch,switch(表达式) case 值1: 操作1; break; case 值2: 操作1; break; . case 值n: 操作n; break; default: 其他情况下的操作; break; ,注意点,(1) 表达式的值和case子句的值必须是整型,字符型(注意是字符,不是字符串)或者枚举型。,注意点,(2) break语句在switch中表示跳出switch的结构,也就是说程序运行break语句后,直接会跳到switch语句结构的“”后面一条语句。如果进行对应的操作后不写break语句,那么程序会继续顺序执行。,注意点,(3) default项可以缺省,如果缺省而表达式计算的值又没有case子句的值与之匹配,则程序什么都不做。,使用switch完成任务4-2,if-else 与 switch的比较,switch能做的,if-else一定能做 if-else能做的,switch不一定能做,或者不好使用switch实现 只有当分类值很容易通过计算得到时,使用switch才简洁和优美,否则不如用if-else 小技巧 如果分区范围是有规律的,则通过计算可以得到范围值,小技巧示例,计算下列分段函数 y= 10*x 0= x 10; y= 20*x 10= x 20; y= 30*x 20= x 30; int k; double x,y; k= (int)x/10;,【任务4.3】猜比赛结果,一天,湘潭大学ACM/ICPC队的四支候选队展开比赛。比赛完,4名队长问教练Eric最后比赛谁赢了。Eric让他们猜: A说:“不是我们队,也不是C队。” B说:“是我们或者D队。” C说:“是A队,不是B队。” D说:“B猜错了。” Eric说只有一个人猜对了,请问最后是谁赢得了比赛?,逻辑运算与逻辑表达式,每个子句之间的关系和D所说的话,我们没有办法用已学的知识进行处理。在这里我们要引入一个新的计算逻辑运算。,逻辑运算,逻辑与 & a & b a与b往往是关系表达式,a与b同时为真,则表达式为真,否则为假,逻辑运算,逻辑或 | a | b a与b只要有1个为真,则表达式为真,否则为假,逻辑运算,逻辑非 ! !a a为假,则表达式为真,否则为假,优先级上!最高,&比|高 不记得就全部打上括号,使用逻辑表达式表示4个人说的话,枚举法的思路,分析任务4-3,我们可以依次假设A,B,C,D为winner, 然后测试A,B,C,D所说的4句话,看是否满足“只有一个人猜对了”的条件,即只有一句话的逻辑表达式结果为真的。 如果满足,则我们的假设成立,否则我们的假设错误。,枚举法,又叫穷举法,即把所有可能的情况都进行一次计算,最后得到整个问题的计算结果。,“只有一个人猜对”等价于只有一句话的逻辑表示式结果为真,那么我们可以将这4句话的逻辑结果累加,如果结果为1,则表明只有一句话的逻辑结果为真。,winner=A,winner=B,winner=C,笨笨的写法,如果题目有100人怎么办? 这么写太麻烦了,也没有必要。 每次的测试计算是一样,只是winner的值不一样 我们需要依次遍历winner的可能状态,即一个一个测试,循环结构,循环结构是计算机程序中最常用的结构,它能充分地利用计算机上擅长做重复运算的特点。 C语言中可以使用for语句,while语句和do-while语句实现循环结构, 其中for是用得最多,也是最灵活的一种,for语句,for(表达式1;表达式2;表达式3) 循环体(语句组); for语句中表达式1,2,3都可以缺省 但括号中的“;”不能缺少。 表达式2缺省时,那么循环判断结束条件为永真。,使用for循环解题的实例,(1) 输入n个整数,求这个n个整数的累加和。一共输入n+1个整数,第一个整数为n。 求n(n0)个自然数中最大的一个。一共输入n+1个自然数,第一个整数为n。,解决任务4-3,【任务4-4】丑数,当一个自然数只含有质因子2,3,5,7的时候,我们称这个数为丑数。现在给你一个自然数,请判断这个数是否是丑数。,解题思路,(1) 枚举测试2到7的因子,如果为4和6就跳过测试; (2) 不断地用因子去试除自然数x,直到因子不能整除自然数x; (3) 如果x为1,则直接跳出测试,这个数为丑数; (4) 如果所有因子测试完,x不为1,则这个数包含非2,3,5,7的因子,不为丑数。,如果为4和6就跳过测试; continue continue语句的意思是循环体后面的工作都不做了,直接跳回循环最前面去 如果x为0,则直接跳出测试 break break语句的作用在于跳出本层循环,直接到循环体外。,while语句,while(表达式) 循环体(语句块); 为了使循环测试表达式为假,使得循

温馨提示

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

评论

0/150

提交评论