资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,长江大学计算机科学学院,1,第四章 选择结构程序设计,教学目标,掌握逻辑值的概念及逻辑值在C语言中的表示方法;,掌握关系运算符和逻辑运算符的运算规则;,掌握赋值运算、算术运算、关系运算及逻辑运算等几种常用的运算符之间的优先级次序。,掌握if语句及其嵌套的使用方法;,了解条件运算符的运算规则及其使用方法。,了解用switch语句和break语句构成的多分支结构。,基本要求,能够编写简单的选择结构程序,并且能够排除选择结,构程序中的语法错误及较简单的逻辑错误。,20:49:02,长江大学计算机科学学院,第四章 选择结构程序设计 教学目标,4.1 关系运算和逻辑运算,关系运算,一般是指简单的条件比较。,如:x大于0 表示为:x0,逻辑运算,一般是指复杂的条件比较(多个简单条件比较的组合)。,如:x大于0并且y小于等于0,表示为:x0&y0)的值为 (算术运算),5&x0的值为(逻辑运算),20:49:02,长江大学计算机科学学院,4.1.1 逻辑值及其在C语言中的表示 在C语言中,没有专,4.1.2 关系运算符与关系表达式,1关系运算符及其优先级,由两个字符组合而成的运算符之间不能有空格,如:=、=、!=,。,优先级次序:,算术运算符,13/12,关系运算符,10,(、=),关系运算符,9,(=、!=),赋值运算符,2,表4.1关系运算符及其优先级,10,9,20:49:02,长江大学计算机科学学院,4.1.2 关系运算符与关系表达式1关系运算符及其优先级,2关系表达式,用关系运算符将两个操作数(常量、变量或表达式)连接起来,进行关系运算的式子,称为,关系表达式,。,例如,假设n1=5,n2=8,n3=10,则:,(1)关系表达式n1=n2的值为0。,(2)关系表达式n1n3的值为1。,(4)关系表达式n1=,n2n3,的值等为0。,注意,:由于存在,存储误差,和,转换误差,,,避免,直接用关系运算符“,=,”来,判断,两个实型数是否相等,。,单精度实数:fabs(x-y)0.000001,双精度实数:fabs(a-b)b)&(xy),当a大于b且x大于y时,结果,为,“真”,,用,数值1,来表示;否则,结果为“,假,”,用,数值0,来表示。,表4.3 逻辑运算符的运算规则,20:49:02,长江大学计算机科学学院,2逻辑表达式 由逻辑运算符和运算对象所组成的表达式称为,如:求一元二次方程根时,用到下列条件,(a!=0)&(b*b-4*a*c0),数学表达式 0 x10表示x的值应该在0到10的范围内。但在C语言中,不,能用,关系表达式0 x10,来简单表述以上的数学关系。因为,无论,x是什么值,按照C语言的运算规则,左边的表达式,0 x,的运算结果只能为,0或1,,因而表达式,0 x,10,的运算结果,总是1,。,只有用,逻辑表达式,0 x,&,x=0),printf(“%10.6lfn”,sqrt(x);,/*sqrt为开平方的库函数*/,例4.1 输入一个数,如果该数大于等于0,则输出它的平方根,当它小于0,则不做任何处理。,20:49:02,长江大学计算机科学学院,#include 例4.1 输入一个数,,4.2 if语句,(2)双分支 if语句,if(表达式),语句1,else,语句2,else不能单独使用,(可选),20:49:02,长江大学计算机科学学院,4.2 if语句(2)双分支 if语句else不能单独使用,#include,void main(),int n1,n2,n3,max;,printf(Please input three numbers:);,scanf(%d,%d,%d,if,(n1n2),max=n1;,else,max=n2;,if,(n3max),max=n3;,printf(max=%dn,max);,程序运行情况如下:,Please input three numbers:,11,22,18,max=22,例4.1 输入三个整数,求最大值,/*简化形式*/,max=n1;,if,(n2max),max=n2;,20:49:02,长江大学计算机科学学院,#include 程序运行情况如下:例4.,例4.2 输入三个整数,在变量a,b,c中排序,#include,void main(),int a,b,c,t;,printf(input a,b,c:);,scanf(,%d%d%d,&a,&b,&c);,printf(a=%d,b=%d,c=%dn,a,b,c);,if,(ab),t=a;a=b;b=t;,if,(ac),t=a;a=c;c=t;,if,(bc),t=b;b=c;c=t;,printf(a=%d,b=%d,c=%dn,a,b,c);,程序运行情况如下:,input a,b,c:,62 34 24,a=62,b=34,c=24,a=24,b=34,c=62,20:49:02,长江大学计算机科学学院,例4.2 输入三个整数,在变量a,b,c中排序#inclu,(3)多分支if语句,if(,表达式,1),语句,1,else if(,表达式,2),语句,2,else if(,表达式,3),语句,3,else if(,表达式,4),语句,4,.,else if(,表达式,n),语句,n,else,语句,n+1,20:49:02,长江大学计算机科学学院,(3)多分支if语句if(表达式1)语句1 10:,例4.3 编写程序,根据输入的学生成绩,给出相应的等级。90分以上的等级为A,60分以下的等级为E,其余每10分为一个等级。,#include,void main(),int g;,printf(Enter g:);,scanf(%d ,printf(g=%d:,g);,if,(g=90)printf(An);,else,if,(g=80)printf(Bn);,else,if,(g=70)printf(Cn);,else,if(g=60)printf(Dn);,else printf(En);,程序运行情况如下:,Enter g:,78,g=78:C,20:49:02,长江大学计算机科学学院,例4.3 编写程序,根据输入的学生成绩,给出相应的等级。,if语句中的内嵌语句可以是,任意合法的C语句,,当然,也可以,是另外一个,if语句,,这时称为,if语句的嵌套,。,if,(),if,(),if,(),if,(),if,(),if,()语句1,语句1,if,(),if,(),if,(),else,语句2,else,else,else,else,if,(),else,else,if,()语句3,else,语句2 语句2,else,语句4,2.if语句的嵌套,20:49:02,长江大学计算机科学学院,if语句中的内嵌语句可以是任意合法的C语句,当然也,if语句的嵌套,在运用嵌套的if语句时,应该特别注意else和if的配套规则。,else总是与在它前面的、离它最近的、尚未与其它else匹配的if相配对。,20:49:02,长江大学计算机科学学院,if语句的嵌套 在运用嵌套的if语句时,应该特别,if语句的嵌套,用花括号把内层if语句括起来后,使得此内层if语句在语法上成为一条独立的语句,从而使得else子句只能与外层的if配对。,if(表达式1),if,(表达式2),语句1,else,语句2,if(表达式1),if(表达式2)语句1,else,语句2,20:49:02,长江大学计算机科学学院,if语句的嵌套 用花括号把内层if语句括起来后,使得此内,例4.4 编写一程序实现符号函数的功能,。,#include,void main(),int x,y;,printf(Enter x:);,scanf(%d,y=-1;,if(x!=0),if(x0)y=1;,else,y=0;,printf(x=%d,y=%dn,x,y);,程序运行情况如下:,Enter x:,8,x=8,y=1,注:该题还可以用,更加简明,的,程序,来,实现,。,20:49:02,长江大学计算机科学学院,例4.4 编写一程序实现符号函数的功能。#include,4.3 条件运算符和条件表达式,条件运算符:,?:(C语言中唯一的三目运算符),条件表达式的一般形式为:,表达式1,?,表达式2,:,表达式3,求解过程:,先求“表达式1”的值,当“表达式1”的值为非零时,以“表达式2”的值作为整个条件表达式的值;当“表达式1”的值为零时,以“表达式3”的值作为整个条件表达式的值。,20:49:02,长江大学计算机科学学院,4.3 条件运算符和条件表达式 条件运算符:10:,条件运算符和条件表达式,说明:,1,、若“表达式2”与“表达式3”的数据,类型不一致,,则,遵循算术运算的类型转换规则,即,取二者中较高的类型。,如:,x0?5:1.5,的结果为实型数,5.0,或,1.5,。,2、,条件运算符的优先级,高于赋值运算,,但,低于逻辑运算、关系运算和算术运算,。,3、,条件运算符具有,自右向左,的结合性。,如,:max=a(bc?b:c)?a:b c?b:c,相当于,:max=a(bc?b:c)?a:(bc?b:c),20:49:02,长江大学计算机科学学院,条件运算符和条件表达式说明:10:45:54长江大学计,4.4 switch语句,使用,switch语句实现多分支选择结构,可以使程序的结构显得更加清晰。,1.,switch语句,的,一般形式,与,执行过程,switch语句形式如下:,switch,(,表达式,),case,常量表达式1,:,语句1,case,常量表达式2,:,语句2,:,case,常量表达式n:,语句n,default:,语句n+1,表达式,只能是,整型,、,字符型,或,枚举型,case,和,常量表达式,之间一定要有,空格,多条语句,可以,不必,用,括起来,default标号,也可以放在,其它位置,方括号中的内容可以省略,执行过程:,先计算表达式的值,当其值与某个常量表达式的值相等时,就执行其后的所有语句,直到switch语句体结束。如果没有与该值相等的常量表达式,则从default后的语句开始执行,直到switch语句体结束。,20:49:02,长江大学计算机科学学院,4.4 switch语句 使用switch语句实现多,例4.5,#include,void main(),int y,m,d,dd=0;,printf(Enter yyyy/mm/dd:);,scanf(%d,/,%d,/,%d,printf(%d/%d/%d,y,m,d);,switch(,m-1,),case 11:dd=dd+30;,/*11月的天数*/,case 10:dd=dd+31;,/*10月的天数*/,case 2:dd=dd+28;,/*2月的天数*/,case 1:dd=dd+31;,/*1月的天数*/,case 0:dd=dd+d;,/*当月已过的天数*/,if,(,(m2),&,(,y%4=0&y%100!=0,|,y%400=0,),),dd=dd+1;,/*闰年的2月有29天*/,printf(%dn,dd);,编写程序,输入能代表一个日期的三个整数,计算该日是该年的第几天,。,case 9:dd=dd+30;,case 8:dd=dd+31;,case 7:dd=dd+31;,case 6:dd=dd+30;,case 5:dd=dd+31;,case 4:dd=dd+30;,case 3:dd=dd+31;,程序运行情况如下:,Enter yyyy/mm/dd:,2003,/,2,/,15,2003/2/15 46,Enter yyyy/mm/dd:,2003/12/31,2003/12/31 365,20:49:02,长江大学计算机科学学院,例4.5#include 编写程序,例4.6 用switch语句改写例4.3,#i
展开阅读全文