《第4章 选择结构程序设计课件.ppt》由会员分享,可在线阅读,更多相关《第4章 选择结构程序设计课件.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章选择结构程序设计-2- 关系运算符与关系表达式 逻辑运算符与逻辑表达式 条件运算符与条件表达式 if语句 switch语句 选择结构程序举例本章教学内容本章教学目标本章教学目标 能熟练正确地使用关系运算符和关系表达式。 掌握C语言的逻辑运算符和逻辑表达式,学会表示逻辑值的方法。 熟练掌握if语句的三种形式,掌握选择结构程序设计的方法及应用。 熟悉多分支选择switch 语句编程。 能熟练地运用if语句和switch语句进行选择结构综合编程。-3-4-4.1关系运算符与关系表达式 在程序中经常需要比较两个量的大小关系,在C语言中,“ 比较运算”就是“关系运算”,关系运算就是比较两个量的大小
2、关系。 例如,x7是一个关系表达式,其中的“”是一个关系 运算符。 若x的值是5,则表达式57成立,表达式的值为“真”。 若x的值是9,则表达式9c+d (a+b)(c+d) a=b=c a=(b=c) a=b!=c a=(b!=c-7-关系表达式 关系表达式是用关系运算符将两个表达式连接起来,进行关系运算的式子。被连接的表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式或字符表达式。 例如,下面都是合法的关系表达式: a=bb!=c (ab)d) 关系运算的结果是整数值0或者1。在C语言中,没有专门的“逻辑值”,而是用0代表“假”,用1代表“真”。-8-关系表达式 说明:从本质上来说
3、,关系运算的结果不是数值,而是逻辑值,为了处理关系运算和逻辑运算的结果,C语言指定1代表真,0代表假。用了1和0代表真和假,而1和0又是数值,所以在C程序中还允许把关系运算的结果看作和其他数值型数据一样,可以参加数值运算,或者把它赋值给数值型变量。如下: f=63 (先计算关系表达式63,得到1,再将1赋值给变量f,故f的值为1)。 f=543 (先计算关系表达式54,得到1,再计算关系表达式13,得到0,再将0赋值给变量f,故f的值为0)。 f=5!=6 (先计算关系表达式5!=6,得到1,再将1赋值给变量f,故f的值为1)。-9-4.2逻辑运算符与逻辑表达式 在编程过程中,常常需要表示出由
4、几个简单条件组成的复合条件。例如,参加本次奥林匹克数学竞赛的学生的年龄必须在13岁到16岁之间,要表示满足条件的参赛学生的年龄,用数学表达式可以写成13=age=13和age3)&(67) 运算结果是运算结果是0(逻辑假)(逻辑假)2.逻辑或(|) 其运算规则为:当|左右两边的操作数有一个为非0(逻辑真)时,运算结果就为1(逻辑真),否则为0(逻辑假)。 例如:例如:54|43 逻辑表达式的结果是逻辑表达式的结果是1(逻辑真逻辑真) 68 逻辑表达式的结果是逻辑表达式的结果是0(逻辑假逻辑假)。-12-4.2.1 逻辑运算符及其优先级3. 逻辑非逻辑非(!) 其运算规则为:其运算规则为:当当!
5、左边的操作数为左边的操作数为1(逻辑真)时,逻辑非运(逻辑真)时,逻辑非运算的结果为算的结果为0(逻辑假逻辑假);当!左边的操作数为;当!左边的操作数为0(逻辑假)时,逻(逻辑假)时,逻辑非运算的结果为辑非运算的结果为1(逻辑真逻辑真)。 例如:例如:!(56)逻辑表达式的结果为逻辑表达式的结果为0(逻辑假)。(逻辑假)。 若若a=8,则则!a的值为的值为0(逻辑假逻辑假)。 上述上述3种逻辑运算符的优先级次序是种逻辑运算符的优先级次序是: !(逻辑非逻辑非)级别最高级别最高 &(逻辑与逻辑与)次之次之 |(逻辑或逻辑或)最低最低-13-4.2.2 逻辑表达式 用逻辑运算符将表达式连接起来就构
6、成了逻辑表达式。用逻辑运算符将表达式连接起来就构成了逻辑表达式。逻逻辑表达式的运算结果为辑表达式的运算结果为1(逻辑真)或(逻辑真)或0(逻辑假)(逻辑假)。 例如:例如: 若若a=5,b=2, 逻辑表达式逻辑表达式!a&b7的值为的值为0。 逻辑表达式逻辑表达式!7.3&8 的结果为的结果为0。 逻辑表达式逻辑表达式!5|4.5的结果为的结果为1。 “abc”&“defg”的结果为的结果为1。-14-4.2.2 逻辑表达式 在实际编程过程中,有时也需要把数学表达式转换成在实际编程过程中,有时也需要把数学表达式转换成C语言的语言的逻辑表达式形式,例如:逻辑表达式形式,例如:(1)数学表达式数学
7、表达式abc写成合法的写成合法的C语言表达式形式为语言表达式形式为 ab&b6 写成合法的写成合法的C语言逻辑表达式形式为语言逻辑表达式形式为 x6|xa)|(m=a); 求变量求变量m, n, k的最终值。的最终值。4.2.2 逻辑表达式4.3 条件运算符与条件表达式 条件表达式的一般形式为:条件表达式的一般形式为: 表达式表达式1?1?表达式表达式2:2:表达式表达式3 3 运算规则:先求解表达式运算规则:先求解表达式1 1的值,若表达式的值,若表达式1 1的值为真的值为真( (非非0 0的值的值) ),则求表达式,则求表达式2 2的值,并把表达式的值,并把表达式2 2的值作为整个表的值作
8、为整个表达式的值;若表达式达式的值;若表达式1 1的值为假的值为假( (为为0 0值值) ),则求表达式,则求表达式3 3的的值,并把表达式值,并把表达式3 3的值作为整个表达式的值。的值作为整个表达式的值。 例如:例如: (1) 若int a=3,b=4;mmx=ab?a+2:b+3;则mmx的值为7。 (2) 若int a=3,b=5,c=2,d=3; mmx=ab?a:cd?c:d后,mmx的 值为3。(条件运算符是右结合性)。 -16-4.3 条件运算符与条件表达式 【例题【例题4-14-1】条件表达式应用示例。】条件表达式应用示例。 编写程序编写程序: :从键盘输入从键盘输入3 3个
9、整数个整数a,b,c, a,b,c, 输出其中最大的数输出其中最大的数(用条件表达式实现)(用条件表达式实现)。 #include int main( ) int a,b,c,temp,max; printf(“please input a,b,c:”); scanf(“%d,%d,%d”,&a, &b,&c); temp=(ab)?a:b; max=(tempc)?temp:c; printf(“max=%dn”,max); return 0; 图4-1 例题4-1运行结果 -17-4.4 if语句 C C语言编程时,有时需要使程序根据条件有选择地执行语语言编程时,有时需要使程序根据条件有选
10、择地执行语句。句。C C语言有两种选择语句语言有两种选择语句: (1)if(1)if语句语句,有,有3 3种形式,分别是单分支选择种形式,分别是单分支选择ifif语句、双语句、双分支选择分支选择ifif语句和多分支选择语句和多分支选择ifif语句。语句。 (2)switch(2)switch语句语句,用来实现多分支的选择结构。本节先介,用来实现多分支的选择结构。本节先介绍绍ifif语句的语句的3 3种形式,然后在此基础上介绍种形式,然后在此基础上介绍ifif语句的嵌套语句的嵌套结构。结构。-18-1.1.单分支单分支ifif语句语句 单分支单分支ifif语句的形式为:语句的形式为: if(表达
11、式表达式) 语句;语句; 单分支单分支ifif语句的执行过程:当表达式的值为非语句的执行过程:当表达式的值为非0(0(逻辑真逻辑真) )时时,则执行其后的语句;否则不执行该语句。,则执行其后的语句;否则不执行该语句。2.2.双分支双分支ifif语句语句 双分支if语句的形式为: if(表达式表达式1) 语句语句1; else 语句语句2; 双分支if语句的执行过程:当表达式1的值为非0(逻辑真)时,则执行语句1;否则执行语句2。-19-4.4.1 if语句的三种形式语句的三种形式4.4.1 if语句的三种形式语句的三种形式3.3.多分支多分支ifif语句语句 多分支多分支ifif语句适用于有语
12、句适用于有3 3个或个或3 3个以上的分支选择时,一般形个以上的分支选择时,一般形式为:式为: if(if(表达式表达式1) 1) 语句语句1;1; else if( else if(表达式表达式2) 2) 语句语句2;2; else if( else if(表达式表达式3) 3) 语句语句3 3; else if( else if(表达式表达式n) n) 语句语句n;n; else else 语句语句m;m;-20-多分支多分支ifif语句语句【例题例题4-34-3】多分支if语句应用示例1。 编写程序:从键盘输入一个字符,判断该字符是数字字符、大写字母、小写字母还是其它编写程序:从键盘输入
13、一个字符,判断该字符是数字字符、大写字母、小写字母还是其它字符,并输出相应的信息。字符,并输出相应的信息。 #include stdio.h #include stdio.h int main( ) int main( ) char ch; char ch; printf( printf(请输入一个字符请输入一个字符: ); : ); ch=getchar(); ch=getchar(); if(ch=0&c=0&c=A&ch=A&ch=a&ch=a&ch=z) printf( printf(你输入的是一个小写字母你输入的是一个小写字母!n); !n); else else 运行结果运行结果
14、printf( printf(你输入的是除数字和字母以外的其它字符你输入的是除数字和字母以外的其它字符!n); !n); return 0; return 0; -21-多分支多分支ifif语句语句【例题【例题4-44-4】多分支】多分支ifif语句应用示例。语句应用示例。 程序编制:输入一百分制成绩,要求输出成绩对应等级程序编制:输入一百分制成绩,要求输出成绩对应等级A A, ,B B, ,C C,D D, ,E E。9090分以上为等级分以上为等级A A,8080分分-89-89分为等级分为等级B B,7070分分-79-79分为等级分为等级C C,6060分分-69-69分为等级分为等级
15、D D。 #include int main( ) double score; printf(“please input score(0-100):”); scanf(“%lf”,&score); if(score=90&score=80) printf(“The grade is Bn”); else if(score=70) printf(“The grade is Cn”); else if(score=60) printf(“The grade is Dn”); else printf(“The grade is En”); 程序运行结果 return 0; -22-4.4.2 if语
16、句的嵌套语句的嵌套if(表达式1) if(表达式1_1) 语句1; else 语句2;else if(表达式1_2) 语句3; else 语句4;-23-if(表达式1) if(表达式1_1) 语句1; else if(表达式1_2) 语句2; else 语句3;4.4.2 if语句的嵌套语句的嵌套学习if语句的嵌套要注意以下几个问题: (1) 在if语句的嵌套结构中,应注意if与else的配对规则,else总是与它最近的还没有配对的if相匹配。如果忽略了else与if配对,就会发生逻辑上的错误。为避免产生逻辑错误,使程序结构更清晰,可以加 来确定配对关系,例如: if(表达式1) if (表
17、达式2 语句1; else 语句2; 添加 后可以很清楚地表示出else与if的配对关系。 (2) 在if语句的嵌套结构中,if与else匹配后,只能形成嵌套结构,不能形成交叉结构。 -24-4.5 switch语句语句 switch语句可以根据switch后表达式的多种值,对应case表示的多个分支,switch语句又称为开关语句。 switch语句的一般形式为: switch(表达式) case 常量1: 语句1; break; case 常量2: 语句2; break; case 常量3: 语句3; break; case 常量n: 语句n; break; default: 语句n+1;
18、 break; -25-4.5 switch语句语句【例题【例题4-64-6】switchswitch语句应用示例。语句应用示例。 程序编制:输入一百分制成绩,要求输出成绩对应等级程序编制:输入一百分制成绩,要求输出成绩对应等级A A,B,B,C C,D,D,E E。9090分以上为等级分以上为等级A A,8080分分-89-89分为等级分为等级B B,7070分分-79-79分为等级分为等级C C,6060分分-69-69分分为等级为等级D D。 #include int main( ) double score; printf(“请输入学生成绩:”); scanf(“%lf”,&score
19、); if(score100) printf(“你输入的成绩超出正常范围!n”); else switch(int)score/10) case 10: case 9: printf(“对应的等级是A!n”); break; case 8: printf(“对应的等级是B!n”); break; case 7: printf(“对应的等级是C!n”); break; case 6: printf(“对应的等级是D!n”); break; default: printf(“对应的等级是E!n”); return 0; -26-4.6 程序举例程序举例 【例题【例题4-74-7】任意输入三角形的三
20、边长,判断是否能构成三角形,如果能构成三角形】任意输入三角形的三边长,判断是否能构成三角形,如果能构成三角形求三角形面积。已知三角形的三边长求三角形面积。已知三角形的三边长a,b,c,a,b,c,则计算三角形的面积公式为:其中则计算三角形的面积公式为:其中s=(a+b+c)/2s=(a+b+c)/2。 #include #include int main( ) float a,b,c,s,area=0.0f; printf(“please input a,b,c:”); scanf(“%f,%f,%f”,&a,&b,&c); if(a+bc&a+cb&b+ca) s=(a+b+c)/2; ar
21、ea=sqrt(s*(s-a)*(s-b)*(s-c); 运行结果 else printf(“The three sides dont be a tringle!n”); printf(“area=%fn”,area); return 0; -27-4.6 程序举例程序举例#includeint main() int n,c; float price=98.5,amount; scanf(“%d”,&n); if(n=2000) c=10; else c=n/200; switch(c) case 1: case 2: price=0.95*price; break; case 3: case
22、 4: case 5: price=0.90*price; break; case 6: case 7: case 8: case 9: price=0.85*price; break; case 10: price=0.80*price; break; amount=price*n; printf(“amount=%.2fn”,amount); return 0; 运行结果-28-【例题【例题4-84-8】某公司对一产品按购买数量】某公司对一产品按购买数量(n)(n)进行打折优惠。该产品的单价为进行打折优惠。该产品的单价为98.598.5元,元,打折标准打折标准:n n200 200 不不打
23、折;打折;200200n n600 9.5600 9.5折;折;600600n n1200 9.01200 9.0折折;12001200n n2000 8.52000 8.5折折;n n2000 8.02000 8.0折折。编程按其购买的数量计算应付货款。编程按其购买的数量计算应付货款。4.6 程序举例程序举例#include #include int main( ) float a,b,c,d,m,n; printf(“请输入一元二次方程的三个系数:a,b,c的值:”); scanf(“%f,%f,%f”,&a,&b,&c); printf(“n”); if(a=0) if(b=0) pri
24、ntf(“无意义的等式!n”); else printf(“x=%fn”,-c/b); else d=b*b-4*a*c; if(d=0) m=-b/(2*a); n=sqrt(d)/(2*a); printf(“x1=%fn”,m+n); printf(“x2=%fn”,m-n); else m=-b/(2*a); n=sqrt(-d)/(2*a); printf(“x1=%f+%fn”,m,n); printf(“x2=%f-%fn”,m,n); return 0; -29-【例题【例题4-9】输入一元二次方程】输入一元二次方程ax2 +bx+c=0的各项系数,计算方的各项系数,计算方 程的根并输出。程的根并输出。 谢 谢!