收藏 分享(赏)

C语言选择结构.ppt

上传人:11xg27ws 文档编号:5865257 上传时间:2019-03-20 格式:PPT 页数:25 大小:151.50KB
下载 相关 举报
C语言选择结构.ppt_第1页
第1页 / 共25页
C语言选择结构.ppt_第2页
第2页 / 共25页
C语言选择结构.ppt_第3页
第3页 / 共25页
C语言选择结构.ppt_第4页
第4页 / 共25页
C语言选择结构.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、1,第五章 选择结构程序设计,5.1 关系运算符与关系表达式 5.2 逻辑运算符与逻辑表达式 5.3 if语句 5.4 switch语句 5.5 选择结构程序设计举例,2,5.1 关系运算及其表达式,所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。 一、 关系运算符及其优先关系 1关系运算符 C语言提供6种关系运算符: = = != 注意:在语言中,“等于”关系运算符是双等号“= =”,而不是单等号“= ”(赋值运算符)。 2优先级 关系运算符的优先级,低于算术运算符,但高于赋值运算符。 a+b b+c 等效于 (a+b)(b+c)。 a=bc 等

2、效于a =( bc)。,3,3.结合性:自左至右;二、 关系表达式 1关系表达式的概念所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的:ab,a+bc-d,(a=3)=b,(ab)= =(bc)2关系表达式的值:条件成立为真,整数“”表示“逻辑真;条件不成立为假,用整数“”表示“逻辑假”。 例如: int a=2,b=3,c=1;a33 ,值是1 , 再计算 12,值为 1,4,练习,假设num1=3,num2=4,num3=5,则:(1)num1num2的值=?。(2)(num1num2)!=num3的值=?。(3)num1num2n

3、um3的值=?。思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?(4)(num1num2)+num3的值=?再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算等。,5,三、条件运算符 ?和: ,它们与三个操作数组组成三元运算。 形式为: ? : 求值规则和表达式的值:真(非0),求解表达式2求解表达式1 条件表达式的值假(0),求解表达式3 例如: int max,a=5,b=3;max=ab?a:b max及赋值表达式的值均为5;ab?a:b+1 条件表达式的值为4。,总结:1、除单目运

4、算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。2、逗号运算符的优先级最低,赋值运算符次之。,6,5.2 逻辑运算及其表达式,关系表达式只能描述单一条件,例如“x=0”。如果需要描述“x=0”、同时“x10”,就要借助于逻辑表达式了。一、 逻辑运算符及其优先次序 1.逻辑运算符及其运算规则 (1)C语言提供三种逻辑运算符: & 逻辑与(相当于“同时”) | 逻辑或(相当于“或者”) ! 逻辑非(相当于“否定”),7,(2)运算规则1)&:全真为真。当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。 2) | :全假为假。当且仅当两个运算量的值都为“假”时,运

5、算结果为“假”,否则为“真”。3) ! :非真即假,非假即真。当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。 例如,假定x=5,则(x=0) & (x5)的值为“假”,!(x5)的值为“真”。,8,2逻辑运算符的运算优先级 (1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: !(非) &(与) |(或)(2)与其它种类运算符的优先关系! 算术运算 关系运算 & | 赋值运算3逻辑运算符的结合律 C语言逻辑运算符采用左结合律。表达式中出现优先级别为同一级别的运算符时, 按从左到右的结合方向处理。例如: a & b & c 计算顺序为:(a& b)& c。

6、,4 - 0,1 & 2,8 4,1,0,1,5 3 & 2 | 8 4 - !5,9,二、逻辑表达式1逻辑表达式的概念所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。例如,a=a & a=1 num31的值=1。,10,3说明 在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:1)对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。 例:a = 0; b = 1; c = a+ 结果: a为0,b为0,c为0,d为1。,11,

7、5.3 if语句 if语句是一种用来实现选择结构程序的语句。 一、if语句的四种形式:1单分支if语句一般形式为:if (表达式) 语句组 含义:若表达式为真,执行语句,否则执行if后面的语句组。2双分支if语句 一般形式为:if (表达式) 语句组1else 语句组2 含义:若表达式为真,执行语句组1,否则执行语句组2。,语句组2,12,案例5.1 输入任意三个整数num1、num2、num3,求三个数中的最大值。 main() int num1,num2,num3,max; printf(“Please input three numbers:“); scanf(“%d,%d,%d“, ,

8、程序运行情况如下: Please input three numbers:11,22,18 The three numbers are:11,22,18 max=22,13,假,表达式2,表达式3,语句4,语句3,语句2,真,真,假,假,3多分支选择结构的if语句if(表达式1) 语句组1;else if(表达式2) 语句组2;else if(表达式3) 语句组3;.else if(表达式m) 语句组m;else 语句组m+1;,14,案例5.2从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score90,等级为B;70score80,等级为C;60

9、score70,等级为D;score60,等级为E。 main( ) int score;scanf(“%d”, ,15,4. if语句的嵌套在上述3种if语句结构中,当if(表达式)或else后面的语句本身又是一个if语句结构时,就形成了if语句的嵌套结构。 if 语句的二层嵌套结构如下: if ( 表达式1)if ( 表达式1_2)语句1_1else语句1_2 elseif ( 表达式2_1) 语句2_1else语句2_2,16,二、说明 (1)else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。 (2)if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最

10、近、且尚未匹配的if配对。,17,案例5.3 写一程序,从键盘上输入1年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者既能被100整除,又能被400整除。 算法设计要点: (1)如果能被整除,则余数为,即如果的值等于,则表示能被整除! (2)首先将是否闰年的标志leap预置为0(非闰年),这样仅当year为闰年时将leap置为1即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效,请仔细体会。参考程序如下:,18,main() int year,leap=0;/* leap=0:预置为非闰年*/printf(“Please inpu

11、t the year:“);scanf(“%d“, ,19,5.4 switch语句,C语言提供了switch语句直接处理多分支选择。 switch(表达式) case 常量表达式1:语句组1 break;case 常量表达式2:语句组2 break;case 常量表达式n:语句组n break;default: 语句组n+1 ,20,执行过程 (1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句或switch语句中的最后一条语句时,跳出switch语句,转向执行switch语句的下一条。(2)如果没有任

12、何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的下一条。,21,案例5.4 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;score60,等级为E。 main() int score, grade; printf(“Input a score(0100): ”); scanf(“%d”, case 5: case 4:,22,case 3:case 2:case 1:case 0:

13、printf(“grade=En”); break;default: printf(“The score is out of range!n”); 程序运行情况如下: Input a score(0100): 85 grade=B,23,3说明 (1)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。(2)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。 思考题:如果去掉案例5.4程序中的所有b

14、reak语句,且输入的成绩为75,输出会如何?(3)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。,24,5.5 选择结构程序设计举例,案例5.5 求一元二次方程ax2+bx+c=0的解(a0)。 #include “math.h“ main() float a,b,c,disc,x1,x2,p,q; scanf(“%f,%f,%f”, ,25,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?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报