C语言_选择结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4
例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为 0 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6
C Programming Language
逻辑运算符和表达式
逻辑运算符
种类: ! && || 逻辑运算真值表(见教材) (逻辑运算--->产生真假值的运算)
关系运算符

3
种类:< <= = = >= > != 结合方向:自左向右 优先级7 (低) 优先级别: 关系表达式的值:是逻辑值“真”或“假”, 用1和0表示c>a+b 例 int a=3,b=2,c=1,d,f; 例 //c>(a+b) a>b!=c //(a>b)!=c a>b //表达式值1 a==b<c //a==(b<c) (a>b)==c //表达式值1 a=b>c //a=(b>c) b+c<a //表达式值0 d=a>b // d=1 C Programming Language f=a>b>c // f=0
11
C Programming Language
7. 已知int x=15,y=5; 执行语句 printf(“%d\n”,x%=(y%=2));后,输出结果为____。 8. int a=3,b=4,c=5;则值为0的表达式是() A) „a‟&&„b‟ B) a<=b C) a||b+c&&b-c D) !((a<b)&&!c||1) 9. “20<x<30或x<-100”的C语言表达式是____。 10. main( ) { int a=-1,b=4,k; k=(a++<=0)&&(!(b--<=0)); printf(“%d%d%d”,k,a,b); } 若改为++a<0呢?
变换一下角度,如何判断year不是闰年?
(year%4!=0)||(year%100==0 && year % 400 !=0)
8
C Programming Language
条件运算符与表达式
一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句 条件运算符可嵌套 例 if a+|b| 例 (a==b)?’Y’:’N’ 例 求 (a>b) 0 非0 如(x%2==1)?1:0 x>0?1:(x<0?-1:0) printf(“a+|b|=%d\n”,b>0?a+b:a-b); expr1 printf(“%d”,a); printf(“%d”,a>b?a:b); else (x>=0)?x:-x 例优先级: 13 取expr2值 取expr3值 (c>=‘a’ && c<=‘z’)?c-’a’+’A’:c x?„a‟:„b‟ printf(“%d”,b); //x=0,表达式值为‘b‟; x‡0,表达式值为 结合方向:自右向左 ‘a‟如 a>b?a:c>d?c:d a>b?a:(c>d?c:d) x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5 expr1、expr2、expr3类型可不同,表达式值取 较高的类型
A1
A2
A3
Am
An
16
C Programming Language
(4)if语句嵌套的问题
在if语句中又包含一个或多个if语句称为if语句 嵌套。应该注意if与else的配对关系。从最内 层开始,else总是与它上面最近的而且是未曾 配对的if配对。试分析:
17
if ( ) if ( ) else else if ( ) else
if (x<0 ) y=-1; else if(x==0) y=0; else y=1; if ( x>=0) if(x>0) y=1; else y=0; else y=-1;
C Programming Language
1, 当x 0时 y 0, 当x 0时 1, 当x 0时
7
C Programming Language
例:判断某一年是否是闰年。条件是
① 能被4整除,但不能被100整除 ② 能被400整除。 用year表示年份,判断闰年的逻辑表达式为:
(year%4==0 && year%100!=0)||(year % 400==0)
如果给year输入一个的值,使上面的表达式的值为1 时,则year所代表的年份就是闰年。
12
C Programming Language
if 语句
1、if语句先求出给定的条件,然后根据条 件是否满足(“真”或“假”)决定给 出的两种操作之一。即用来实现选择结 构。
2、下面介绍if语句的三种形式。
单分支 双分支 多分支

13
C Programming Language
(1)单分支选择结构
y=-1; if(x!=0) if(x>0) y=1; else y=0;
y=0; if(x>=0) if(x>0) y=1; else y=-1;
18
3、若在if语句中,在表达式为“真”和 “假”时,都只执行一个赋值语句给同 一个变量赋值,则可以用简单的条件运 算符处理。如: if (a>b) max=a; else max=b; 可改为: max=(a>b)?a:b;
20
C Programming Language
if (3) if („a‟) if ( 2.1)
printf(“%s\n”,“O.K”); printf(“%s\n”,“O.K”); printf(“%s\n”,“O.K”);
不可 省去
21
if(x>0) y=0;z=0; if(x>0) { y=0;z=0;}; else y=1;z=1; else y=1;z=1; 不需要加 if (a+b>c&&a+c>b&&b+c>a) { s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“%7.2f\n”,area); } else printf(“It is not a trilateral!”);
C 语言程序设计 Lecture 4
选择结构程序设计
C Programming Language
关系运算符和关系表达式《
逻辑运算符和逻辑表达式《 条件运算符和条件表达式《 if语句《
switch语句《
goto语句《 选择结构程序示例《
2
C Programming Language
关系运算符和表达式
C Programming Language
-2
1. 已知int x=1,y=2,z;执行语句z=x>y?++x:y++;后,x、 y、z的值分别为____、____和 ____ 。 2. 已知int a=4,b=5,c;执行语句c=a=a>b后,a的值为 ____ ( main 。) 3. {已知int x=10,y=3 , z;执行语句printf("%d\n" , z = int a,b,d=222; (x%ya=d/100%9; , x/y));后,输出结果为 ____ 。 4. 已知char b=(-1)&&(-1); ch='A„;ch=(ch>='A'&&ch<='Z')?(ch+32):ch;的值为 printf(“%d,%d\n“,a,b); ____。 5. }已知w=1,x=2,y=3,z=4;则表达式5+w>x?w:y<z?y:z; 的值为 ____。 6. 执行printf(“%d”,(a=2&&(b=-2)));语句后,输出结果 为____。
[例] 输入三个实数,按从小到大排列并输出。 main() { float a,b,c,t; scanf("%f,%f,%f", &a,&b,&c); if(a>b) {t=a;a=b;b=t;} /*a≤b */ if(a>c) {t=a;a=c;c=t;} /*a≤c */ if(b>c) {t=b;b=c;c=t;} /*b≤c */ printf("%f,%f,%f",a,b,c); }
C Programming Language
[例] 输入两个实数,按从小到大排列 并输出。 main() { float a,b,t; scanf("%f,%f",&a,&b); if(a>b) { t=a; a=b;b=t; } printf("%5.2f,%5.2f\n",a,b); }
22
C Programming Language
6
已知a=1,b=2,c=3
C Programming Language
逻辑运算规则简化:
⑴、两个表达式作&&,只要一个的值为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=?,n=? 0 1
19
C Programming Language
4、使用if语句的注意事项 ①三种形式的if语句后面的表达式一般 为逻辑表达式或关系表达式,但也可以 是其它数值类型的表达式(如整型、实 型、字符型和指针型) ②注意每个语句后面都有分号; ③如果语句 m为多个操作语句,则必须 用{ }括起来成为一个复合语句。
15
C Programming Language
(3)多分支选择结构

P1 真
假 P2 真 P3 真 假 Pm 真 假
形式: if (表达式) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 ……... else if (表达式m) 语句m else 语句n 例子:见书。
优先级: 结合方向:
!
&& ||
(2) 高
(11) (12) 低
!
:从右向左
&& :从左向右 || :从左向右
!
算术
关系
逻辑
赋值
a<=x&&x<=b // (a<=x) && (x<=b) 0 ① a+b>c&&b==c ② a||b+c&&b-c //(a>b)&&(x>y) 1 a>b&&x>y ③ !(a>b)&&!c||1//(a==b)||(x==y) 1 a==b||x==y 0 ④ !(x=a)&&(y=b)&&0 //(!a)||(a>b) !a||a>b 1 ⑤ !(a+b)+c-1&&b+c/2
语句1 语句2 语句3 语句4
if ( ) if ( ) 语句1 else if ( ) 语句2 else 语句3
if ( ) { if ( ) 语句1} else if ( ) 语句2 else 语句3
C Programming Language
if语句嵌套的问题举例
下面实现函数(见右) 的程序段哪些是正确的, 哪些是错误的?
形式: if (表达式) 语句 例子: if (x>y) printf("%d\n",x); printf("%d\n",y); if (a>b&&b>c) x=a;
C Programming Language
P


A
14
(2)双分支选择结构
形式: if (表达式) 语句1
B

P

A
else 语句2 例子: if (x>y) printf(”%d\n”,x); else printf(”%d\n”,y);

9
C Programming Language
课堂练习
1.判断一个点是否 落入圆形中。 2.判断一个点是否落 入阴影部分。 (小圆的半径为1)
-10
+y*y<=100
2 2
10
(pow(x-2,2)+pow(y-2,2))<=1|| -2 (pow(x-2,2)+pow(y+2,2))<=1|| (pow(x+2,2)+pow(y-2,2))<=1|| (pow(x+2,2)+pow(y+2,2))<=1
< <= > >= == !=
优先级6 (高)
关系运算注意:
例 若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); 结果为 结果为 1 0 则a= 2
例 ‘a‟>0 ‘A‟>100


C语言中,
若a=4,!a的值为0 若a=4,b=5, 则a && b 的值为1 则a || b 的值为1 则!a || b 的值为1 4 && 0||2 的值为1
运算量:
0表示“假” 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,
5
C Programming Language

相关文档
最新文档