3 逻辑思维与逻辑问题20

上传人:繁星 文档编号:88242599 上传时间:2019-04-21 格式:PPT 页数:59 大小:613.50KB
返回 下载 相关 举报
3 逻辑思维与逻辑问题20_第1页
第1页 / 共59页
3 逻辑思维与逻辑问题20_第2页
第2页 / 共59页
3 逻辑思维与逻辑问题20_第3页
第3页 / 共59页
3 逻辑思维与逻辑问题20_第4页
第4页 / 共59页
3 逻辑思维与逻辑问题20_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《3 逻辑思维与逻辑问题20》由会员分享,可在线阅读,更多相关《3 逻辑思维与逻辑问题20(59页珍藏版)》请在金锄头文库上搜索。

1、逻辑思维与逻辑问题,为讲解关系运算与关系表达式,先引入任务:闰年的计算,我们知道有些年份是闰年,有366天,其规则为如果年份能被400整除,那么它是闰年;否则,如果年份能被4整除并不能被100整除,那么它是闰年,否则为平年,请写一个程序,输入年份,计算此年份是否为闰年。,目前我们所学能做的,整除计算 如果a被b整除,等价于a=k*b+r,r=0。 如果a不能被b整除,等价于a=k*b+r,0rb 。 显然光有这些不能完成任务的计算。,我们还需要什么?,根据余数的结果对程序进行不同处理 关系运算和关系表达式 条件分支语句,关系运算与关系表达式,用于将数值大小关系使用计算机语言进行描述。 关系运算

2、符,一共6个 = 等于 != 不等于 大于 = 大于等于 = 小于等于,关系表达式,一般形式 关系运算符 如果表达式1的值与表达式2的值满足关系运算符的关系,则此关系表达式的值为1,否则为0。 比如ab,如果a的值为1,b的值为2,则此表达式的值为0;如果a的值为2,b的值为1,则此表达式的值为1。 C语言中使用0表示假,非0表示真,关系表达式值的示例程序,3_1_relation #include int main() printf(“34 的逻辑值是%dn“,34); printf(“3=4 的逻辑值是%dn“,3=4); printf(“3=4 的逻辑值是%dn“,3=4); print

3、f(“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(可能是多条语句)的内容;否则什么都不做。,i

4、f 语句,(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;,强烈建议,建议对所有子句都是用花括号括起来, 这样一来层次很清晰,

5、 二来不会因为if-else匹配问题导致程序逻辑错误。,分支结构实例,计算分段函数,处理流程,判断x的值,根据不同的值,做不同的处理,见34页程序3_2_func.c,解决任务3-1,我们学习了if语句后,就有能力解决任务3-1了,见35页程序3_3_leapyear.c,【任务3-2】计算器,请设计一个计算器,支持加,减,乘,除四种操作,四种操作分别用操作符(+,-,*,/)表示,每次用户先输入一个操作符,然后输入两个数,计算器输出计算结果。比如输入“+ 1.1 2.2”,输出1.1+2.2=3.3。,我们所学的知识够不够?,读入字符和数值 scanf 判断操作符类型 if 计算数值 算术运

6、算 OK,我们学的已经可以解决这个问题了!,见36页程序3_4_caculator_if.c 例程不够优美 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的结构,也就是说程

7、序运行break语句后,直接会跳到switch语句结构的“”后面一条语句。如果进行对应的操作后不写break语句,那么程序会继续顺序执行。,注意点,(3) default项可以缺省,如果缺省而表达式计算的值又没有case子句的值与之匹配,则程序什么都不做。,使用switch完成任务3-2,见39页程序:3_4_caculator_switch.c,if-else 与 switch的比较,switch能做的,if-else一定能做 if-else能做的,switch不一定能做,或者不好使用switch实现 只有当分类值很容易通过计算得到时,使用switch才简洁和优美,否则不如用if-else

8、小技巧 如果分区范围是有规律的,则通过计算可以得到范围值,小技巧示例,计算下列分段函数 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; 可见演示程序,【任务3.3】猜比赛结果,一天,湘潭大学ACM/ICPC队的四支候选队展开比赛。比赛完,4名队长问教练Eric最后比赛谁赢了。Eric让他们猜: A说:“不是我们队,也不是C队。” B说:“是我们或者D队。” C说:“是A队,不是B队。” D说:“B猜错了。” Eric说只有一个人猜对了,请问最后是谁赢得了比赛?,逻辑运算与

9、逻辑表达式,每个子句之间的关系和D所说的话,我们没有办法用已学的知识进行处理。在这里我们要引入一个新的计算逻辑运算。,逻辑运算,逻辑与 & a & b a与b往往是关系表达式,a与b同时为真,则表达式为真,否则为假,逻辑运算,逻辑或 | a | b a与b只要有1个为真,则表达式为真,否则为假,逻辑运算,逻辑非 ! !a a为假,则表达式为真,否则为假,优先级上!最高,&比|高 不记得就全部打上括号,使用逻辑表达式表示4个人说的话,枚举法的思路,分析任务3-3,我们可以依次假设A,B,C,D为winner, 然后测试A,B,C,D所说的4句话,看是否满足“只有一个人猜对了”的条件,即只有一句话

10、的逻辑表达式结果为真的。 如果满足,则我们的假设成立,否则我们的假设错误。,枚举法,又叫穷举法,即把所有可能的情况都进行一次计算,最后得到整个问题的计算结果。,“只有一个人猜对”等价于只有一句话的逻辑表示式结果为真,那么我们可以将这4句话的逻辑结果累加,如果结果为1,则表明只有一句话的逻辑结果为真。,winner=A,winner=B,winner=C,笨笨的写法 见程序3_5_winner,如果题目有100人怎么办? 这么写太麻烦了,也没有必要。 每次的测试计算是一样,只是winner的值不一样 我们需要依次遍历winner的可能状态,即一个一个测试,循环结构,循环结构是计算机程序中最常用的

11、结构,它能充分地利用计算机上擅长做重复运算的特点。 C语言中可以使用for语句,while语句和do-while语句实现循环结构, 其中for是用得最多,也是最灵活的一种,for语句,for(表达式1;表达式2;表达式3) 循环体(语句组); 表达式1:对循环变量赋初值; 表达式2:对循环结束条件进行 测试; 表达式3:改变循环变量的值, 并使得有满足结束条件的趋势,注意事项: for语句中表达式1,2,3都可以缺省 但括号中的“;”不能缺少。 表达式2缺省时,那么循环判断结束条件为永真。,使用for循环解题的实例,(1) 输入n个整数,求这个n个整数的累加和。一共输入n+1个整数,第一个整数

12、为n。 见程序3_6_sum (2)求n(n0)个自然数中最大的一个。一共输入n+1个自然数,第一个整数为n。 见程序3_7_max 第一个整数为n:控制循环次数为n次,解决任务3-3,见45页程序3_8_guess.c,【任务3-4】丑数,循环中两个重要控制语句:break和continue语 句,结合该任务来学习 当一个自然数只含有质因子2,3,5,7的时候,我们称这个数为丑数。现在给你一个自然数,请判断这个数是否是丑数。,解题思路,(1) 枚举测试2-7的因子,如果为4和6就跳过测试; (2) 不断地用因子去试除自然数x(x/i),直到因子不能整除自然数x; (3) 如果x为1,则直接跳

13、出测试,这个数为丑数; (4) 如果所有因子测试完,x不为1,则这个数包含非2,3,5,7的因子,不为丑数。 见47页程序3_8_ugly_number.c,如果为4和6就跳过测试; continue continue语句的意思是循环体后面的工作都不做了,直接跳回循环最前面去 如果x为0,则直接跳出测试 break break语句的作用在于跳出本层循环,直接到循环体外。,while语句,while(表达式) 循环体(语句块); 为了使循环测试表达式为假,使得循环结束,那么在循环体中,必须修改表达式中的一些变量的值,使得循环有结束的可能,否则就会出现死循环。,do 循环体(语句块); while(表达式); 与while不同的是,do-while是先执行一次循环体,再进行循环结束测试,所以它至少会执行一次循环体。,与while不同的是,do-while是先执行一次循环体,再进行循环结束测试,所以它至少会执行一次循环体。,第三章 介绍结束 课后练习介绍的程序实例!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号