Upload
halima
View
47
Download
4
Embed Size (px)
DESCRIPTION
选择结构程序设计. 关系运算符和关系表达式 逻辑运算符和逻辑表达式 If 语句 Switch 语句 程序举例. 关系运算符和表达式 关系运算符 种类 : < = > != 结合方向:自左向右 优先级别:. 语言程序设计 选择结构程序设计. C. < >= == !=. 优先级 6 (高). 优先级 7 (低). 例 c>a+b //c>(a+b) a>b!=c //(a>b)!=c a==b
Citation preview
选择结构程序设计
关系运算符和关系表达式 逻辑运算符和逻辑表达式 If 语句 Switch 语句 程序举例
关系运算符和表达式• 关系运算符
– 种类: < <= == >= > !=– 结合方向:自左向右– 优先级别:
<<=>>===!=
优先级 6 (高)
优先级 7 (低)例 c>a+b //c>(a+b) a>b!=c //(a>b)!=c a==b<c //a==(b<c) a=b>c //a=(b>c)
关系表达式的值:是逻辑值“真”或“假”,用 1 和 0 表示
例 int a=3,b=2,c=1,d,f; a>b (a>b)==c b+c<a d=a>b f=a>b>c
< >
// 表达式值 1// 表达式值1// 表达式值 0
//d=1
//f=0
语言程序设计
选择结构程序设计
C
关系运算注意:
< >
例 若 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 结果为 ‘A’>100 结果为
1
0
语言程序设计
选择结构程序设计
C
关系运算注意:
例 注意区分“ =” 与“ ==” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);
例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0==1.0 结果为可改写为: fabs(1.0/3.0*3.0-1.0)<1e-6
0
语言程序设计
选择结构程序设计
C
a b !a !b a&&b a||b真
假真
假假假
真
真
逻辑运算符和表达式• 逻辑运算符
– 种类: ! && ||– 逻辑运算真值表
C 语言中 , 运算量 : 0 表示“假”, 非 0 表示“真” , 运算结果 : 0 表示“假”, 1 表示“真” ,
< >
真
假
假
假
假假
真真
假
假真
真真
假
真
真
语言程序设计
选择结构程序设计
C
! (2)
&& (11)
|| (12)
高
低
例 a<=x && x<=b a>b&&x>y a==b||x==y !a||a>b
优先级:
结合方向:
! : 从右向左
&& : 从左向右
|| : 从左向右
< >
// (a<=x) && (x<=b) //(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)
语言程序设计
选择结构程序设计
C
! (2)
&& (11)
|| (12)
高
低
优先级:
结合方向:
! : 从右向左
&& : 从左向右
|| : 从左向右
例 a=4;b=5; !a a&&b a||b !a||b 4&&0||2 5>3&&2||8<4-!0 ‘c’&&‘d’
< >
值为 1值为 0
值为 1 值为1
值为 1
值为 1
//(5>3)&&2||(8<(4-(!0))) 值为1
语言程序设计
选择结构程序设计
C
! (2)
&& (11)
|| (12)
高
低
优先级:
结合方向:
! : 从右向左
&& : 从左向右
|| : 从左向右
短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符
< >
例 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
语言程序设计
选择结构程序设计
C
!
算术运算符 关系运算符&& 和 ||赋值运算符
高
低
P
A B
真 假P
BA
真 假
k
A1 A2 Ai An
k=k2k=k1
k=knk=ki
... ...
二分支选择结构
多分支选择结构
语言程序设计
选择结构程序设计
C
选择型程序设计if 语句(条件选择语句)
• if 语句的三种形式形式一:
» 格式: if (expression)
statement
» 执行过程:
expr
statement
非 0
=0
例: if (x>y) printf(“%d”,x); expr
statement1 statement2
非 0 =0形式二:
格式: if (expression) statement1
else statement2
执行过程:例: if (x>y) max=x; else max=y;
语言程序设计
选择结构程序设计
C
形式三:» 格式:
if ( expr1 ) statement1
else if (expr2 ) statement2
else if (expr3 ) statement3
…...
[ else statementn ]
expr1
statemnt1
非 0
=0
expr2
expr3
statemntnstatemnt3statemnt2
非 0
非 0
=0
=0
执行过程:
例: if (salary>1000) index=0.4; else if (salary>800) index=0.3; else if (salary>600) index=0.2; else if (salary>400) index=0.1; else index=0;
语言程序设计
选择结构程序设计
C
如: if(a==b&&x==y) printf(“a=b,x=y”); if(3) printf(“OK”); if(‘a’) printf(“%d”,’a’);
说明:if 后面的表达式类型任意语句可以是复合语句 if(x) if(x!=0) if(!x) if(x==0)例 考虑下面程序的输出结果 : #include <stdio.h> main() { int x,y; scanf(“%d,%d”,&x,&y); if(x>y) x=y; y=x; else x++; y++; printf(“%d,%d\n”,x,y);}
Compile Error!
语言程序设计
选择结构程序设计
C
/*ch4_1.c*/#include <stdio.h>main(){ int x,y; printf("Enter an integer:"); scanf("%d",&x); y=x; if(y<0) y= -y; printf("\ninteger:%d--->absolute value:%d\n",x,y);}
例 1 求一个数的绝对值
运行: Enter an integer:-12 integer:-12--->absolute value :12
语言程序设计
选择结构程序设计
C
#include <stdio.h>main(){ float a,b,t; scanf(“%f,%f”,&a,&b ); if (a<b) {t=a;a=b;b=a;} printf(“%5.2f,%5.2f”,a,b);}
例 2 输入两个实数,按代数值由小到大的次序输出这两个数。
运行: 3.6,-3.2 -3.20,3.60
语言程序设计
选择结构程序设计
C
#include <stdio.h>main(){ char c; printf("Enter a character:"); c=getchar(); if(c<0x20) printf("The character is a control character\n"); else if(c>='0'&&c<='9') printf("The character is a digit\n"); else if(c>='A'&&c<='Z') printf("The character is a capital letter\n"); else if(c>='a'&&c<='z') printf("The character is a lower letter\n"); else printf("The character is other character\n");}
例 3 判断输入字符种类
运行: Enter a character : The character is a control character
运行: Enter a character : 8 The character is a digit
运行: Enter a character : D The character is a capital letter运行: Enter a character : h The character is a lower letter运行: Enter a character : F1 The character is other character
语言程序设计
选择结构程序设计
C
if 语句嵌套:一般形式:
if (expr1) if (expr2) 语句 1 else 语句 2else if(expr3) 语句 3
else 语句 4
内嵌 if
内嵌 if
语言程序设计
选择结构程序设计
C
缺省 { } 时, else 总是与它上面的最近的未配对的 if配对。
if(……)if(……)
if(……)else…...
else…...
else…...
例: if (a==b) if(b==c) printf(“a==b==c”); else printf(“a!=b”);
修改: if (a==b) { if(b==c) printf(“a==b==c”); } else printf(“a!=b”);
实现 if ~ else 正确配对方法:加 { }
语言程序设计
选择结构程序设计
C
例 考虑下面程序输出结果 : main() { int x=100,a=10,b=20; int v1=5,v2=0; if(a<b) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x); }
结果: -1
语言程序设计
选择结构程序设计
C
语言程序设计
选择结构程序设计
C
例 4 有一函数
编写一个程序,输入 x 输出 y 值。
0,1
0,0
0,1
x
x
x
y
main( ){ int x, y; scanf( “%d”, &x ); if( x < 0 ) y = -1; else if( x == 0 ) y = 0; else y = 1; printf( “x = %d\ty = %d\n”, x. y );}
方法一:
main( ){ int x, y; scanf( “%d”, &x ); if(x>=0) if(x>0) y=1; else y=0; else y=-1; printf( “x = %d\ty = %d\n”, x. y );}
方法二:
运行: 23
X=23,y=1
条件运算符与表达式• 一般形式: expr1 ? expr2 : expr3
• 执行过程• 功能:相当于条件语句,但不能取代一般 if 语句例 if (a>b) printf(“%d”,a); else printf(“%d”,b);
printf(“%d”,a>b?a:b);例 求 a+|b| printf(“a+|b|=%d\n”,b>0?a+b:a-b);
expr1
取 expr2值 取 expr3 值
非 0 =0
例 (a==b)?’Y’:’N’ (x%2==1)?1:0 (x>=0)?x:-x (c>=‘a’ && c<=‘z’)?c-’a’+’A’:c
条件运算符可嵌套 如 x>0?1:(x<0?-1:0)优先级 : 13
结合方向:自右向左 如 a>b?a:c>d?c:d a>b?a:(c>d?c:d)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
语言程序设计
第二章数据描述
C
switch 语句(开关分支语句)一般形式:
switch( 表达式 ){ case E1: 语句组 1; break; case E2: 语句组 2; break; ……. case En: 语句组 n; break; [default: 语句组 ; break;]}
执行过程:
switch
表达式
语句组 1 语句组 2 语句组 n 语句组…...
E 1 E 2 En default
case
语言程序设计
第二章数据描述
C
说明:E1,E2,…En 是常量表达式 ,且值必须互不相同语句标号作用,必须用 break 跳出case 后可包含多个可执行语句,且不必加 { }switch 可嵌套多个 case 可共用一组执行语句如: …… case ‘A’: case ‘B’: case ‘C’: printf(“score>60\n”); break; ……..
例 switch(score) { case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); }
运行结果: score 为 5 时,输出: Very good! Good! Pass! Fail! data error!
语言程序设计
第二章数据描述
C
例 void main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++;b++; break; case 3: a++;b++; } printf(“\na=%d,b=%d”,a,b); }
运行结果: a=2,b=1
语言程序设计
第二章数据描述
C
#include <stdio.h>main(){ int c; printf("Enter m or n or h or other:"); c=getchar(); switch(c) { case 'm': printf("\nGood morning!\n");break; case 'n': printf("\nGood night!\n"); break; case 'h': printf("\nHello!\n"); break; default : printf("\n????????\n"); break; }}
例 根据输入字母输出字符串语言程序设计
第二章数据描述
C
练习题单项选择题
1 、 if 语句的控制条件——a. 只能用关系表达式 b. 只能用关系表达式或逻辑表达式 c. 只能用逻辑表达式 d. 可以用任何表达式2 、以下程序的输出结果是——main(){float x=2,y; if (x<0) y=0; else if(x<5&&!x) y=1/(x+2); else if (x<10) y=1/x; else y=10;printf(“%f\n”,y);}a.0.000000 b.0.250000 c.0.500000 d.10.000000
语言程序设计
第二章数据描述
C
练习题3 、执行以下程序段后, a , b , c 的值分别是—
—int a,b=100,c,x=10,y=9;a=(--x==y++)?--x:++y;if(x<9)b=x++;c=y;a.9,9,9 b.8,8,10 c.9,10,9 d.1,11,10
4 、执行下列程序段后, x 、 y 和 z 的值分别是——int x=10,y=20,z=30;if (x<y) z=x;x=y;y=z;a.10,20,30 b.20,30,30 c.20,30,10 d.20,30,20
语言程序设计
第二章数据描述
C
练习题5 、若 a 和 b 均是整型变量,以下正确的 switch 语句是——。
a.switch(a/b) {case 1:case3.2:y=a+b;break; case 0;case 5:y=a-b; }b.switch(a*a+b*b); {case 3: case1:y=a+b;break; case0:y=b-a;break; }c.switch a{default:x=a+b; case 10:y=a-b;break; case 11:y=a*d;break; }d.switch(a+b){case 10:x=a+b;break; case 11:y=a-b;break; }
语言程序设计
第二章数据描述
C
练习题6 、有一函数
7 、编写程序,输入 3 个实数,判断他们是否能够构成三角形,若能够呈三角形,则输出三角形的类型(等边、等腰或一般三角形)。
)105(1
)50(1
)05(
xx
xx
xx
y
分别用( 1 )简单 if 语句 ( 2 )嵌套的 if 语句 ( 3 ) if_else 语句 ( 4 ) switch 语句
语言程序设计
第二章数据描述
C