04第四章 选择结构.docx

上传人:b****6 文档编号:7568384 上传时间:2023-01-25 格式:DOCX 页数:12 大小:18.70KB
下载 相关 举报
04第四章 选择结构.docx_第1页
第1页 / 共12页
04第四章 选择结构.docx_第2页
第2页 / 共12页
04第四章 选择结构.docx_第3页
第3页 / 共12页
04第四章 选择结构.docx_第4页
第4页 / 共12页
04第四章 选择结构.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

04第四章 选择结构.docx

《04第四章 选择结构.docx》由会员分享,可在线阅读,更多相关《04第四章 选择结构.docx(12页珍藏版)》请在冰豆网上搜索。

04第四章 选择结构.docx

04第四章选择结构

第四章选择结构

引言:

分支结构,根据逻辑判断的结果决定程序的不同流程。

(根据不同的条件执行不同的分支)

1.关系运算和逻辑运算

C语言中的逻辑值:

真:

非0表示真1-11.5‘a’1

假:

00

(1)关系运算符和关系表达式

比较运算,进行两个数的比较,判断比较的结果是否符合条件

①>>=<<===!

=

注:

双目运算;

同一级里边自左向右;

②表达式的结果值为1或0,若为真用1表示,若为假用0.

inta=10,b=12,c=8;

a>=b0

(a=3)>(b=4)0

a>c==c0

(a++)

‘a’==971

注:

关系运算符两边值类型不一致时,系统自动进行类型转换;

‘a’==97

若x,y定义为double.避免使用x==y来判断两个数是否相等。

因为存放在内存中的浮点数是有误差的,x==y结果总为0.可用:

fabs(x-y)<1e-6

doublex,y;

x==y1相等

1不等

x=1;1.00000001

y=1;1.00000002

x==y0

x=1;

x=2;

x==y0

x,y

x-y>0x>y

x-y<0x

x-y=0x=y

fabs(x-y)<1e-6math.h

(2)逻辑运算符和逻辑表达式

①&&||!

注:

&&和||是双目运算符,!

是单目运算(!

a)

优先级!

&&||

&&:

两个都为真则结果为真-1&&0

||:

有一个为真则结果为真0||’0’

真变假,假变真!

0!

-2

②&&:

两边都为真时,结果为真。

有一个为假则结果为假。

(左为假短路右边)。

inta=1,b=0;a++&&b++b==?

1

inta=0,b=0;a++&&b++b==?

0

||:

有一个真,则结果为真。

(左为真短路右边)。

inta=1,b=0;a++||b++b==?

0

inta=0,b=0;a++||b++b==?

1

短路:

出现在特定情况下,此时不可以用一般的思维方式按优先级考虑。

&&:

左为假短路右边。

左为真必须看右边

||:

左为真短路右边。

左为假必须看右边。

#include

main()

{inta=0,b=5,c;

c=a>b||++b;

printf(“%d%d\n”,c,b);

}

③数学式:

0

C语言:

0

1<101

0<101

0<-5<101

0<5<101

0<15<101

x>0&&x<10

x>=’a’&&x<=’z’1

x>=’A’&&x<=’Z’

x>=’0’&&x<=’9’1

(3)优先级

单目:

(+-++--!

)右—左

算术:

(*/%)(+-)

关系:

(>>=<<=)(==!

=)

逻辑:

(&&)(||)

条件:

?

:

赋值:

=

逗号:

 

1.if语句和用if语句构成的选择结构

(1)if语句

1不含else子句的if语句

形式:

if(表达式)if子句;

if是关键字

表达式可以是:

关系表达式,逻辑表达式,算术表达式等(C语言中任意合法的表达式);也可以是任意类型的数据

1>21&&21+211.0‘1’0

语法上只能是一条语句,若该if子句包含多条语句,则必须用复合语句

{t=a;a=b;b=t;}

代码:

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

printf(“ok”);

执行过程:

if(表达式)if子句;

其它语句;

举例:

输入两个数,分别放入x和y中,若两个数不相等,则输出其中的大数;若两数相等,则输出字符串x==y和y的值。

#include

main()

{intx,y;

scanf(“%d%d”,&x,&y);

if(x>y)printf(“%d\n”,x);

if(x

if(x==y)printf(“x==y%d\n”,y);

}

输入三个数,分别放在变量a,b,c中,然后把输入的数据重新按由小到大的顺序放在变量a,b,c中,最后输出a,b,c中的值。

#include

main()

{inta,b,c,t;

scanf(“%d%d%d”,&a,&b,&c);

312

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

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

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

printf(“%d%d%d\n”,a,b,c);

}

2含else子句的if语句

语句形式:

if(表达式)if子句;

elseelse子句;

注:

if子句与else子句语法上只能是一条语句,若有多条则应用复合语句。

else是if语句的一部分,是一个整体。

else不可以单独出现。

if---else

代码:

if(a>b){printf(“%d”,a);a++;}

else{prinf(“%d”,b);b++;}

printf(“ok”);

执行过程:

举例:

编写程序,输入一个数,打印它是偶数(even)还是奇数(odd)。

3关于if语句的一些说明

表达式:

C语言中任意一个合法的表达式或任意类型的数据,但括号里不可为空

分号

(2)嵌套的if语句

if子句和else子句可以是任意合法的C语句,故当然可以是if语句。

所以if语句可以内嵌在if子句中也可以内嵌在else子句中。

在if子句中嵌套if—else语句

if(表达式)if(表达式)if子句;

elseelse子句;

elseelse子句;

inta=3,b=2,c=1;

if(a

if(a>c)printf(“*”);

elseprintf(“&”);

elseprintf(“%”);

printf(“end”);

在if子句中嵌套不含else子句的if语句

if(表达式)

{if(表达式)if子句;}

elseelse子句;

注:

括号不可省,因为c语言中规定else总是与前边最近的且不带else的if结合,与它的书写格式无关。

inta=3,b=2,c=1;

if(a

{if(a>c)printf(“*”);}

elseprintf(“&”);

printf(“end”);

在else子句嵌套if—else

if(表达式)外层if子句;

else

if(表达式)里层if子句;

else里层else子句;

inta=3,b=2,c=1;

if(a

else

if(a

elseprintf(“%”);

printf(“end”);

在else子句中嵌套不含else的if语句

if(表达式)外层的if子句

else

if(表达式)if子句;

inta=3,b=2,c=1;

if(a

else

if(a

printf(“end”);

 

注:

写程序时若要含嵌套最好写在else子句中,此时一般不会引起if—else配对的混乱

多层嵌套形式:

if(表达式)if子句;

elseif()…..

elseif()…

elseif()…..

else…

其它语句;

if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3

elseif(表达式4)语句4

else语句5

其它语句;

多层嵌套执行过程:

从上向下逐一对if语句后的表达式进行检测,当某一个表达式值为真时,执行与此表达式有关的语句,其它的语句全部跳过。

若所有表达式值都为假,执行最后的else子句,若最后没else子句,则结束了本次嵌套的if语句。

多层嵌套程序举例:

根据输入的学生成绩给出相应的等级,90分以上(包括90)输出“A”,60分以下输出”E”,中间成绩10分为一个等级。

0----100

>=90A

<60E

60—8980---89B

70---79C

60---69D

#include

main()

{intscore;

scanf(“%d”,&score);

if(score>=90)printf(“%dA”,score);

elseif(score>=80)

printf(“%dB”,score);

elseif(score>=70)

printf(“%dC”,score);

elseif(score>=60)

printf(“%dD”,score);

else

printf(“%dE”,score);

}

2.条件表达式构成的选择结构

根据不同的条件使用不同的运算对象参与运算。

条件运算符:

唯一三目运算符

格式:

表达式1?

表达式2:

表达式3

优先级:

倒数第三

结合方向:

自右向左

执行:

表达式1真表达式2

假表达式3

inta=5,b=4,c=2,d=2,e=1;

a

a:

b4

if(a

elseprintf(“%d”,b);

a

c:

d

d:

e1

a

c:

1

3.switch语句(switch---case构成选择分支)

语句形式:

switch(表达式)

{

case常量表达式4:

语句4;a++;

case常量表达式2:

case常量表达式3:

语句3;

case常量表达式1:

语句1;

default:

语句;

}

注:

(1)switch后圆括号中表达式:

表达式可以是整型表达式或字符型表达式。

表达式的值为整数。

inta=1,b=2;

1+21>2a&&b!

aa‘a’

1.0+2非法

(2)常量表达式:

可以是一个整数,一个整数常量表达式或一个字符型常量。

其类型必须与switch后圆括号中表达式值的类型保持一致。

inta=1,b=2;

11+2‘a’‘\0’合法

aba+b非法

(3)case语句标号:

各case语句标号值不可重复。

各case语句和default语句的书写顺序无先后限制。

有时switch语句体中也可以没有default语句。

(4)case语句标号后的语句:

可以是零条一条或多条。

(5)case与常量表达式间要有空格case0:

case10:

(6)内嵌

语句举例:

inta=1,b=2,c=3;

switch(a)

{case1:

switch(a&&b)

{case0:

printf(“A”);

case1:

printf(“B”);break;

}

break;

case2:

printf(“#”);

case3:

case4:

switch(c)

{case0:

printf(“a”);

case1:

printf(“b”);

default:

printf(“c”);

}

}

执行过程:

(1)计算switch后表达式的值

(2)在switch语句体中与该值相同的case标号,若有相同的case标号则从该标号开始执行各语句直到switch结束;若无相同的case标号再看有无default标号,若有则从default标号开始直到switch结束,若无default标号则跳过switch语句体到其后的语句。

程序举例:

根据输入的学生成绩给出相应的等级,90分以上为A,其它成绩10分为一个等级,60分以下为E.(成绩为整型数)

0----100

>=90A910

<60Edefault

60-------89

80---89B8

70---79C7

60---69D6

#include

main()

{intx;

scanf("%d",&x);

switch(x/10)

{case10:

case9:

printf("%dA\n",x);break;

case8:

printf("%dB\n",x);break;

case7:

printf("%dC\n",x);break;

case6:

printf("%dD\n",x);break;

default:

printf("%dE\n",x);

}

}

switch语句中使用break语句:

间断语句,break可出现在switch中的任何位置,当执行break语句时,立即跳出了它所在的switch语句体

 

4.语句标号和goto语句

概念:

标号为任意合法的标识符

形式:

标识符:

flag1:

12:

作用:

标号用作goto语句的转向目标

概念:

goto语句叫无条件转向

形式:

goto语句标号;

作用:

把程序的执行语句转向标号所在的位置,一般情况下,goto语句和语句标号在同一个函数内

……

stop:

printf(“end\n”);

….

….

gotostop;

………..

……….

………

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1