《(精品)逻辑思维与逻辑问题.ppt》由会员分享,可在线阅读,更多相关《(精品)逻辑思维与逻辑问题.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、逻辑思维与逻辑问题逻辑思维与逻辑问题闰年闰年l我们知道有些年份是闰年,有我们知道有些年份是闰年,有366366天,其规则天,其规则为如果年份能被为如果年份能被400400整除,那么它是闰年;否整除,那么它是闰年;否则,如果年份能被则,如果年份能被4 4整除并不能被整除并不能被100100整除,整除,那么它是闰年,否则为平年,请写一个程序,那么它是闰年,否则为平年,请写一个程序,输入年份,计算此年份是否为闰年。输入年份,计算此年份是否为闰年。目前我们所学能做的目前我们所学能做的l整除计算整除计算l如果如果a a整除整除b b,等价于,等价于b b对于对于a a取余为取余为0 0。l如果如果a a
2、不能整除不能整除b b,等价于,等价于b b对于对于a a取余不为取余不为0 0。l显然光有这些不能完成任务的计算。显然光有这些不能完成任务的计算。我们还需要什么?我们还需要什么?l根据余数的结果对程序进行不同处理根据余数的结果对程序进行不同处理n关系运算和关系表达式关系运算和关系表达式n条件分支语句条件分支语句关系运算与关系表达式关系运算与关系表达式l用于将数值大小关系使用计算机语言进行描用于将数值大小关系使用计算机语言进行描述。述。l关系运算符,一共关系运算符,一共6 6个个n=等于等于n!=不等于不等于n 大于大于n =大于等于大于等于n=小于等于小于等于关系表达式关系表达式l一般形式一
3、般形式n 1 关系运算符关系运算符 2 n如果表达式如果表达式1 1的值与表达式的值与表达式2 2的值满足关系运算符的值满足关系运算符的关系,则此关系表达式的值为的关系,则此关系表达式的值为1 1,否则为,否则为0 0。n比如比如ab,ab,如果如果a a的值为的值为1 1,b b的值为的值为2 2,则此表达式,则此表达式的值为的值为0 0;如果;如果a a的值为的值为2 2,b b的值为的值为1 1,则此表达式,则此表达式的值为的值为1 1。lC C语言中使用语言中使用0 0表示假,非表示假,非0 0表示真表示真关系表达式值的示例程序关系表达式值的示例程序#include#include i
4、ntint main()main()printf(34 printf(34 的逻辑值是的逻辑值是%dn,34);%dn,34);printf(34 printf(34 的逻辑值是的逻辑值是%dn,34);%dn,3=4 printf(3=4 的逻辑值是的逻辑值是%dn,3=4);%dn,3=4);printf(3=4 printf(3=4 的逻辑值是的逻辑值是%dn,3=4);%dn,3=4);printf(3!=4 printf(3!=4 的逻辑值是的逻辑值是%dn,3!=4);%dn,3!=4);printf(3=4 printf(3=4 的逻辑值是的逻辑值是%dn,3=4);%dn,3=
5、4);return 0;return 0;目前我们进了一步目前我们进了一步l我们可以计算年份是否整除某一个数了。我们可以计算年份是否整除某一个数了。l先定义一个整型变量先定义一个整型变量yearyear来存储用户输入的年份来存储用户输入的年份语句写成表达式year=2000year=2008year=1900被400整除year%400=0100被4整除year%4=0111不被100整除year%100!=0010分支结构分支结构l通过计算关系,我通过计算关系,我们对不同的情况需们对不同的情况需要进行不同的处理,要进行不同的处理,我们需要学习分支我们需要学习分支结构。结构。if if 语句语
6、句lC C语言中使用语言中使用ifif语句来实现分支结构。语句来实现分支结构。l(1)(1)第第1 1种情况种情况if(if(表达式表达式)语句语句1 1;n如果表达式为真,则只执行语句如果表达式为真,则只执行语句1 1;否则什么都不;否则什么都不做。做。if if 语句语句l(2)(2)第第2 2种情况种情况if(if(表达式表达式)语句块语句块1 1;n如果表达式为真,则执行语句块如果表达式为真,则执行语句块1 1(可能是多条语(可能是多条语句)的内容;否则什么都不做。句)的内容;否则什么都不做。if if 语句语句l(3)(3)第第3 3种情况种情况if(if(表达式表达式)语句语句1
7、1;elseelse语句语句2 2;n如果表达式为真,则执行语句如果表达式为真,则执行语句1 1;否则执行语句;否则执行语句2 2。if if 语句语句l(4)(4)第第4 4种情况种情况if(if(表达式表达式)语句块语句块1 1;elseelse 语句块语句块2 2;n如果表达式为真,则执行语句块如果表达式为真,则执行语句块1 1;否则执行语句块;否则执行语句块2 2;ifif语句的嵌套语句的嵌套 l由于由于ifif语句的子句中也可以是语句的子句中也可以是ifif语句,所以语句,所以会出现会出现ifif语句的嵌套情况语句的嵌套情况 lif(if(表达式表达式1)1)if(if(表达式表达式
8、2)2)语句语句1 1;elseelse语句语句2 2;是哪一种?是哪一种?lelseelse总和它之前的未匹配的最近的一个总和它之前的未匹配的最近的一个ifif匹匹配配 lif(if(表达式表达式1)1)if(if(表达式表达式2)2)语句语句1 1;elseelse语句语句2 2;强烈建议强烈建议l建议对所有子句都是用花括号括起来建议对所有子句都是用花括号括起来,n这样一来层次很清晰,这样一来层次很清晰,n二来不会因为二来不会因为if-elseif-else匹配问题导致程序逻辑错误。匹配问题导致程序逻辑错误。分支结构实例分支结构实例l计算分段函数计算分段函数处理流程处理流程l判断判断x x
9、的值,根据不同的值,根据不同的值,做不同的处理的值,做不同的处理解决任务解决任务4-14-1l我们学习了我们学习了ifif语句后,语句后,就有能力解决任务就有能力解决任务4-4-1 1了了【任务任务4-24-2】计算器计算器l请设计一个计算器,支持加,减,乘,除四请设计一个计算器,支持加,减,乘,除四种操作,四种操作分别用操作符(种操作,四种操作分别用操作符(+,-,*,/)表示,每次用户先输)表示,每次用户先输入一个操作符,然后输入两个数,计算器输入一个操作符,然后输入两个数,计算器输出计算结果。比如输入出计算结果。比如输入“+1.1 2.2”+1.1 2.2”,输出,输出1.1+2.2=3
10、.31.1+2.2=3.3。我们所学的知识够不够?我们所学的知识够不够?l读入字符和数值读入字符和数值nscanfscanfl判断操作符类型判断操作符类型nififl计算数值计算数值n算术运算算术运算lOKOK,我们学的已经可以解决这个问题了!,我们学的已经可以解决这个问题了!例程例程l例程不够优美例程不够优美lif-elseif-else的嵌套太多了,不清晰,很累赘的嵌套太多了,不清晰,很累赘lC C语言提供一个多路开关语句语言提供一个多路开关语句switchswitchswitchswitchswitch(switch(表达式表达式)case case 值值1 1:操作操作1;1;brea
11、k;break;case case 值值2 2:操作操作1;1;break;break;.case case 值值n:n:操作操作n;n;break;break;default:default:其他情况下的操作其他情况下的操作;break;break;注意点注意点l(1)(1)表达式的值和表达式的值和casecase子句的值必须是整型,子句的值必须是整型,字符型(注意是字符,不是字符串)或者枚字符型(注意是字符,不是字符串)或者枚举型。举型。注意点注意点l(2)break(2)break语句在语句在switchswitch中表示跳出中表示跳出switchswitch的的结构,也就是说程序运行结
12、构,也就是说程序运行breakbreak语句后,直接语句后,直接会跳到会跳到switchswitch语句结构的语句结构的“”后面一条语句。后面一条语句。如果进行对应的操作后不写如果进行对应的操作后不写breakbreak语句,那么语句,那么程序会继续顺序执行。程序会继续顺序执行。注意点注意点l(3)default(3)default项可以缺省,如果缺省而表达式项可以缺省,如果缺省而表达式计算的值又没有计算的值又没有casecase子句的值与之匹配,则子句的值与之匹配,则程序什么都不做。程序什么都不做。使用使用switchswitch完成任务完成任务4-24-2if-else if-else 与
13、与 switchswitch的比较的比较lswitchswitch能做的,能做的,if-elseif-else一定能做一定能做lif-elseif-else能做的,能做的,switchswitch不一定能做,或者不不一定能做,或者不好使用好使用switchswitch实现实现n只有当分类值很容易通过计算得到时,使用只有当分类值很容易通过计算得到时,使用switchswitch才简洁和优美才简洁和优美,否则不如用否则不如用if-elseif-elsel小技巧小技巧n如果分区范围是有规律的,则通过计算可以得到如果分区范围是有规律的,则通过计算可以得到范围值范围值小技巧示例小技巧示例l计算下列分段函
14、数计算下列分段函数ly=10*x 0=x 10;y=10*x 0=x 10;ly=20*x 10=x 20;y=20*x 10=x 20;ly=30*x 20=x 30;y=30*x 20=x 0n0)个自然数中最大的一个。一共输)个自然数中最大的一个。一共输入入n+1n+1个自然数,第一个整数为个自然数,第一个整数为n n。解决任务4-3 【任务任务4-44-4】丑数丑数l当一个自然数只含有质因子当一个自然数只含有质因子2 2,3 3,5 5,7 7的时的时候,我们称这个数为丑数。现在给你一个自候,我们称这个数为丑数。现在给你一个自然数,请判断这个数是否是丑数。然数,请判断这个数是否是丑数。
15、解题思路解题思路l(1)(1)枚举测试枚举测试2 2到到7 7的因子,如果为的因子,如果为4 4和和6 6就跳就跳过测试;过测试;l(2)(2)不断地用因子去试除自然数不断地用因子去试除自然数x x,直到因子,直到因子不能整除自然数不能整除自然数x x;l(3)(3)如果如果x x为为1 1,则直接跳出测试,这个数为,则直接跳出测试,这个数为丑数;丑数;l(4)(4)如果所有因子测试完,如果所有因子测试完,x x不为不为1 1,则这个,则这个数包含非数包含非2 2,3 3,5 5,7 7的因子,不为丑数。的因子,不为丑数。l如果为如果为4 4和和6 6就跳过测试;就跳过测试;ncontinue
16、continuencontinuecontinue语句的意思是循环体后面的工作都不做语句的意思是循环体后面的工作都不做了,直接跳回循环最前面去了,直接跳回循环最前面去 l如果如果x x为为0 0,则直接跳出测试,则直接跳出测试nbreakbreaknbreakbreak语句的作用在于跳出本层循环,直接到循环语句的作用在于跳出本层循环,直接到循环体外。体外。whilewhile语句语句 while(while(表达式表达式)循环体(语句块);循环体(语句块);l为了使循环测试表达式为假,为了使循环测试表达式为假,使得循环结束,那么在循环使得循环结束,那么在循环体中,必须修改表达式中的体中,必须修改表达式中的一些变量的值,使得循环有一些变量的值,使得循环有结束的可能,否则就会出现结束的可能,否则就会出现死循环。死循环。dodo 循环体(语句块);循环体(语句块);while(while(表达式表达式);l与与whilewhile不同的是,不同的是,do-do-whilewhile是先执行一次循环体,是先执行一次循环体,再进行循环结束测试,所以再进行循环结束测试,所以它至少会执行一次循环体。它至少会执行一次循环体。与while不同的是,do-while是先执行一次循环体,再进行循环结束测试,所以它至少会执行一次循环体。