资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,上一页,下一页,C,语言程序设计教程,1,第,4,章选择结构程序设计,4.1,关系运算符与关系表达式,4.2,逻辑运算符与逻辑表达式,4.3,选择结构控制语句,4.4,条件去处符和条件表达表,4.5,选择结构程序综合举例,2,4.1,关系运算符与关系表达式,关系运算也称为比较运算,也就是对两个运算数的大小关系进行比较,判定两个数值之间的关系是否符合关系运算符的要求的运算。关系运算的结果只有真和假两种,由于,C,语言没有设置逻辑类型数据,因此使用整数,1,表示真,整数,0,表示假,即如果关系表达式的运算结果只能是,1,或,0,。,运算符,作用,运算数,结合性,优先级,小于,双目,左结合,10,大于,双目,左结合,10,=,大于等于,双目,左结合,10,=,等于,双目,左结合,9,!=,不等于,双目,左结合,9,3,例如:,(1),比较整型变量,k,大于,0,,表达式为:,k0,(2),比较考试成绩,score,大于等于,60,,表达式为:,score=60,(3),比较整型变量,k,模,2,等于,0,,即判断,k,是否是偶数:,k%2=0,(4),比较字符变量,ch,的值等于,A,,表达式为:,ch!=A,由于关系运算符经常与算术运算符和赋值运算符等组成复杂的表达式,因此进行运算时,需要考虑它们之间的优先级关系,关系运算符的优先级低于算术运算符,但是高于赋值运算符。例如:,(1),表达式,k%2=0,等价于,(k%2)=0,,是判断,k%2,的结果是否与,0,相等,这是一个关系表达式。,(2),表达式,a=53,等价于,a=(53),,是把,53,的结果,1,赋值给,a,,这是一个赋值表达式。,例,4-1,:阅读程序,#include,int main(),int k=3,score=75;,char ch=B;,printf(k0,的运算结果,:%dn,k0);,printf(score=60,的运算结果,:%dn,score=60);,printf(k%2=0,的运算结果,:%dn,k%2=0);,printf(ch!=A,的运算结果,:%dn,ch!=A);,return 0;,k0,的运算结果,:1,score=60,的运算结果,:1,k%2=0,的运算结果,:0,ch!=A,的运算结果,:1,5,4.2,逻辑运算符与逻辑表达式,有时程序中需要判断的条件比较复杂,是由多个简单条件组成的复合条件。,C,语言使用逻辑运算符和逻辑表达式解决复杂条件的表示。,运算符,作用,运算数,结合性,优先级,&,逻辑与,双目,左结合,5,|,逻辑或,双目,左结合,4,!,逻辑非,单目,右结合,14,6,逻辑运算符连接运算数构成的式子称为逻辑表达式。与关系运算相同,逻辑表达式的运算结果也只有真(,1,)和假(,0,)两种,但是逻辑表达式要求其运算数也必须是表示真和假的逻辑值。,C,语言中,判断运算数的真假时,任何非,0,数值被判定为真,只有,0,才被判定为假。,a,b,!a,a&b,a|b,真,(,非,0),真,(,非,0),假,(0),真,(1),真,(1),真,(,非,0),真,(,非,0),假,(0),假,(0),真,(1),假,(0),假,(0),真,(1),假,(0),真,(1),假,(0),假,(0),真,(1),假,(0),假,(0),7,例如:,(1),判断整型变量,k,的值是否在,0,100,之间,表达式为:,k=0&k=A&c0&k%2=1,(4),判断年份,y,是否为闰年,表达式为:,y%4=0&y%100!=0|y%400=0,逻辑表达式计算过程中,为了提高程序运行效率,,C,语言在逻辑运算中使用了,“,短路运算,”,规则,。即除了要考虑表达式中各个运算符的运算规则、优先级和结合性外,还需要遵循以下两条规则:,(1),逻辑表达式从左向右依次计算各个运算数的值。,(2),在上述从左向右计算过程中,任何时候只要能够确定最终逻辑表达式的值,则计算过程结束。,8,4.3,选择结构控制语句,程序设计中选择结构程序对应的常见问题分为三种情况:,(1),决定某个操作做还是不做,称为单分支选择结构,对某个问题的处理经常是根据某个条件进行判断,如果条件成立,则执行特定的语句来处理问题,否则什么都不做。,(2),决定在两个相关的操作中选择哪一个来做,称为双分支选择结构,需要处理的两个操作往往和同一个条件相关,当条件成立时做一个操作,当条件不成立时做另外一个操作。,(3),确定在多个相关的操作中选择哪一个来做,称为多分支选择结构,该类问题相比前两种问题要复杂的多,它通常涉及多个条件的组合运用,通常的做法是将多个条件合理安排,把多分支结构处理成多个双分支的结构处理。,C,语言提供,if,和,switch,两种选择结构控制语句,通过使用这两种语句或语句组合解决上述三种情况的选择结构程序设计。,语句,真,假,表达式,1.if,语句的最简单形式:,说明:,1.,条件表达式的值为,1,或,0,,必须用,(),括住,2.,若有多条语句(复合语句)时,用,括住。,3.(,条件表达式,),后不要加;,if(,条件表达式,),语句;,if(,条件表达式,),语句;语句;,例,4-2,:从键盘输入一个整数,计算并输出其绝对值。,#include,int main(),int x;,printf(Input an integer:);,scanf(%d,if(x0),x=-x;/,只有本句是,if,结构的语句,printf(|x|=%dn,x);,return 0;,Input an integer:-10,|x|=10,Input an integer:100,|x|=100,例,4-3,:从键盘输入两个整数,a,和,b,,要求程序按数值从大到小的顺序输出这个整数。,思路分析:求解本题有多种方法,这里使用交换变量值的思路,,(1),输入整数,a,和,b,的值。,(2),判断条件,ab,是否成立,如果成立,则交换变量,a,和,b,的值,否则直接执行下一步。,(3),按照先,a,后,b,的顺序输出两个变量的值。,#include,int main(),int a,b,c;,printf(Input 2 integers(a b):);,scanf(%d%d,if(ab)/,由于交换操作需要三条语句完成,所以使用复合语句,c=a;a=b;b=c;,printf(%d,%dn,a,b);,return 0;,Input 2 integers(a b):100 10,100,10,Input 2 integers(a b):10 100,100,10,2.,双分支,if,语句,if (,表达式,),语句,1,else,语句,2,首先先判断表达式的值,若为非,0,则执行语句,1,若为,0,则执行语句,2,语句,1,真,假,语句,2,表达式,执行过程:,if,语句的双分支形式,在语法上视为一条语句。,例,4-4,:判断整数的奇偶性。从键盘输入一个整数,x,,根据其奇偶性输出,x,是奇数或,x,是偶数。,#include,int main(),int x;,printf(Input an integer:);,scanf(%d,if(x%2=0),printf(%d is odd number.n,x);/,真,分支,else,printf(%d is even number.n,x);/,假,分支,return 0;,Input an integer:12,12 is odd number.,Input an integer:5,5 is even number.,例,4-5,:修改例,3-6,使用海伦公式计算三角形面积程序的要求,当输入的三个边长能够构成三角形时,计算面积;否则,输出不能构成三角形。,思路分析:三角形面积的计算过程与原例题相同,新要求是在,“,三个边长能构成三角形,”,这一条件成立时才进行计算面积,否则直接输出提示信息。根据数学知识,这一条件可以描述为,“,任意两个边长之和大于第三个边长,”,,输入三个边长,a,、,b,、,c,后,条件可以使用如下的逻辑表达式描述:,a+bc&a+cb&b+ca,#include,#include,int main(),double a,b,c,s,area;,printf(Input a b c:);,scanf(%lf%lf%lf,if(a+bc&a+cb&b+ca),/,真,分支使用复合语句,s=(a+b+c)/2;,area=sqrt(s*(s-a)*(s-b)*(s-c);,printf(area=%.2fn,area);,else,printf(Not a triangle.n);/,假,分支只有一条语句,return 0;,Input a b c:3.5 4.5 5.5,area=7.85,Input a b c:3.0 4.0 10.0,Not a triangle.,3.,使用嵌套,if,语句实现多分支结构,if,语句的语句,1,和语句,2,又称为,if,的执行语句。,if,的执行语句在语法上是一条语句,可以是任何类型的语句,简单语句、复合语句、空语句、流程控制语句都可以作为,if,的执行语句。,下面我们通过一个例子分别介绍用不同的语句作为,if,的执行语句的情形:,例:计算分段函数:,y=,2*x,x=-10,2+x,-10 x=0,x-2,0 x10,方法一:用简单语句,#include,main(),float x,y;,scanf(“%f”,if(x=-10)y=2*x;,if(-10 x,if(010)y=x/10;,printf(“ny=%f”,y);,方法二:用,if,语句做语句,2,#include,main(),float x,y;,scanf(“%f”,if(x=-10)y=2*x;,else if(x=0)y=2+x;,else if(x=10)y=x-2;,else y=x/10;,printf(“ny=%f”,y);,这种用,if,语句作为上一层,if,语句的语句,2,的结构,,称为,if,语句的多分支选择结构。,if (,表达式,),语句,1 else if(,表达式,),语句,2 else,先判断表达式,1,的值,非,0,就执行下面的语句,为,0,就执行下一个判断,一直这样做下去,表达式,1,真,语句,1,假,表达式,2,表达式,3,语句,4,语句,3,语句,2,真,真,假,假,直到得出最后结果,流程图如左:,方法三:语句,1,与语句,2,都为,if,语句,#include,main(),float x,y;,scanf(“%f”,if(x=-10)y=2+x;,else y=2*x;,else,if(x=10)y=x-2;,else y=x/10;,printf(“ny=%f”,y);,这种用,if,语句作为上一层,if,语句的语句,1,和语句,2,的结构,称为,if,语句的嵌套。,if,语句的二层嵌套结构如下:,if(,表达式,1),if(,表达式,1_2),语句,1_1,else,语句,1_2,else,if(,表达式,2_1),语句,2_1,else,语句,2_2,表达式,1_2,表达式,1,表达式,1_2,语句,1_1,语句,1_2,语句,2_1,语句,2_2,非,0,0,0,非,0,0,非,0,if(expr1),if(expr2)statement1,else statement2,else,if(expr3)statement3,else statement4,内嵌,if,内嵌,if,if(expr1),if(expr2),statement1,else,statement2,内嵌,if,if(expr1),if(expr2),statement1,else,statement3,内嵌,if,if(expr1),statement1,else,if(exp
展开阅读全文