《C语言选择结构.ppt》由会员分享,可在线阅读,更多相关《C语言选择结构.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计第五章第五章 选择结构程序设计选择结构程序设计 5.1 5.1 关系运算符与关系表达式关系运算符与关系表达式5.2 5.2 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式5.3 if5.3 if语句语句5.4 switch5.4 switch语句语句5.5 5.5 选择结构程序设计举例选择结构程序设计举例1C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计5.1 关系运算及其表达式关系运算及其表达式所谓所谓“关系运算关系运算”实际上就是实际上就是“比较运算比较运算”,即将两,即将两个
2、数据进行比较,判定两个数据是否符合给定的关系。个数据进行比较,判定两个数据是否符合给定的关系。一、一、关系运算符及其优先关系关系运算符及其优先关系1 1关系运算符关系运算符C C语言提供语言提供6 6种关系运算符:种关系运算符:=!=注意:在语言中,注意:在语言中,“等于等于”关系运算符是双等号关系运算符是双等号“=”=”,而不是单等号,而不是单等号“=”=”(赋值运算符)。(赋值运算符)。2 2优先级优先级关系运算符的优先级,低于算术运算符,但高于赋值关系运算符的优先级,低于算术运算符,但高于赋值运算符。运算符。a+b b+c 等效于等效于(a+b)(b+c)。a=bc 等效于等效于a=(b
3、c)。2C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计3.3.结合性:结合性:自左至右;自左至右;二、二、关系表达式关系表达式1 1关系表达式的概念关系表达式的概念 所所谓谓关关系系表表达达式式是是指指,用用关关系系运运算算符符将将两两个个表表达达式式连连接接起起来来,进行关系运算的式子。进行关系运算的式子。例如,下面的关系表达式都是合法的:例如,下面的关系表达式都是合法的:abab,a+bc-da+bc-d,(a=3)=(b=5)(a=3)=ba=b,(ab)=(bc)(ab)=(bc)2 2关关系系表表达达式式的的值值:条条件件成成立立为为真真,整整数数
4、“”表表示示“逻逻辑辑真;真;条条件件不不成成立立为为假假,用用整整数数“”表表示示“逻逻辑辑假假”。例如例如:int a=2,b=3,c=1;abc 先计算先计算ab,值是值是1,再计算再计算 133,值是值是1,再计算再计算 1num2的值的值=?。?。(2)(num1num2)!=num3的值的值=?。?。(3)num1num2num3的值的值=?。?。思思考考题题:任任意意改改变变num1或或num2的的值值,会会影影响响整整个个表表达达式的值吗?为什么?式的值吗?为什么?(4)(num1num2)+num3的值的值=?再再次次强强调调:C语语言言用用整整数数“1”表表示示“逻逻辑辑真
5、真”,用用整整数数“0”表表示示“逻逻辑辑假假”。所所以以,关关系系表表达达式式的的值值,还还可可以以参参与其它种类的运算,例如算术运算等。与其它种类的运算,例如算术运算等。4C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计三、条件运算符三、条件运算符?和和:,它们与三个操作数组组成三元运算。它们与三个操作数组组成三元运算。形式为形式为:?:3 求值规则和表达式的值求值规则和表达式的值:真真(非非0),0),求解表达式求解表达式2 2 求解表达式求解表达式1 1 条件表达式的值条件表达式的值 假假(0),(0),求解表达式求解表达式3 3例如例如:int ma
6、x,:int max,a=5a=5,b=3;b=3;max=ab?a:b max max=ab?a:b max及赋值表达式的值均为及赋值表达式的值均为5;5;ab?a:b+1 a=0”x=0”。如果需要描述如果需要描述“x=0”x=0”、同时同时“x10”x=0)(x=0)&(x10)(x10)的的值值为为“真真”,(x-1)(x5)(x5)的的值值为为“假假”,!(x5)!(x5)的的值值为为“真真”。7C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计2逻辑运算符的运算优先级逻辑运算符的运算优先级(1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,)逻辑非的优
7、先级最高,逻辑与次之,逻辑或最低,即:即:!(非)!(非)&(与)(与)|(或)(或)(2)与其它种类运算符的优先关系)与其它种类运算符的优先关系 !算术运算算术运算 关系运算关系运算&|赋值运算赋值运算3逻辑运算符的结合律逻辑运算符的结合律 C语言逻辑运算符采用语言逻辑运算符采用左结合律左结合律。表达式中出现优先级别。表达式中出现优先级别为同一级别的运算符时为同一级别的运算符时,按从左到右的结合方向处理。例如按从左到右的结合方向处理。例如:a&b&c 计算顺序为:计算顺序为:(a&b)&c。4-04-01&21&28 48 3&2|8 3&2|8=a&a=a&a=1 num=1 num=31
8、num31num|num31的值的值=1=1。9C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计 3说明说明在在计计算算逻逻辑辑表表达达式式时时,只只有有在在必必须须执执行行下下一一个个表表达达式式才才能能求求解解时时,才才求求解解该该表表达达式式(即即并并不不是是所所有有的的表表达达式式都都被被求求解解)。换句话说:换句话说:1)对对于于逻逻辑辑与与运运算算,如如果果第第一一个个操操作作数数被被判判定定为为“假假”,系统不再判定或求解第二操作数。系统不再判定或求解第二操作数。例:例:a=0;b=1;a=0;b=1;c=a+&(b=3);c=a+&(b=3);
9、结果结果:a:a为为1,b1,b为为1,c1,c为为0 0。2)对对于于逻逻辑辑或或运运算算,如如果果第第一一个个操操作作数数被被判判定定为为“真真”,系统不再判定或求解第二操作数。系统不再判定或求解第二操作数。例:例:a=1;b=1;c=0;a=1;b=1;c=0;d=-a|b-|(c=b+3);d=-a|b-|(c=b+3);结果结果:a:a为为0,b0,b为为0,c0,c为为0,d0,d为为1 1。10C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计5.3 5.3 ifif语句语句ifif语句是一种用来实现选择结构程序的语句。语句是一种用来实现选择结构程
10、序的语句。一、一、ifif语句的四种形式:语句的四种形式:1 1单分支单分支ifif语句语句 一般形式为:一般形式为:if if (表达式)表达式)语句组语句组 含义:若表达式为真,执行语句,否则执行含义:若表达式为真,执行语句,否则执行ifif后面的语句组。后面的语句组。2 2双分支双分支ifif语句语句一般形式为:一般形式为:if if (表达式)表达式)语句组语句组11 else else 语句组语句组22含义:若表达式为真,执行语句组含义:若表达式为真,执行语句组1,1,否则执行语句组否则执行语句组2 2。语句组2表达式语句组1真假表达式语句组真假11C语言程序设计教程30-Dec-2
11、2第五章第五章 选择结构程序设计选择结构程序设计案例案例5.1 输入任意三个整数输入任意三个整数num1、num2、num3,求三个数求三个数中的最大值。中的最大值。main()int num1,num2,num3,max;printf(Please input three numbers:);scanf(%d,%d,%d,&num1,&num2,&num3);if(num1num2)max=num1;else max=num2;if(num3max)max=num3;printf(The three numbers are:%d,%d,%dn,num1,num2,num3);printf(m
12、ax=%dn,max);程序运行情况如下程序运行情况如下:Please input three numbers:11,22,18 The three numbers are:11,22,18max=2212C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计 真真语句语句1假假表达式表达式2表达式表达式1表达式表达式3语句语句4语句语句3语句语句2真真真真假假假假 3多分支选择结构的多分支选择结构的if语句语句 ifif(表达式表达式1 1)语句组语句组1;1;else if(else if(表达式表达式2)2)语句组语句组2;2;else if(else if(
13、表达式表达式3)3)语句组语句组3;3;.else if(else if(表达式表达式m)m)语句组语句组m;m;else else 语句组语句组m+1;m+1;13C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计案例案例5.2从键盘上输入一个百分制成绩从键盘上输入一个百分制成绩score,按下列原则按下列原则输出其等级:输出其等级:score90,等级为等级为A;80score90,等级等级为为B;70score80,等级为等级为C;60score70,等级为等级为D;score60,等级为等级为E。main()int score;scanf(“%d”,&s
14、core);if(score60)printf(“%c”,E);else if(score 70)printf(“%c”,D);else if(score 80)printf(“%c”,C);else if(score 90)printf(“%c”,B);else printf(“%c”,A);14C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计 4.4.ifif语句的嵌套语句的嵌套 在上述在上述3 3种种ifif语句结构中,当语句结构中,当ifif(表达式)或表达式)或elseelse后面后面的语句本身又是一个的语句本身又是一个ifif语句结构时,就形成了语
15、句结构时,就形成了ifif语句的嵌语句的嵌套结构。套结构。if if 语句的二层嵌套结构如下:语句的二层嵌套结构如下:if(if(表达式表达式1)1)if(if(表达式表达式1_2)1_2)语句语句1_11_1 else else 语句语句1_21_2elseelse if(if(表达式表达式2_1)2_1)语句语句2_12_1 else else 语句语句2_22_215C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计二、二、说明说明(1 1)elseelse子子句句(可可选选)是是ifif语语句句的的一一部部分,必须与分,必须与ifif配对使用,不能单独使
16、用。配对使用,不能单独使用。(2 2)ifif语语句句嵌嵌套套时时,elseelse子子句句与与ifif的的匹匹配配原原则则:与与在在它它上上面面、距距它它最最近近、且且尚尚未未匹匹配的配的ifif配对。配对。16C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计案案例例5.3 写写一一程程序序,从从键键盘盘上上输输入入1年年份份year(4位位十十进进制制数数),判判断断其其是是否否闰闰年年。闰闰年年的的条条件件是是:能能被被4整整除除、但但不不能能被被100整整除除,或或者者既既能能被被100整除,又能被整除,又能被400整除。整除。算法设计要点:算法设计要
17、点:(1)如如果果能能被被整整除除,则则余余数数为为,即即如如果的值等于,则表示能被整除!果的值等于,则表示能被整除!(2)首首先先将将是是否否闰闰年年的的标标志志leap预预置置为为0(非非闰闰年年),这这样样仅仅当当year为为闰闰年年时时将将leap置置为为1即即可可。这这种种处处理理两两种种状状态态值值的的方方法法,对对优优化化算算法法和和提提高高程程序序可可读读性性非非常常有有效效,请请仔仔细细体体会会。参参考考程序如下程序如下:17C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计main()main()int int year,leapyear,l
18、eap=0;/*leap=0=0;/*leap=0:预置为非闰年预置为非闰年*/printf(Please input the year:);printf(Please input the year:);scanf(%d,&year);scanf(%d,&year);if(year%4=0)if(year%4=0)if(year%100!=0)leap=1;if(year%100!=0)leap=1;else else if(year%400=0)leap=1;if(year%400=0)leap=1;if(leap if(leap1)1)printf(%d is a leap year.n,
19、year);printf(%d is a leap year.n,year);else else printf(%d printf(%d is is not not a a leap leap year.n,year);year.n,year);18C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计5.4 switch语句语句C语言提供了语言提供了switch语句直接处理多分支选择。语句直接处理多分支选择。switch(表达式)表达式)case 常量表达式常量表达式1:语句组:语句组1 break;case 常量表达式常量表达式2:语句组:语句组2 break;
20、case 常量表达式常量表达式n:语句组语句组n break;default:语句组语句组n+119C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计执行过程执行过程(1 1)当当switchswitch后后面面“表表达达式式”的的值值,与与某某个个casecase后后面面的的“常常量量表表达达式式”的的值值相相同同时时,就就执执行行该该casecase后后面面的的语语句句(组组);当当执执行行到到breakbreak语语句句或或switchswitch语语句句中中的的最最后后一一条条语语句句时时,跳跳出出switchswitch语语句,转向执行句,转向执行sw
21、itchswitch语句的下一条。语句的下一条。(2 2)如如果果没没有有任任何何一一个个casecase后后面面的的“常常量量表表达达式式”的的值值,与与“表表达达式式”的的值值匹匹配配,则则执执行行default default 后后面面的的语语句句(组组)。然然后后,再再执执行行switchswitch语句的下一条。语句的下一条。20C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计案例案例5.4 从键盘上输入一个百分制成绩从键盘上输入一个百分制成绩score,按下列原按下列原则输出其等级:则输出其等级:score90,等级为等级为A;80score90,
22、等级为等级为B;70score80,等级为等级为C;60score70,等级为等级为D;score60,等级为等级为E。main()int score,grade;printf(“Input a score(0100):”);scanf(“%d”,&score);grade=score/10;/*将成绩整除将成绩整除10,转化成,转化成switch语句中的语句中的case标号标号*/switch(grade)case 10:case 9:printf(“grade=An”);break;case 8:printf(grade=Bn);break;case 7:printf(grade=Cn);
23、break;case 6:printf(grade=Dn);break;case 5:case 4:21C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计 case 3:case 2:case 1:case 0:printf(“grade=En”);break;default:printf(“The score is out of range!n”);程序运行情况如下:程序运行情况如下:Input a score(0100):85 grade=B22C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计3说明说明(1)每每个个case
24、后后面面“常常量量表表达达式式”的的值值,必必须须各各不不相相同同,否否则则会会出出现现相相互互矛矛盾盾的的现现象象(即即对对表表达达式式的的同同一一值值,有有两两种种或两种以上的执行方案)。或两种以上的执行方案)。(2)case后后面面的的常常量量表表达达式式仅仅起起语语句句标标号号作作用用,并并不不进进行行条条件件判判断断。系系统统一一旦旦找找到到入入口口标标号号,就就从从此此标标号号开开始始执执行行,不不再再进进行行标标号号判判断断,所所以以必必须须加加上上break语语句句,以以便便结结束束switch语句。语句。思思考考题题:如如果果去去掉掉案案例例5.4程程序序中中的的所所有有br
25、eak语语句句,且且输入的成绩为输入的成绩为75,输出会如何?,输出会如何?(3)用用switch语语句句实实现现的的多多分分支支结结构构程程序序,完完全全可可以以用用if语句或语句或if语句的嵌套来实现。语句的嵌套来实现。23C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计5.5 选择结构程序设计举例选择结构程序设计举例案例案例5.5 求一元二次方程求一元二次方程ax2+bx+c=0的解(的解(a0)。)。#include math.hmain()float a,b,c,disc,x1,x2,p,q;scanf(“%f,%f,%f”,&a,&b,&c);di
26、sc=b*b-4*a*c;if(fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);/*求出两个不相等的实根求出两个不相等的实根*/x2=(-b-sqrt(disc)/(2*a);printf(x1=%7.2f,x2=%7.2fn,x1,x2);24C语言程序设计教程30-Dec-22第五章第五章 选择结构程序设计选择结构程序设计 else p=-b/(2*a);/*求出两个共轭复根求出两个共轭复根*/q=sqrt(fabs(disc)/(2*a);printf(“x1=%7.2f+%7.2f in“,p,q);/*输出两个共轭复根输出两个共轭复根*/printf(”x2=%7.2f-%7.2f in“,p,q);说明:说明:由于实数在计算机中存储时,经常会有一些微小误差,由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断所以本案例判断disc是否为是否为0的方法是:判断的方法是:判断disc的绝对值是否小的绝对值是否小于一个很小的数(例如于一个很小的数(例如10-6)。)。思考题:思考题:如果将系数如果将系数a、b、c定义成整数,能否直接判断定义成整数,能否直接判断disc是否等于是否等于0?25