语言-课件2第四章选择结构_第1页
语言-课件2第四章选择结构_第2页
语言-课件2第四章选择结构_第3页
语言-课件2第四章选择结构_第4页
语言-课件2第四章选择结构_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第四章选择结构正确使用逻辑表达式掌握用if语句实现选择结构掌握条件运算符的使用4.1关系运算符和关系表达式例如:

x

!=

y、

s-

d<=f①a>b+c

、b<d==c①1.关系运算符(6种)高级:>、>=、<、<=低级:==、!=关系运算的优先级高于赋值运算符,低于算术运算符结合性:从左向右a>b>c2、关系表达式关系符与运算分量构成关系表达式关系表达式的结果是一个逻辑值,根据关系是否满足,分别取真或假。e1关系运算符e2C语言中没有的逻辑值,用数值1和0标识逻辑真和假。1----真

0----假int

i=1,j=7,a;a=i+(j%4!=0);a的值?算术式结果:a=2在C语言中,将非0就视为“真”。100>=13.5<3a+b>c5*18==90(int)2.5!=2.5例:算逻4.2逻辑运达式运算符:&

&

(与):

两边为1,结果为1||

(或):两边有一个为1,结果为1!

(非):非1为0,非0为1优先级:!最高,&&次之,||最低结合性:与和或是左结合,非右结合设int

a=1,b=1,x=2,y=0;(a>b)&&(x>y);a>b&&x>y;(y||b)&&(y||a);y||b&&y||a;1、逻辑运两式是等价的,因为关系运算符高于&&用逻辑运表达式或两式结果一样,但含义不同构成逻辑表达式①②

③2、逻辑表达式任何非零实数均作为逻辑上的1例:a=5,b=7,c=4,d=3x=(a+b)>(c+d)&&(d>a)先做算术运算,再做关系判断,将最后结果赋给x逻辑符与运算分量构成逻辑表达式逻辑表达式的值是1或0,表示真或假e1逻辑运算符e2x的值?05>2>7>8从左向右运算(5>2)逻辑值为1(1>7)逻辑值为0(0>8)逻辑值为0整个表达式的值为0在逻辑表达式中,并不是所有的逻辑运算都必须执行。如果&&的一边已经为0,结果一定为0如果||

的一边已经为1

,结果一定为1a&&b&&c

a非0时再判断

b, a、b均非0再判断ca||b||c

若a为非0,不必判断b和c,结果一定为

1例:已知:a=1,b=2,c=3,d=4,m=1,n=1执行(m=a>b)&&(n=c>d)之后m=?n=?由于a>b的值为0,&&的结果一定为0,即m=0(n=c>d)不再运算,n维持原有的值,即n=1m=0n=11!(2<=5)||5

1(

1>3)

||

!

(2<5)

0(4<=6)&&!

(3>=7)1求表达式的值:1<4

&&

4<7例:能够被4整除同时不能被100整除能够被400整除或如何表示闰年判断闰年的逻辑表达式为:(year

%4=

=0

&&

year

%100!=0)||year

%400=

=0判断非闰年的逻辑表达式为:!((year

%

4==0

&&

year

%

100!=0)||

year

%

400=

=0)9)4.3.1

if语句一般形式if(表达式语句1else语句2例:if(x>y)printf("

%d

",

x);elseprintf("%d",y);{x=y;printf("%d%d",

x,y);else

printf("%d",y);表达式的类型可以是任意的数值类型(整型、实型、字符型、指针型)如:if(3)printf("

ok

");if('a')printf("

a=%d

",a);4.3选择语句必须有分号不能有分号当P条件为真时,执行A操作,否则执行B操作选择结构APB真10假if

语句的其他形式:1. if(表达式)语句例1:

if(例2:阅读以下程序。main(){int

a=2,b=1,c=3,t;if(a>b

){t=a;a=b;b=t;}if(a>c

){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d,%d,%d\n",a,b,c);}运行结果:111,2,3按数值从小到大排队2.

if(表达式1)语句1else

if(表达式2)语句2else

if(表达式3)语句3…else

if(表达式m)语句melse语句m+1注意:else与if之间要留一个空格12例2:给定x,

求y。13Y=X+0.3X<100100X<200200X<300X300X+0.4X+0.5X+0.6X+0.3X+0.4X+0.5X+0.6X<100100X<200200X<300X300y=main(){float

x,y;scanf(%f

,&x);if

(x<100)

y=x+0.3;14else

if

(x<200)

y=x+0.4;

else

if

(x<300)

y=x+0.5;else

y=x+0.6;printf(x=%f,y=%f,x,y);}或

if(

)if()语句1else

语句2}内嵌if}内嵌if或

if(

){if()语句1}elseif()语句2else

语句3if(

)if()语句1else

语句2elseif()语句3else

语句4}内嵌if4.3.2 if语句的嵌套(在if中嵌套或在else中嵌套)一般形式如下:或

if(

)语句1elseif()语句215else语句3}内嵌if}内嵌if例4.阅读程序,运行结果(

C=0

)main(

){int

a=-2,b=-1,c=2;if(a<b)if(b<0)

c=0;else

c+=1;printf("

c=%d\n",c);}内嵌语句1617例5.阅读程序,main(

){

int

a,b,c,d,x;a=b=c=0;d=1;if(a)

d=d-10;else

if(!b)运行结果(

d=1

x=6)if(!c)x=6;else

x=7;printf("d=%d

x=%d\n",d,x);}内嵌语句练

:下列程序,正确的是(C

)%main(){intx,y;scanf("%d,if(x>y)x=y,y=x;elsex++;y++;printf("%d,%d",x,y);}有语法错误,不能通过编译输入4和3,则输出3和3输入4和3,则输出3和4输入4和3,则输出3和5注意:y++不是else的子句,因此,y++是必须执行的。18练习2:下列程序,输出结果是(B)main(){int

x=100,a=10,b=20;intv1=5,v2=0;if(a<b)if

(b!=15)if(!v1)x=1;else

if(!v2)x=10;x=-1;printf(“%d”,x)}100-1110等价于:if(a<b&&b!=15)if(!v1)x=1;else

if(!v2)x=10;19X=-1是必执行语句main(){int

x;scanf("%d",&x);if(x++<=5)

printf("x=%d\n"else

printf("%d\n",x--);printf("%d",x);}练习3:下列程序,输出结果是:如:输入3<回车>先用x(即x<=5),再执行x++,再执行printf结果为:x=44如:输入6<回车>结果为:76214.3条件运算符及其运算C语言增设了一个条件操作符,它是唯一的三目操作符。格式:

表达式1

?表达式2:表达式3

,功能:判断表达式1的值,该值为“非0”2的值,为“0”时,取表达式3的值。例如:程序段:if(a>b)max=a;

else

max=b;与:

max=a>b

?

a

:

b等价

a=3,

b=2,

max=a说明:条件运算符优先于赋值运算符。条件运算符的结合方向为“自右向左”。如:

a>b

?

a

:

c>d

?

c

:

d

相当于a>b

?

a

:

(c>d

?

c

:

d

)当a=1,b=2,c=3,d=4

时, 表达式的值取d的值4条件表达式22(4)条件表达式中的表达式1的类型可以与表达式2和表达式3的类型不同,条件表达式值的类型为二者中较高的类型。如:x>y?1.2:6,当x>y成立时条件表达式的值为1.2

,否则为实型数据6.0。如:c=x>y?1:'s',当x>y成立时c=1,

否则c='s'。例:

main(

){char

ch;scanf("%c",

&ch);ch=(ch>=

'A

'

&&

ch<=

'

Z

'

)?

(ch+32)

:

ch;printf("%c",

ch)}如:if(a>b)

printf(%d

,a);else printf(

%d

,b);}(3)可以用条件表达式取代一般的if结构f(

,

)本程序的功能是输入一个英文字符,判断它是否大写,如果是,将它转换成小写,否则不转换。输入:A<回车>a一般可以用一对if-else来描述的语句,可以用print

条件表达式来替换。条件表达式“常量表达234.4

switch语句格式:switch(表达式){

[变量定义]case

常量表达式1:[语句块1]case

常量表达式2:[语句块2]······case

常量表达式n:[语句块n][default

:语句块n+1]}功能:从多条可供选择的执行流程中选择一条说明:(1)

表达式可以是整型、字符型、枚举数据型的表达式。(2)“常量表达式1”、“常量表达式2”······式n”的值必须互不相同。该语句为开关语句,解注意:这里

况。一定要留有一个空格!24case后的语句序列可以是一条语句,也可以是多条语句,若是多条语句不必用括号括起来。case后的“常量表达式”只起到语句标号的作用,而不进行条件判断,故在执行完某个

case后的语句序列后,将自动转移到下一个case继续执行。其计算步骤是:1.

计算表达式的值;2.

找到与表达式的值相同的case常量表达式,执行该case后边的语句块,之后依次往下执行语句块。表达式语句块1语句块2语句块n语句块n+1·25···例如:根据考试成绩的等级打印出百分制分数段:有以下程序段:switch(

grade

){case 'B'

:printf("70~84\n");case 'D'

:printf("<60\n");default

:

printf("error");}若grade的值等于'A',则输出结果:26case 'A'

:

printf("85~100\n

")

85~10070~84case 'C':

printf("60~69\n");

60~69<60error若在执行一个case分支后,使流程跳出switch结构,终止switch语句的执行,这时要用break语句.switch(

grade

){case

A:

printf("85~100\n")

;break;case

B

:

printf("70~84\n");break;输出结果:70~84当grade的值为B

时case

C

:

printf("60~69\n");break;case

D

:printf("<60\n");break;default

:printf("error");}流程图为:grade输出“85-100”输出“<60”输出“60-69”输出“error”输出“70-84”28交换 (

case

不需要按次(5)

case和default的次排列,default

可以排在任main(

){int

c=3;switch(c){case

1:

c++;default:

c++;case

2:

c++;case3:

c++;}printf("c=%d\n",

c);}以:若程序改动如下:c为多序少?main(

){int

c=3;switch(c){case

1:

c++;case

3:

c++;default:

c++;case

2:

c++;}}此处加上break;后c为多少?printf("c=%d\n",

c);c=6c=4c=42930(6)多个case可以执行同一个语句序列。switch(c=getchar(

)){case 'y'

:case

'Y':

printf("You

are

right.\n");}例7:

写程序,其中:用leap代表判闰main(

)scanf("%d",

&year);leap=0;if((year%4=

=0

&&

year%100!=0)||(year%400=

=0))leap=1;if(leap=

=1) printf(“%d

is

a

leap

year\n”,

year);else printf("%d

is

nota

leap

year\n

",

year);}输入:

1989结果为:1989

is

not

a

leap

year31{int

year,leap;结果为:输入:

20002000

is

a

leap

year例8

:判断某年某月有几天分析:2月:闰月29天,非闰月28天;、

天;4、6、9、11月30天。main(

){

int

year,month,days;scanf("%d%d",&year,&month);swit

onth){

case

1:case

3:case

5:case

7:case

8:case

10:case

12:days=31;printf("%d",days);break;case

4:case

6:case

9:case

11:days

=30;2:(year%4=

=0&&year%100!=0)||(year%400=

=0))days=29;

else days

=28;printf("%d",days);break;default

:printf(“month

is

not

divided");}}多个case可共intf("%d",days);

break;用一组执行语句3233练习4:下列程序的输出结果是(

B)main(){

int

x=1,y=0,a=0,b=0;switch(x){

c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论