【文档说明】C语言程序设计第4章--选择结构程序设计.ppt,共(55)页,1015.500 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2216.html
以下为本文档部分文字说明:
第4章选择结构程序设计4.1条件判断和选择结构4.2选择结构中的运算符4.3用于选择结构的if语句4.4用于多分支选择结构的switch语句4.5选择结构程序设计举例2022/11/122在现实生活中有许多问题需要先进行判断和选择,再执行。判断条件是否满足,并根据这个条件做出指定的操作
,或者从给定的两种或多种操作中选择执行其中一种,正是选择结构要解决的问题。本章最重要的内容如下。(1)关系运算符、逻辑运算符和条件运算符。(2)if语句。(3)switch语句。2022/11/1234.1条件判断和选择结构在现实生活中,需
要进行条件判断和选择的场景是很常见的,例如:(1)如果今天预报有雨,我就带雨伞;(2)下学后我们一起去打篮球;(3)身高1.2米以下儿童,免费入园参观;2022/11/124【例4-1】输入两个整数,输出其中的大数。2022/11/125#i
nclude<stdio.h>intmain(){inta,b,max;scanf("%d,%d",&a,&b);if(a>=b)max=a;elsemax=b;printf("max=%d\n",max);return0;}程序运行结果:5,3max=53,5max=54.2选择结构中的运算符4
.2.1关系运算符与关系表达式C语言中,“关系运算”实际上就是“比较运算”,将两个数值进行大小比较,根据两个值和所使用的关系运算符,得到一个逻辑值:“真”(值为1)或“假”(值为0)。例如:2>0这个关系表达式,它是成立
的,逻辑值为“真”,即为1;6==9这个关系表达式,它是不成立的,逻辑值为“假”,即为0。2022/11/1261.关系运算符及其优先级2022/11/127关系运算符的优先次序为:(1)关系运算符的优先级低于算术运算符,高于赋值运算符。(2)在6个关系运算符中,<、<=、>、>
=的优先级相同,==和!=的优先级相同;并且前4种高于后2种。例如:•x+y>z等同于(x+y)>z•x=y<=z等同于x=(y<=z)•x==y>z等同于x==(y>z)2022/11/1282.关系表达式用关系运算符将两个数值或表达式(包括算术表达式、关系表达式、逻辑表达式、赋值表达式等)
连接起来的式子,称为关系表达式。例如,下面都是合法的关系表达式:x<yx+y>=zx>y!=z‘x’<‘y’x>(y=5)x>(y>=z)(x!=y)<z2022/11/129C语言中,关系表达式的值是一个逻辑值,即“真”或“假”,当表示关系运算结果时,以数值1代表“真”,以
数值0代表“假”。设a=1,b=2,c=3,d=4,e=5,关系表达式c<a+b<=d!=e求解时从左至右进行,如图4-2所示。2022/11/12104.2.2逻辑运算符与逻辑表达式⚫“身高1.2米~1.5米的儿童,可以购买半价公园门票”
此时需要判断两个条件:①身高>=1.2米;②身高<=1.5米。类似这样的组合条件无法用一个关系表达式来表示。C语言中,提供逻辑运算符来处理条件之间的逻辑关系。“逻辑运算”的结果也是一个逻辑值:“真”(值为1)或“假”(值为0)。2022/11/12111.逻辑
运算符及其优先级2022/11/1212逻辑运算符中,逻辑非(!)为单目运算符,结合方向是自右至左;逻辑与(&&)和逻辑或(||)都为双目运算符,结合方向是自左至右。2022/11/1213C语言中,任何非零值均代表“真”(1),零值代表“假”(0)。
例如:•!x>y&&y==z等价于((!x)>y)&&(y==z)•x+y||x-z<y等价于(x+y)||((x-z)<y)2022/11/12142.逻辑表达式将关系表达式或逻辑量用逻辑运算符连接起来构成的式子称为逻辑表达式。逻辑表达式的值是一个逻辑量
“真”或“假”。C语言中,当表示逻辑运算结果时,以数值1代表“真”,以数值0代表“假”。而在判断一个量的真假时,任何非0的值均代表“真”,0代表“假”。2022/11/1215逻辑表达式8>6&&5<2-!3;求解时从左至右进行。2022/
11/1216需要注意的是,在逻辑表达式的求解中,不是表达式中所有的逻辑运算都会被执行,如果前面的逻辑运算已经可以确定逻辑表达式的值时,后面的逻辑运算将不会被执行到。也就是只有在必须执行下一个逻辑运算才能求出表达式的值时,才执行该逻辑运算。(
1)x&&y&&z(2)x||y||z例如,有下面的逻辑表达式:a++!=1&&(++b==3||c++==3)若a=1,b=2,c=3;考察表达式求解后,变量值的变化。2022/11/12174.2.3条件
运算符与条件表达式条件运算符是C语言中唯一的一个三目运算符,它由两个符号?和:组成,要求必须有3个操作对象参与运算。它的结合方向为自右至左,优先级别低于逻辑运算符,高于赋值运算符。条件表达式的一般形式为:表达式1?表达式2:表达式32022/11/12182022/11/1219例如,
有下面的条件表达式:(a>b)?a:b①首先计算关系表达式“a>b”的值;②若“a>b”的值为1,则条件表达式的值为“a”;若“a>b”的值为0,则条件表达式的值为“b”。【例4-2】输入两个整数,输出其中的大数(使用条件运算符)。2022/11/
1220#include<stdio.h>intmain(){inta,b,max;scanf("%d,%d",&a,&b);max=a>b?a:b;printf("max=%d\n",max);return0;}程序运行结果:5,3max=5
3,5max=54.3用于选择结构的if语句4.3.1if语句的一般形式if(表达式)语句1else语句22022/11/1221【例4-3】输入一个整数,输出其绝对值。2022/11/1222#include<stdio.h>intmain(){intx,y;sca
nf("%d",&x);if(x>=0)y=x;elsey=-x;printf("x的绝对值为:%d\n",y);return0;}程序运行结果:5x的绝对值为:5-12x的绝对值为:12【例4-4】输入一个年份,判断是否为闰年。2022/11/1223【例4-4】输入一个年
份,判断是否为闰年。2022/11/1224#include<stdio.h>intmain(){intyear;scanf("%d",&year);if(year%4==0&&year%100!=0||year%
400==0)printf("%d是闰年\n",year);elseprintf("%d不是闰年\n",year);return0;}程序运行结果:20122012是闰年20002000是闰年20182018不
是闰年4.3.2单分支if语句if(表达式)语句2022/11/1225【例4-5】输入一个整数,根据分段函数输出相应的函数值。2022/11/12262022/11/1227#include<stdio.h>intmain(){intx,y;scanf("%
d",&x);if(x<0)y=3*x+2;if(x==0)y=0;if(x>0&&x<=5)y=2*x-1;if(x>5)y=x*x+3;printf("y=%d\n",y);return0;}程序运行结果:-1y=-1
0y=02y=36y=39【例4-6】输入3个实数,按从大到小的顺序输出。2022/11/1228#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a<b){t=a;a=b;b=t;}i
f(a<c){t=a;a=c;c=t;}if(b<c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}程序运行结果:1.5,2.3,3.73.70,2.30,1.504.3.3嵌套的
if语句其一般形式为:if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句42022/11/1229内嵌的if语句内嵌的if语句另一种形式为:if(表达式1)语句1elseif(表达式2)语句2…elseif(
表达式n)语句nelse语句n+12022/11/1230else总是与它上面最近的未配对的if相配对【例4-7】使用嵌套的if语句实现例4-5中的分段函数。2022/11/1231算法1:2022/11/1232#include<stdio.h>intmain
(){intx,y;scanf("%d",&x);if(x<=0)if(x<0)y=3*x+2;elsey=0;elseif(x<=5)y=2*x-1;elsey=x*x+3;printf("y=%d\n",y);return0;}程序运行结果:-
1y=-10y=02y=36y=39程序1:2022/11/1233算法2:2022/11/1234#include<stdio.h>intmain(){intx,y;scanf("%d",&x);if(x<0)y=3*x+2;elseif(x==0)y=
0;elseif(x<=5)y=2*x-1;elsey=x*x+3;printf("y=%d\n",y);return0;}程序运行结果:-1y=-10y=02y=36y=39程序2:4.4用于多分支选择结构的switch语
句switch(表达式){case常量表达式1:语句1case常量表达式2:语句2…case常量表达式n:语句ndefault:语句n+1}2022/11/1235【例4-8】输入0~6中的一个数字,输出对应的“星期几”。2022/11/12362022/
11/1237#include<stdio.h>intmain(){intday;printf("请输入星期的数字编号(0~6):");scanf("%d",&day);switch(day){case0:printf("星期日\n");case1:printf("星期一\n");case2:p
rintf("星期二\n");case3:printf("星期三\n");case4:printf("星期四\n");case5:printf("星期五\n");case6:printf("星期六\n");de
fault:printf("Error!应该输入0~6之间的数字!\n");}return0;}程序运行结果:请输入星期的数字编号(0~6):4星期四星期五星期六Error!应该输入0~6之间的数字!4.4.2break语句2022/11/1238switch(表达式){case常量表达式
1:语句1break;case常量表达式2:语句2break;…case常量表达式n:语句nbreak;default:语句n+1}【例4-8】输入0~6中的一个数字,输出对应的“星期几”。2022/11/12392022/11/1240#include<stdio.h
>intmain(){intday;printf("请输入星期的数字编号(0~6):");scanf("%d",&day);switch(day){case0:printf("星期日\n");break;case1:printf("星期一\n");break;case2:printf("星期二
\n");break;case3:printf("星期三\n");break;case4:printf("星期四\n");break;case5:printf("星期五\n");break;case6:printf("星期六\n");default:printf("Error!应该输入0~
6之间的数字!\n");}return0;}程序运行结果:请输入星期的数字编号(0~6):4星期四请输入星期的数字编号(0~6):9Error!应该输入0~6之间的数字!4.5选择结构程序设计举例【例4-9】输入3个数,判断这3个数是否可以构成一个三角形,若
可以,则输出三角形的面积,若不可以,则输出“Error!输入的3个数不能构成三角形。”⚫构成三角形的条件:①三边长都为正数;②任意两边之和大于第三边。⚫海伦公式求面积:⚫预处理命令“#include<math.h>”20
22/11/1241()()()=---areassasbsc2022/11/12422022/11/1243#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;scanf(
"%lf,%lf,%lf",&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(
"area=%5.2f\n",area);}elseprintf("Error!输入的3个数不能构成三角形。\n");return0;}程序运行结果:3.0,4.0,5.0area=6.002.0,4.0,1.0Error!输入的3个数
不能构成三角形。【例4-10】求一元二次方程的解。2022/11/12442022/11/12452022/11/1246#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,
x1,x2,p,q;printf("请输入a,b,c的值:");scanf("%lf,%lf,%lf",&a,&b,&c);s=b*b-4*a*c;if(fabs(a)<=1e-6)printf("此方程不
是二次方程\n");elseif(fabs(s)<=1e-6){x1=x2=-b/(2*a);printf("方程有两个相等的实根:x1=x2=%.2f\n",x1);}2022/11/1247elseif(s>1e-6){x1=-b+sqrt(s)/(2*a);x2=-b-sqrt(s
)/(2*a);printf("方程有两个不相等的实根:x1=%.2f,x2=%.2f\n",x1,x2);}else{p=-b/(2*a);q=sqrt(-s)/(2*a);printf("方程有两个共轭复根:x1=%.2f+%.2f
i,x2=%.2f-%.2fi\n",p,q,p,q);}return0;}2022/11/1248程序运行结果:请输入a,b,c的值:0.0,2.0,3.0此方程不是二次方程请输入a,b,c的值:1.0,2.0,1.0方程有两个相等的实根:x1
=x2=-1.00请输入a,b,c的值:2.0,3.0,1.0方程有两个不相等的实根:x1=-2.75,x2=-3.25请输入a,b,c的值:2.0,2.0,1.0方程有两个共轭复根:x1=-0.50+0.50i,x2=-
0.50-0.50i【例4-11】将某课程考试的百分制成绩转化为等级制成绩。转换规则为:60分以下为“不合格”,60~69分为“合格”,70~79分为“中等”,80~89分为“良好”,90分以上为“优秀”。本例是一个多分
支选择问题,下面分别用两种算法解决。•算法1:使用嵌套的if语句结构。•算法2:使用switch语句结构。2022/11/12492022/11/1250算法1:2022/11/1251#include<stdio.h>intmain(){intsco
re;scanf("%d",&score);if(score<0||score>100)printf("成绩输入有误!\n");elseif(score<60)printf("不合格\n");elseif(score<70)printf("合格\n");elseif(scor
e<80)printf("中等\n");elseif(score<90)printf("良好\n");elseprintf("优秀\n");return0;}程序1:程序运行结果:2022/11/1252算法2:2022/11/1253#include<stdio.h>intmain(){int
score,grade;scanf("%d",&score);if(score>=0&&score<=100){grade=score/10;switch(grade){case6:printf("合格
\n");break;case7:printf("中等\n");break;case8:printf("良好\n");break;case9:case10:printf("优秀\n");break;default:printf("不合格\n"
);}}elseprintf("成绩输入有误!\n");return0;}程序2:程序运行结果:2022/11/1254选择结构要解决的主要问题是根据条件是否成立来选择执行指定的操作,或者从给定的多种操作中选择其一执行。关系运算符和逻辑运算符
及由它们所形成的表达式是构成判断条件的主要形式,使用时需要注意各运算符的优先级和结合方向。本章小结注意本章节知识点!!2022/11/1255if语句是构成选择结构的重要语句,包括3种主要的形式:单分支if语句、双分支if语句和嵌套的if语句。实现多分支选择结构时,可以采用嵌套的if语句,也可以
选用switch语句。本章小结注意本章节知识点!!