资源描述
单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,逻辑思维与逻辑问题,闰年,我们知道有些年份是闰年,有,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(34,的逻辑值是,%dn,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,来存储用户输入的年份,语句,写成表达式,year=2000,year=2008,year=1900,被,400,整除,year%400=0,1,0,0,被,4,整除,year%4=0,1,1,1,不被,100,整除,year%100!=0,0,1,0,分支结构,通过计算关系,我们对不同的情况需要进行不同的处理,我们需要学习分支结构。,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 0,)个自然数中最大的一个。一共输入,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(,表达式,),循环体(语句块);,为了使循环测试表达式为假,使得循环结束,那么在循环体中,必须修改表达式中的一些变量的值,使得循环有结束的可能,否则就会出现死循环。,do,循环体(语句块);,while(,表达式,),;,与,while,不同的是,,do-while,是先执行一次循环体,再进行循环结束测试,所以它至少会执行一次循环体。,与,while,不同的是,,do-while,是先执行一次循环体,再进行循环结束测试,所以它至少会执行一次循环体。,
展开阅读全文