1、单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第4章,选择结构程序设计,北京科技大学 计算机系,C,语言程序设计,本章主要内容,4.1,if,语句,4.1.1,if,语句的一般形式,4.1.2,if,语句的嵌套,4.2,switch,语句,4.2.1,switch,语句的一般形式,4.2.2,break,语句,4.3 选择结构程序设计举例,2,简单分支语句,语句一般格式,if,(,表达式,),语句,功能:,计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。,内嵌语句,可为:,赋值语句,函数调
2、用语句,控制语句,复合语句,空语句,可为算术、关系、逻辑、赋值等表达式,3,简单分支语句的算法:,例如:,if,(x0)m+;,if,(ab),c=a;a=b;b=c;,表达式非0,T F,语句,N-S,结构图,语句,流程图,N,Y,表达式非0?,4,双重分支语句,语句一般格式,if,(,表达式,),语句,1,else,语句,2,功能:,计算表达式的值,如果它的值是一个非,0,值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句,2,,执行后续语句;否则跳过内嵌语句,1,,执行内嵌语句,2,,之后执行后续语句。,5,双重分支语句的算法:,例如:,if,(x0)m+;,else,m-;,if,(,c
3、h,=a&,ch,=z),ch,=,ch,-32;,printf,(,%cn,ch,);,else,printf,(,%cn,ch,);,表达式非0,T F,语句1 语句2,N-S,结构图,语句1,语句2,流程图,N,Y,表达式非0?,6,多重分支语句,语句一般格式,if,(,表达式,1,),语句,1,else if,(,表达式,2,),语句,2,else if,(,表达式,m,),语句,m,else,语句,n,功能:,依次计算并判断表达式,i,,为非0时执行后面的语句,都为0时,执行语句,n,无论执行完那个语句分支,都转到后续语句,7,多重分支语句的算法,流程图,表达式2?,表达式1?,语句
4、n,语句1,语句2,语句,m,Y,N,Y,N,N,Y,表达式,m?,8,多重分支语句的算法,N-S,结构图,表达式1?,T F,表达式2?,语句1,T F,语句2 ,表达式,m?,T F,语句,m,语句,n,例如:,if,(a=A&,ch,=65&,ch,=A&,ch,=A&,ch,=Z?,ch,+32:,ch,);,putchar,(,n,),11,4.1.2,if,语句的嵌套,如果,if,的内嵌语句中又使用了一个,if,语句,则构成,if,语句的嵌套。,【例4.,a】,比较两个整数的关系。,#,include,main(),int,x,y;,printf,(Enter integer X
5、 and Y:);,scanf,(%d%d,if,(x!=y),if,(x y),printf,(,XY,n);,else,printf,(,XY,n);,else,printf,(,X=Y,n);,应该正确判断:,if,的,内嵌语句,if,和,else,的配对,运行,jc4_a,提倡缩格书写,有利于阅读程序,12,if,语句嵌套的形式,简单,if,语句的嵌套形式,if,(,表达式),if,语句,双重(或多重)分支,if,语句的嵌套形式,if,(,表达式),if,语句,else,if,语句,可以是各种形式的,if,语句,可以是各种形式的,if,语句,如果是简单,if,语句,,必须用“”括起,1
6、3,例如:,if,(c=50),printf,(50=c=100n);,if,(c=50),printf,(50=c=100n);,else,printf,(c50n);,else,if,(c=150),printf,(100c150n);,if(c=50),printf,(50=c=100n);,else,printf,(cb),if(ac),if(ad)m=1;,else m=2;,else m=3;,问题:哪一个,else,和哪一个,if,相匹配?,规则:在,嵌套的,if,else,语句,中,,else,总是与,上面的离它最近的尚未配对的,if,配对。,15,举例,【例,4.4,】输入一
7、个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为,5,的倍数。,定义变量,x,输入,x,的值,x,是奇数,T F,输出“,odd”,x,是5的倍数 输出“,even”,T F,是5的倍数,16,程序:,main(),int,x;,scanf,(%d,if,(,x%2!=0,),printf,(%d is an odd n,x);,if,(,x%5=0,),printf,(%d is the times of 5 n,x);,else,printf,(%d is an even n,x);,运行,jc4_4,思考:如果没有,算法和输出如何?,17,学习,if,语句的难点,if else
8、语句的配对,正确用表达式描述条件,例如:当,x,大于5小于10时令,x,自增,if(5x10 )x+;,正确判断内嵌语句,例如:,if(x5&x 0,时,方程有,两个不相等的实根,:,x1=(,-,b+,sqrt,(d)/(2*a),x2=(,-,b-,sqrt,(d)/(2*a),当,d 0,计算重根,T F,输出重根 计算实根 计算虚根,输出实根 输出虚根,27,程序:,#,include math.h,main(),float a,b,c,d,x1,x2,lp,ip,;,scanf,(%f%f%f,printf,(the equation);,if(,fabs,(a)1e-6),pri
9、ntf,(is not quadratic);,else,d=b*b-4*a*c;,if(,fabs,(d)1e-6),/*,不相等的实根 */,x1=(-b+,sqrt,(d)/(2*a);,x2=(-b-,sqrt,(d)/(2*a);,printf,(has two real roots:n);,printf,(x1=%8.4f,x2=%8.4fn,x1,x2);,else,/*,虚根 */,lp,=-b/(2*a);,ip,=,sqrt,(-d)/(2*a);,printf,(has two complex roots:n);,printf,(x1=%8.4f+%8.4fin,lp,i
10、p,);,printf,(x2=%8.4f-%8.4fin,lp,ip,);,运行,jc4_6,29,举例(续):,【例,4.,b,】,输入年份,判别该年是否为闰年。,思路:,年份,year,为闰年的条件为,能够被,4,整除,但不能被,100,整除的年份;,能够被,400,整除的年份。,只要满足任意一个就可以确定它是闰年。,例如:,1996,年、,2000,年是闰年,1998,年、,1900,年不是闰年,设定标志变量,leap,,,只要符合其中一个条件的就是闰年,令,leap=1,;,否则令,leap=0,30,算法:,定义变量,year、leap,输入年份,year,能被4整除且,不能被10
11、0整除?,T F,能被400整除?,leap=1,T F,leap=1 leap=0,leap=1?,T F,是闰年 不是闰年,year%400=0,year%4=0&year%100!=0,31,程序:,main(),int,year,leap;,scanf,(%d,if(year%4=0&year%100!=0),leap=1;,else if(year%400=0),leap=1;,else leap=0;,if(leap=1),printf,(%d is a leap year n,year);,else,printf,(%d is not a leap year n,year);,运行,jc4_b,32,






