第4讲C语言选择结构PPT课件
合集下载
C语言程序设计第4章选择结构程序设计ppt课件
8
printf("grade is E" );
9 else if (score >=60 && score<70 )
10
printf( "grade is D");
11 else if (score >=70 && score<80 )
12
printf( "grade is C");
13 else if (score>=80 && score<90 )
printf("a,b="); scanf("%d,%d",&a,&b); if (a>b) max=a; else max=b; printf("max=%d\n",max); }
结束
8
3.if-else if-else语句
(1)语句格式:
if (表达式1) 语句1
else if (表达式2) 语句2
不再判断,顺序执 行下面的语句
21
4.2 switch语句
switch (表达式) {case 常量表达式1:语句1 case 常量表达式2:语句2 …… case 常量表达式n:语句n [default:语句n+1] }
注意:
1. <表达式>可以是整型或字 符型表达式; 2. case后面必须是常量表达 式,不能包含变量; 3. 每个常量表达式的值应互 不相同; 4. case语句先后顺序随意; 5.若从上至下没有找到与表 达式的值相匹配的case,含有 default子句时,执行语句n+1。
第4章-选择结构PPT课件
例如“如果你有空,并且天气好,我们就去打篮球”,此 例中,只有同时满足“你有空”和“天气好”两个条件, “去打篮球”这个动作才会发生。
再如,要表示数学中常用的区间取值,要求检查int型变量x 的取值是否在[1,20]区间,初等数学中通过判断表达式 “1=<x<=20”的值来确定,C语言中并不支持这种写法,需 要表示为 “x>=1”且“x<=20”, 这两个表达式同时成立, 才表示x的取值落在了[1,20]区间。
条件判断
现实生活中我们经常要做判断,根据不同的情况去做不同的 事情:举例
1、如果外面阴天,出门就把雨伞带上
2、如果周末天气好,我们就去郊游,否则就去看电影
3、如果明天不下雨,我们就去爬山,如果下小雨,我们 就去体育馆打球,如果下大雨,就呆在屋子里。
4、如果你有空,并且天气好,我们就去打篮球
即当该表达式为结果为真时,表示y是闰年,否则 y不是闰年。相应的判断某一年份是否为非闰年的 表达式即为判断闰年对应的表达式取反:
!(((y % 4 == 0)&&(y % 100 != 0)) || (y % 400 == 0))
注意:当逻辑表达式比较复杂,出现多个条件的 连接时,建议采用“()”来明确层次关系。
X==1.0 || x==3.0 X>=z && x<=y z>x || y<x
0 || 1等于1 1 &&1等于1 0 || 0 等于0
9
高职学院 计算机专业 《程序设计基础》
逻辑运算实例
根据输入的年份数值,判断其是否为闰年。假设int型变量y里 面保存了此年份数据。
分析:根据历法,闰年的年份值是4的倍数但又不是100的倍 数,或者是400的倍数。采用自顶向下的分析方法,分析如下
再如,要表示数学中常用的区间取值,要求检查int型变量x 的取值是否在[1,20]区间,初等数学中通过判断表达式 “1=<x<=20”的值来确定,C语言中并不支持这种写法,需 要表示为 “x>=1”且“x<=20”, 这两个表达式同时成立, 才表示x的取值落在了[1,20]区间。
条件判断
现实生活中我们经常要做判断,根据不同的情况去做不同的 事情:举例
1、如果外面阴天,出门就把雨伞带上
2、如果周末天气好,我们就去郊游,否则就去看电影
3、如果明天不下雨,我们就去爬山,如果下小雨,我们 就去体育馆打球,如果下大雨,就呆在屋子里。
4、如果你有空,并且天气好,我们就去打篮球
即当该表达式为结果为真时,表示y是闰年,否则 y不是闰年。相应的判断某一年份是否为非闰年的 表达式即为判断闰年对应的表达式取反:
!(((y % 4 == 0)&&(y % 100 != 0)) || (y % 400 == 0))
注意:当逻辑表达式比较复杂,出现多个条件的 连接时,建议采用“()”来明确层次关系。
X==1.0 || x==3.0 X>=z && x<=y z>x || y<x
0 || 1等于1 1 &&1等于1 0 || 0 等于0
9
高职学院 计算机专业 《程序设计基础》
逻辑运算实例
根据输入的年份数值,判断其是否为闰年。假设int型变量y里 面保存了此年份数据。
分析:根据历法,闰年的年份值是4的倍数但又不是100的倍 数,或者是400的倍数。采用自顶向下的分析方法,分析如下
C语言第4章 选择结构程序设计PPT教学课件
例如:
(1)若a=4,则!a的值为
(2) 0
(3)(2) 若a=4,b=5,则a&&b的值为
(4) 1
(5)(3) a、b值同前, a||b的值为
(6) 1
(4) 4&&0||2的值为
1 2020/12/10
12
特别注意! (1) 用&&对两个表达式进行计算时,若第一个表达式的值
为“假”,则运算结果与第二个表达式的值无关,结果肯 定为假,所以C语言规定此时第二个表达式将不再计算。
(因为“>”运算符是自左至右的结合方向,先执行 “a>b”得值为1, 再执行关系运算“1>c”,得值0, 赋给f)。
2020/12/10
8
逻辑运算符
逻辑运算符是对两个关系式或逻辑值进行运算的,运算结 果仍是逻辑值。
在C语言中,逻辑值用数值非0和0来表示逻辑真和假的, 所以逻辑运算符也可以对两个数值型数据进行运算,包括 整型、实型、字符型等数据。
3.关系运算符的使用实例
设变量定义如下: char c1=‘a’,c2=‘A’;
(c1,c2可看成整型,其值为97,65)
int n1=65,n2=97; float f1=0.3E1,f2=3.0001;
则: ① c1>c2,n1>n2,f1==f2的值依次是 1.,0,0
② c1>=n1,c2>=n2,c1==n2的值依次是 1,0,1
③ f1>c1,f2<c2,f1==n1-62的值依次是 0,1,1
④ c1>c2>=1<=0==1!=0的值是 0
⑤ c1>c2>=n1<=n2==f1!=f2的值是 1
C语言04选择结构.ppt
10
C Programming Language
10 10
-10 2
,z;执行语句z=x>y?++x:y++;后,x、 y、z的值分别为____、____和 ____ 。
2. 已知int a=4,b=5,c;执行语句c=a=a>b后,a的值为 ____ 。
3. 已知int x=10,y=3 , z;执行语句printf("%d\n" , z = (x%y , x/y));后,输出结果为 ____ 。
种类:< <= = = >= > != 结合方向:自左向右 优先级别:
< <= 优先级6 > (高)
>=
== 优先级7 != (低)
关系表达式的值:是逻辑值“真”或“假”,
用1和0表示
例 int a=3,b=2,c=1,d,f;
a>b
(a>b)==c
b+c<a
3
C Programming Language
已知a=1,b=2,c=3
逻辑运算规则简化:
⑴、两个表达式作&&,只要一个的值为0, 不必计算另一个,该表达式的值为0。 例:int a=0,b=2;a && (b+=b)
⑵、两个表达式作 || ,只要一个的值非0, 不必计算另一个,该表达式的值为1。 例:int a=5,b=2; a || (b+=b) 例:a=1;b=2;c=3;d=4;m=1;n=1; (m=a>b)&&(n=c>d) m=?0 ,n=?1
|| (12)
! :从右向左 && :从左向右 || :从左向右
C语言程序课件ppt第4章选择结构程序设计谭浩强C程序设计第四版
C★
A★
●B
4.2.1 用if语句处理选择结构举例
C★ A ●★ ● B
4.2.1 用if语句处理选择结构举例
C★ A ● ●★ B
#include <stdio.h> int main() { float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b) 如果a>b
{ t=a;
a=b; 将a和b的值互换
b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; }
#include <stdio.h>
int main()
{ float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{ t=a; a=b;
选择结构,用if语句实现的
a && b 真 假 假 假
a || b 真 真 真 假
4.4.1 逻辑运算符及其优先次序
➢逻辑运算符的优先次序
! → && → ||
(!为三者中最高)
➢与其他运算符的优先次序
! 算术运算符 关系运算符
&& 和 || 赋值运算符
(高) (低)
4.4.2 逻辑表达式
➢ 逻辑表达式的值应该是逻辑量“真”或“假” ➢ 编译系统在表示逻辑运算结果时
4.3.1关系运算符及其优先次序
c>a+b a>b==c a==b<c a=b>c
等效于 c>(a+b) 等效于 (a>b)==c 等效于 a==(b<c) 等效于 a=(b>c)
《C语言程序设计(第五版)》第4章选择结构程序的设计 PPT课件
►(b*b-4*a*c)>=0
b*b-4*a*c>=0
►z= (x>y+3)
z= x>y+3
►(a>b)= = c
a>b= =c
►a=(b!=c)
a=b!=c
当然为提高程序的可读性、可维护性你不妨多使用 括号,因为C语言中的有些优先级很容易让你不小心犯 错。
C语言程序设计
第4章 选择结构程序设计
第10页
“>”的结果为“假”,即条件不成立。
C语言程序设计
第4章 选择结构程序设计
第5页
4.1 关系运算及关系表达式
4.1.1 关系运算符及其优先次序
运算符
含义
> 大于
优先级
结合性
>= 大于或等于 这些关系运算符等优
< 小于
先级,但比下面的优 先级高
左结合性
<= 小于或等于
== 等于 != 不等于
这些关系运算符等优 先级,但比上面的优 先级低
C语言程序设计
第4章 选择结构程序设计
第4页
4.1 关系运算及关系表达式
所谓“关系运算”实际上就是“比较运算”, 即将两个数据进行比较,判定两个数据是否符合 给定的关系。例如,
► “x>y+3”中的“>”表示一个大于关系运算。 ➢如果a的值是5,b的值是1,则大于关系运算
“>”的结果为“真”,即条件成立; ➢如果a的值是2,b的值是1,则大于关系运算
因为按照自左至右的结合方向,先执行关系运算
“a>b”得值为1(“真”),再执行关系运算“1>c”, 得值为0(“假”),因此y为0。
C语言程序设计
C语言程序设计第4章选择结构程序设计简明教程PPT课件
例:a<c-d
‘a’+5>c -i-5*j==k+1 a==b<c
C语言中没有专用是“真”和“假”。
C语言程序设计 第4章 选择结构程序设计 5
【例4.1】关系表达式的应用 #include <stdio.h> int main() { char c='m'; int i=2,j=1,k=6; float x=3e+5,y=1.85; printf("%d,%d\n",'a'+7<c,-i-2*j<=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j==-2*j+k,k==j==i+9); return 0; }
逐渐缩小判 断的范围
第4章 选择结构程序设计
13
补充1:流程图表示算法(ISO)
流程图是用一些图框来表示各种操作 用图形表示算法,直观形象,易于理解
起止框
输入输出框
判断框
处理框
流程线
连接点
注释框
补充2:流程图表示算法(NS)
N-S流程图用以下的流程图符号:
p Y A N B 当p1成立 A 循环结构 (当型)
思考:求5>2&&8<5-!0 的值
C语言程序设计 第4章 选择结构程序设计 10
逻辑运算符的短路特性:
在C语言中,&&和||逻辑运算符具有短路特性: (1)在一个或多个&&连接的逻辑表达式中,只要有一 个操作数为0(逻辑假),则停止后面的&&运算,因为 此时可以判断逻辑表达式结果为假。 (2)由一个或多个||连接的逻辑表达式中,只要遇到第 一个操作数不为0(逻辑真),则停止后面的||运算,因为 此时可以判断逻辑表达式结果为真。
c语言 第四章 选择结构课件
if (expr1) if (expr2) statement1 else statement2
内嵌if
if (expr1) if (expr2) statement1
else statement3
内嵌if
if (expr1) statement1
else if(expr3) statement3 else statement4
if ~ else 配对原则:缺省{ }时,else 总是和它上面离它最近的未配对的if配对
if(……) if(……) if(……) else…... else…...
else…...
例: if (a==b) if(b==c) printf("a==b==c");
else printf("a!=b");
if(x>y) printf("X>Y\n");
else printf("X<Y\n");
else printf("X==Y\n");
}
运行:Enter integer x,y:12,23 X<Y Enter integer x,y:12,6 X>Y Enter integer x,y:12,12 X==Y
内嵌if
if (expr1)
if (expr2) else
statement1 statement2
内嵌if
else
if(expr3) else
statement3 statement4
内嵌if
例 输入两数并判断其大小关系
main() { int x,y;
printf("Enter integer x,y:"); scanf("%d,%d",&x,&y); if(x!=y)
C语言第四章选择结构ppt课件
/* 定义实型变量 x , y */
/* 求 x 的绝对值并赋给 y */
/* 输入 x 的值 */
/* 输出 x 的绝对值 */
/* 编译预处理:包含头文件 */
二、if ... else 语句
对这一句话“如果x>=0则y=x,如果x<0则y=-x”,可以写出以下语句:
表达式1 ? 表达式2 :表达式3
表达式1为真,结果为表达式2的值 表达式为假,结果为表达式3的结果; 运算符 “ ?:”的优先级只在逗号和赋值运算 符之前;表达式2和表达式3只可能执行一个;这是C语言中的唯一一个三目运算符;条件运算符的结合方向为“自右自左”。
例:已知a=5,b=6,c=7,d=8,n=2 ; 执行以下语句后表达式的值为多少? n的值为多少? (a < b ) ? ( c + d ) : ( + + n )
if ( 表达式1 ) if ( 表达式2 ) 语句1; else 语句2;else if ( 表达式3 ) 语句3; else 语句4;
实现if ~ else 正确配对方法:加{ }
五、条件运算符
能否把两条语句合成一句,更好地体现这种逻辑关系呢?这就是 if ...... else 语句的功能。
简单的if 语句只能表达“如果 ,那么 ”的含义,而if ...... else 语句却能表达“如果 那么 否则 ”的含义。
If ( x>=0) y=x;if (x<0) y=-x;
a>b?a:c>d?c:d
a>b?a:(c>d?c:d)
表达式值为15,n=2
六、 switch 语句
switch 语句是多分支的选择语句又称开关语句。
/* 求 x 的绝对值并赋给 y */
/* 输入 x 的值 */
/* 输出 x 的绝对值 */
/* 编译预处理:包含头文件 */
二、if ... else 语句
对这一句话“如果x>=0则y=x,如果x<0则y=-x”,可以写出以下语句:
表达式1 ? 表达式2 :表达式3
表达式1为真,结果为表达式2的值 表达式为假,结果为表达式3的结果; 运算符 “ ?:”的优先级只在逗号和赋值运算 符之前;表达式2和表达式3只可能执行一个;这是C语言中的唯一一个三目运算符;条件运算符的结合方向为“自右自左”。
例:已知a=5,b=6,c=7,d=8,n=2 ; 执行以下语句后表达式的值为多少? n的值为多少? (a < b ) ? ( c + d ) : ( + + n )
if ( 表达式1 ) if ( 表达式2 ) 语句1; else 语句2;else if ( 表达式3 ) 语句3; else 语句4;
实现if ~ else 正确配对方法:加{ }
五、条件运算符
能否把两条语句合成一句,更好地体现这种逻辑关系呢?这就是 if ...... else 语句的功能。
简单的if 语句只能表达“如果 ,那么 ”的含义,而if ...... else 语句却能表达“如果 那么 否则 ”的含义。
If ( x>=0) y=x;if (x<0) y=-x;
a>b?a:c>d?c:d
a>b?a:(c>d?c:d)
表达式值为15,n=2
六、 switch 语句
switch 语句是多分支的选择语句又称开关语句。
第4讲选择结构
4
二、if 语句的形式2—双边选择结构
格式: if (表达式) 语句1 else 语句2
执行过程:
表达式取值非0,即条件成立,执行语句1后继续向下执行 判断条件 表达式取值为0,即条件不成立,跳过语句1执行语句2后向 下执行 (入口)
Y P
语句1
N
语句2
(出口)
5
二、if 语句的形式2—双边选择结构
x=2,y=1
*/
17
用多层选择结构求分段函数的值
从键盘上输入2时程序的运行顺序
main ( ) { int x,y; scanf("%d",&x); if(x>0) y=1; else if(x==0) y=0; /*x>0不成立再判断x==0是否成立*/ /* x>0和x==0都不成立,即x<0 */ else y=-1; printf("x=%d,y=%d\n",x,y); }
15
求分段函数的值
根据所输入的x之值,求:
y=
1 0 -1
(x>0) (x=0) (x<0)
程序分析:要对x 的值判断之后计算y 的值,要用到 选择结构。考虑到要进行两次判断,因而使用单边或双 边选择结构都不能很好地解决这一问题,应使用多层选 择结构或选择结构的嵌套。
16
用if 嵌套结构求分段函数的值
第4讲
选择结构程序设计
要设计选择结构程序,要考虑两个方面的问题:一
是在C语言中如何来表示条件,二是在C语言中实现选择
结构用什么语句。 在C语言中表示条件,一般用关系表达式或逻辑表达
式,实现选择结构用if语句或switch语句。
4.1 if语句 4.2 switch语句
C语言程序课件ppt-第4章选择结构
void main( ) {
int score;
printf("input a score:");
scanf("%d",&score);
switch(score/10) {
case 10:
case 9: printf("优秀\n");break;
case 8: printf("良好\n");break;
(2)||
(逻辑或) 相当于其他语言中的OR
(3)!
(逻辑非) 相当于其他语言中的NOT
例:a&&b 若a,b为真,则a&&b为真。
a||b 若a,b之一为真,则a||b为真。
优!先a次序:若a为真,则!a为假。 !(非)->&&()->||() 逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算 术运算符
ch=ch+32; printf("%c\n",ch); } }
4.3.2 双分支if语句
双分支if语句的基本格式为: if(表达式)
语句块1; else
语句块2;
注意:⑴ 语句块1或语句块2都可以是单一语句,也可以是 复合语句;else部分不能独立存在,即else之前一定有 一个“;”号,它必须是if语句的一部分。
2.逻辑表达式
•用逻辑运算符将关系表达式或逻辑量连接起来的式子就 是逻辑表达式。 •逻辑表达式的值应该是一个逻辑量“真”或“假”。
例:设a=4,b=5: !a的值为0 a||b的值为1 4&&0||2的值为1
任何非零的数值被认作“真”
第四章C语言选择结构PPT课件
( 课次 1,课时 3 )
2008-04-18
1
1、关系运算和逻辑运算
2、if语句构成的选择结构
3、条件表达式构成的选择结构
4、switch语句以及用switch语句和
break语句构成的选择结构
2008-04-18
2
➢ C语言中的逻辑值:用非零值来表示“真”, 用零表示“假”。
➢ 关系运算符:
else子句的if语句 : 语句:
if(表达式1)
if(表达式1)
if(表达式2)
{ if(表达式2) 语句1}
语句1
else
else
语句2
语句2 注意:在if子句中的一对花括号不可
else
缺少.因为c语言语法规定:else子
语句3
句总是与前面最近的不带else的if相
结合,与书写格式无关.
2008-04-18
main()
{ int x,y;
printf(“Enter x &y:\n”);
scanf(“%d %d”,&x,&y);
printf(“x,y:%d %d\n”,x,y);
if(x>y)printf(“x=%d\n”,x);
if(y>x)printf(“y=%d\n”,y);
if(x==y)printf(“x==y =%d\n”,x);
}
2008-04-18
8
➢ 例2、输入三个整数,分别放在变量a、b、c中,程序把输入的 数据重新按由小到大的顺序放在变量a、b、c中,最后输出a、b、 c中的值。
main()
{ int a,b,c,t;
printf(“input a,b,c: “);
2008-04-18
1
1、关系运算和逻辑运算
2、if语句构成的选择结构
3、条件表达式构成的选择结构
4、switch语句以及用switch语句和
break语句构成的选择结构
2008-04-18
2
➢ C语言中的逻辑值:用非零值来表示“真”, 用零表示“假”。
➢ 关系运算符:
else子句的if语句 : 语句:
if(表达式1)
if(表达式1)
if(表达式2)
{ if(表达式2) 语句1}
语句1
else
else
语句2
语句2 注意:在if子句中的一对花括号不可
else
缺少.因为c语言语法规定:else子
语句3
句总是与前面最近的不带else的if相
结合,与书写格式无关.
2008-04-18
main()
{ int x,y;
printf(“Enter x &y:\n”);
scanf(“%d %d”,&x,&y);
printf(“x,y:%d %d\n”,x,y);
if(x>y)printf(“x=%d\n”,x);
if(y>x)printf(“y=%d\n”,y);
if(x==y)printf(“x==y =%d\n”,x);
}
2008-04-18
8
➢ 例2、输入三个整数,分别放在变量a、b、c中,程序把输入的 数据重新按由小到大的顺序放在变量a、b、c中,最后输出a、b、 c中的值。
main()
{ int a,b,c,t;
printf(“input a,b,c: “);
C语言-04-嵌套选择结构ppt课件
case ‘a’:printf(“90—100\n”);break;
grade(a,b,c,d,e):\n”); case ‘b’:printf(“80—90\n”);break;
scanf(“%c”,&grade); case ‘c’:printf(“70—80\n”);break;
case ‘d’:printf(“60—70\n”);break;
printf( “Today is Monday!”);
else if (i= =2)
printf( “Today is Tuesday!”);
else if (i= =3)
printf( “Today is Wednesday !”);
else if (i= =4)
printf( “Today is Thursday!”);
}
2
if嵌套举例
#include<stdio.h>
main( )
{ int x,y;
scanf(“%d %d”,&x,&y);
if(x>0)
{ if(y>0)printf(“ 1”);
else printf(“ -1”);
}
else printf(“ 0”,);
}
完整最新ppt
3
4.2.2 if … else if结构
(5) 执行完一个case语句块后,流程转到下一个 case语句继续执行
(6) 在执行过程中碰到break语句,程序退出switch 结构
完整最新ppt
8
例、根据学生成绩的等级打印gt;
main( )
switch(grade)
{ char grade;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
If语句和用if语句构成的选择结构
if语句(条件选择语句)
if语句的三种形式 ➢ 形式一: 格式:if (expression) statement
=0 expr
非0 statement
执行过程:
➢ 形式二:
例格:式i:f ip(f rx(ei>xnypt)rfe(ss“ion%)d”,x)非; 0 expr
11
if嵌套语句的一般形式:
if (expr1) if (expr2) statement1 else statement2
内嵌if
if (expr1) {
if (expr2) statement1
} else
内嵌if
if (expr1)
statement3
statement1
if (expr1)
…...
expr1
=0
[ else
statementn ]
非0
=0 expr2
例:iefl(ssealiafry(>s1a非0l0a00r)y>i8n0d0e)exxip=nr0d3.e4x;=0=.03;
else if (salary>60非0)0index=0.2; seetalltessmeentii1fnd(essxtaa=tel0ma;nrty2>40s0ta)teimnndte3x=0.st1a;temntn
优先级
! :从右向左 && :从左向右 || :从左向右
例 a=4;b=5;
!a
值为0
例:a&a&<b=x && x<值=b为1
// (a<=x) && (x<=b)
a|a|b>b&&x>y 值为1
//(a>b)&&(x>y)
!aa||=b=b||x==y值为1 4&!&a0||||a2>b 值为1
else if(expr3)
if (expr2) else
statement1 statement2
➢ 结合方向:自右向左
取expr2值
如 a>b?a:c>d?c:d a>b?a:(c>d?c:d)
取expr3值
➢ expr1、expr2、expr3类型可不同,表达式值取较高的类型
例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x‡0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5
//表达式值1
b+c<a
//表达式值0
d=a>b
//d=1
f=a>b>c
//f=0
2
关系运算注意:
例 若a=0; b=0.5; x=0.3; 则 a<=x<=b的值为 0
例 5>2>7>8在C中是允许的, 值为 0
例 int i=1, j=7,a; a=i+(j%4!=0); 则a= 2
例 ‘a’>0 结果为1 ‘A’>100 结果为0
//(a==b)||(x==y) //(!a)||(a>b)
5>3&&2||8<4-!0
(5>3)&&2||(8<(4-(!0))) 值为1
‘c’&&‘d’
值为1
6
逻辑运算的短路特性:逻辑表达式求解时,并非所有的 逻辑运算符都被执行,只是在必须执行下一个逻辑运算 符才能求出表达式的解时,才执行该运算符
=0
statement1
else
statement1
statement2
statement2
执行过程:
例:if (x>y) max=x; else max=y;
9
➢ 形式三: 格式: 执行过程:
if ( expr1 ) else if (expr2 ) else if (expr3 )
statement1 statement2 statement3
第四章 选择结构
1
关系运算符和表达式
关系运算符
种类:<、<=、==、>=、>、!= 结合方向:自左向右 优先级别:
关系<表达式的值:是逻辑值“真”或“假”,用1和0
表示<= 例>
>=
int
优先级6(高)
a=3,b=2,c=1,d,f;
a>b
== !=
优先级7(低)
//表达式值1
(a>b)==c
例 a&&b&&c //只在a为真时,才判别b的值;
只在a、b都为真时,才判别 c的值
例 a||b||c
//只在a为假时,才判别b的值;
只在a、b都为假时,才判别 c的值
例 a=1;b=2;c=3;d=4;m=1;n=1;
(m=a>b)&&(n=c>d)
//结果m=0,n=1
7
条件运算符与表达式
一般形式: expr1 ? expr2 : expr3
➢ 执行过程 ➢ 功能:相当于条件语句,但不能取代一般if语句
➢➢例例如例条优件先求(pi(((xefaxcxr>l运级(=>%>isnaap0=e==pt>+2:算r?fb0‘ri(ab=|n1i)“b)n1符’)?=ta:?|tf(&3’(f+x1xY(可“&:)|“%<-b’?%:x嵌’|0c1dN=d<?:”%0’套”-,=,a1b‘d)z:);0\’;n))?”,cb->’a0’+?’aA+’:bc:a-bp);r非in0tf(“%dex”,par>1b?a:b=)0;
10
说明: ➢ if后面的表达式类型任意 ➢ 语句可以是复合语句 ➢ if(x) if(x!=0) ➢ if(!x) if(x==0) 如:if(a==b&&x==y) printf(“a=b,x=y”); if(3) printf(“OK”); 如:iifn(t‘xa;’) printf(“%d”,’a’); scanf(“%d”,&x); if(x) printf(“x!=0”); else printf(“x==0”);
4
逻辑运算符和表达式
逻辑运算符
➢ 种类: !、&&、|| ➢ 逻辑运算真值表
a
b
!a
真
真
假
真
假
假
假
真
真
假
假
真
!b a&&b a||b
假
真
真
真
假
真
假
假
真
真
假
假
➢ C语言中,运算量: 0表示“假”, 非0表示“真”,
运算结果: 0表示“假”, 1表示“真”,
5
优先级
! (2) 高 && (11) || (12) 低
3
关系运算注意:
➢ 应避免对实数作相等或不等的判断
如:1.0/3.0*3.0==1.0 结果为 0 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6
➢ 注意区分“=”与“==”
例:int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);