28
选选选选选选选选 关关关关关关关关关关关 关关关关关关关关关关关 If 关关 Switch 关关 关关关关

选择结构程序设计

  • 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

Page 1: 选择结构程序设计

选择结构程序设计

关系运算符和关系表达式 逻辑运算符和逻辑表达式 If 语句 Switch 语句 程序举例

Page 2: 选择结构程序设计

关系运算符和表达式• 关系运算符

– 种类: < <= == >= > !=– 结合方向:自左向右– 优先级别:

<<=>>===!=

优先级 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

Page 3: 选择结构程序设计

关系运算注意:

< >

例 若 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

Page 4: 选择结构程序设计

关系运算注意:

例 注意区分“ =” 与“ ==” 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

Page 5: 选择结构程序设计

a b !a !b a&&b a||b真

假真

假假假

逻辑运算符和表达式• 逻辑运算符

– 种类: ! && ||– 逻辑运算真值表

C 语言中 , 运算量 : 0 表示“假”, 非 0 表示“真” , 运算结果 : 0 表示“假”, 1 表示“真” ,

< >

假假

真真

假真

真真

语言程序设计

选择结构程序设计

C

Page 6: 选择结构程序设计

! (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

Page 7: 选择结构程序设计

! (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

Page 8: 选择结构程序设计

! (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

!

算术运算符 关系运算符&& 和 ||赋值运算符

Page 9: 选择结构程序设计

P

A B

真 假P

BA

真 假

k

A1 A2 Ai An

k=k2k=k1

k=knk=ki

... ...

二分支选择结构

多分支选择结构

语言程序设计

选择结构程序设计

C

Page 10: 选择结构程序设计

选择型程序设计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

Page 11: 选择结构程序设计

形式三:» 格式:

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

Page 12: 选择结构程序设计

如: 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

Page 13: 选择结构程序设计

/*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

Page 14: 选择结构程序设计

#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

Page 15: 选择结构程序设计

#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

Page 16: 选择结构程序设计

if 语句嵌套:一般形式:

if (expr1) if (expr2) 语句 1 else 语句 2else if(expr3) 语句 3

else 语句 4

内嵌 if

内嵌 if

语言程序设计

选择结构程序设计

C

缺省 { } 时, else 总是与它上面的最近的未配对的 if配对。

if(……)if(……)

if(……)else…...

else…...

else…...

Page 17: 选择结构程序设计

例: 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

Page 18: 选择结构程序设计

例 考虑下面程序输出结果 : 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

Page 19: 选择结构程序设计

语言程序设计

选择结构程序设计

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

Page 20: 选择结构程序设计

条件运算符与表达式• 一般形式: 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

Page 21: 选择结构程序设计

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

Page 22: 选择结构程序设计

说明: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

Page 23: 选择结构程序设计

例 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

Page 24: 选择结构程序设计

#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

Page 25: 选择结构程序设计

练习题单项选择题

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

Page 26: 选择结构程序设计

练习题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

Page 27: 选择结构程序设计

练习题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

Page 28: 选择结构程序设计

练习题6 、有一函数

7 、编写程序,输入 3 个实数,判断他们是否能够构成三角形,若能够呈三角形,则输出三角形的类型(等边、等腰或一般三角形)。

)105(1

)50(1

)05(

xx

xx

xx

y

分别用( 1 )简单 if 语句 ( 2 )嵌套的 if 语句 ( 3 ) if_else 语句 ( 4 ) switch 语句

语言程序设计

第二章数据描述

C