第4章选择结构.docx

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

第4章选择结构.docx

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

第4章选择结构.docx

第4章选择结构

第四章选择结构

考核知识点

●if语句的实现选择结构

●用switch语句实现多分支选择结构

●选择结构的嵌套

●goto语句和语句标号的使用

重要考点提示

●选择语句的简单操作

●if语句的嵌套操作

●switch语句的使用

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

关系运算是逻辑运算中较简单的一种。

所谓“关系运算”其实就是“比较运算”,对两个值进行比较,判断其比较后的结果是否符合指定,从而执行不同的程序段。

1.关系运算符及其优先次序

C语言提供了6种关系运算符,见表4-1

表4-1关系运算符

关系运算符

名称

<

小于

<=

小于或等于

>

大于

>=

大于或等于

==

等于

!

=

不等于

小提示:

由两个字符组成的运算符之间不可以加空格,关系运算符都是双目运算符。

(1)结合性:

自左向右。

(2)优先次序:

前4种关系运算符的优先级别相同,后两种优先级相同,且前4种的优先级高于后两种;关系运算符的优先级低于算术运算符,高于赋值运算符。

2.关系表达式

由关系运算符连接而成的表达式(可以是算术表达式、关系表达式或其他表达式)称为关系表达式。

当关系运算符两边值的类型不一致时,若一边是整型,一边是实型,系统将自动把整型数转化为实型数,然后进行比较。

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

1.逻辑运算符及其优先级

C语言提供了3种逻辑运算符,见表4-2

表4-2逻辑运算符

符号

名称

&&

逻辑与

||

逻辑或

软软非

“&&”和“||”是双目运算符,要求要有两个操作数,而“!

”是单目运算符,只要求一个操作数即可,以上逻辑运算符的优先级是:

“!

”级别最高,其次是“&&”,“||”级别最低,逻辑运算符中的“&&”和“||”低于关系运算符,而“!

”高于关系运算符。

2.逻辑表达式

逻辑表达式是由逻辑运算符和运算对象组成,其中,参与逻辑运算的对象可以是一个具体的值,还可以是C语言中任意合法的表达式,逻辑表达式的运算结果为1。

若a=5,则!

a的值为0。

因为a的值为5,被认做是“真”,对它进行“非”运算后,结果为“假”,即结果为0.当A和B的值结合方式不同时,各种逻辑运算所得到的结果是不同的。

见表4-3

表4-3逻辑运算表

A

B

A

B

A&&B

A||B

1

1

0

0

1

1

1

0

0

1

0

1

0

1

1

0

0

1

0

0

1

1

0

0

值得注意的是:

在数学中,关系式0

但在C语言中却不能用0

(1)x&&y&&z,只有当x为真时,才需要判别y的值;只有当x和y都为真时,才需要去判别z的值;只要x为假就不必判别y和z,整个表达式的值为0.。

(2)x||y||z,只要z的值为真,就不必差别y和z的值,整表达式的值为1.。

只有x的值为假时才需要差别y的值,只有x和y的值同时为假才需要判别z的值,因此,如有逻辑表达式(m=x>y)&&(n=c>d),其中x=1,y=2,c=3,d=4若m和n的原值为1,由于“x>y”的值为0,因为m=0,而不执行“n=c>d”,所以n的值不是0而是原值1。

4.3IF语句和用IF语句构成的选择结构

if语句用来对所给定的条件进行判定,判断其表达式的值是否满足某种条件,并根据判定的结果决定执行给出的两种操作中的哪一种。

1.if语句的几种形式

(1)if(表达式)语句

例如:

if(a>b)

printf(“Theanswerisright!

\n”);

其中,if是C语言关系字,a>b是条件判断表达式。

表达式两侧的括号不可少,并且只能是圆括号,不能用其他括号替代。

紧跟着的是一条输出语句,称为if子句。

如果在if子句中需要多个语句,则应该使用大括号({})把一组语句括起来构成复合语句,这样在语法上满足“一条语句”的要求。

(2)if(表达式)语句1

else语句2

例如:

if(a>b)printf(“Theanswerisright.\n”);

elseprintf(“Theansweriswrong.\n”);

(3)if(表达式)语句1

elseif(表达式2)语句2

elseif(表达式m)语句1

else语句n

“语句1”是if子句,“语句2…语句m”是else子句。

这些子句在语法上要求是一条语句,但需要执行多条语句时,则应该使用花括号({})把这些语句括起来组成复合语句。

小提示:

else不能独立成为一条语句,它只是if语句的一部分,不允许单独出现在程序中。

else 必须与if配对,共同组成if…else语句。

2.if语句的嵌套

在if语句中又包含一个或多个if语句结构,称为if语句的嵌套,一般形式如下:

if()

if()语句1

else语句2

else

if()语句3

else语句4

应当注意:

else总是与它上面的最近的没有与else配对的if配对。

3.条件运算符构成的选择结构

有如下语句:

if(x

min=x;/*求两数中较小的一个*/

elsemin=y;

可以用min=(x

x:

y来替换,其中(x

x:

y是一个条件表达式,“?

”就是条件运算符。

该表达式是这样执行的:

如果(x

优先级:

条件运算符高于赋值运算符,但低于逻辑运算符、关系运算符和算术运算符。

4.4switch和goto语句

1.switch语句

switch语句是C语言提供的多分支选择结构语句,用来实现多分支选择结构。

它的一般形式如下:

switch(表达式)

{

case常量表达式1:

语句1

case常量表达式2:

语句2

case常量表达式n:

语句n

default:

语句n+1

}

说明:

(1)switch是关键字,switch后面用花括号括起来的部分是switch语句体。

(2)switch后面括号内的“表达式”,可以是C语言中任意合法表达式,但表达式两侧的括号不能省略。

(3)case也是关键字,与其后面的常量表达式合称case语句标号,常量表达式的类型必须与switch后面的表达式类型相匹配,且各case语句标号的值各不相同,不能重复。

(4)default也是关键字,起标号作用,代表了以上所有case标号之外的那些标号,default标号可以出现在语句体中任何标号位置上,当然,也可以没有。

(5)case语句标号后的语句1、语句2等,可以是一条语句,也可以是若干条,在必要时,case语句标号后的语句可以省略不写。

小提示:

case和常量表达式之间一定要有空格。

2.语句标号

语句标号用标识符表示,它的命名规则与变量名相同,即由字母、数字和下划线组成,在标识符后加一个冒号,就成了一个语句标号。

在C语言中可以在任何语句前加上语句标号。

3.goto语句

goto语句为无条件转向语句,goto语句的一般形式如下:

goto语句标号;

goto语句的作用:

把程序的执行转向语句标号所在的位置,这个语句标号必须与此goto语句同在一个函数内,滥用goto语句将使程序的流程毫无规律,可读性差,因此初学者应慎用。

一、选择题:

1.下列错误的语句是()。

A.if(a>b)printf(“%d”,a);B.if(&&);a=m;

C.if

(1)a=m;elsea=n;D.if(a>0);{eldea=n;}

2.读下列程序:

#include

main()

{

floata,b,t;

scanf(“%f,%f”,&a,&b);

if(a>b)

{

t=a;

a=b;

b=t;

}

printf(“%5.2f,%5.2f”,a,b);

}

运行时从键盘输入3.8和则正确的输出结果是()。

A.-3.40,-3.80B.-3.40,3.80

C.-3.4,3.8D.3.80,-3.40

3.读下列程序:

#include

main()

{

intx,y;

scanf(“%d”,&x);

y=0;

if(x>=0)

{if(x>0)y=1;}

elsey=-1;

printf(“%d”,y);

}

当从键盘输入32时,程序的输出结果为()

()

A.0B.-1C.1D.不确定值

4.对下述程序,()是正确判断。

#include

main()

{

intx,y;

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

if(x>y)

x=y;y=x;

elsex++;y++;

printf(“%d,%d”,x,y);

}

A.有语法错误,不能通过编译B.若输入数据3和4,则输出4和5

C.若输入数据4和3,则输出3和4D.若输入数据4和3,则输出4和4

5.以下程序的输出结果是()。

#include

main()

{

intx=1,y=0,a=0,b=0;

switch(x)

{

case1:

switch(y)

{

case0:

a++p;break;

case1:

b++;break;

}

case2:

a++;b++;break;

case3:

a++,b++;

}

printf(“\na=%d,b=%d”,a,b);

}

A.a=2,b=0B.a=2,b=1C.a=1,b=1D.a=2,b=2

6.这表示关系:

x≥y≥z,应使用的C语言表达式是()。

A.(x>=y)&&(y>=z)B.(x>=y)AND(Y>=Z)

C.(x>=y>=z)D.(x>=y)&(y>=z)

7.以下程序正确的输出结果是()

#include

main()

{

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

if(a

if(b<0)c=0;

elsec+=1;

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

}

A.0B.2C.3D.4

8.以下程序的输出结果是()。

#include

main()

{

intw=4,x=3,y=2,z=1;

printf(“%d\n”,(w

w:

z

z

}

A.1B.2C.3D.4

9.以下程序的运行结果是()。

#include

main()

{

intk=2;

switch(k)

{

case1:

printf(“%d\n”,k++);break;

case2:

printf(“%d”,k++);

case3:

printf(“%d\n”,k++);break;

case4:

printf(“%D\n”,k++);

defaulf:

printf(“Full!

\n”);

}

}

A.13B.23C.22D.32

10.下列程序的运行结果是()

#include

main()

{

inta=2,c=5;

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

}

A.a=%2,b=%5B.a=2,b=5

C.a=d,b=dD.a=%d,b=%d

11.语句printf(”a\bre\’hi\’y\\\bou\n”);的输出结果是()。

A.a\bre\’hi\’y\\bouB.a\bre\’hi\y’\bou

C.re’hi’youD.abre’hi’\bou

12.如下程序的输出结果是()

#include

main()

{

intx=1,a=0,b=0;

switch(x)

{

case0:

b++;

case1:

a++;

case2:

a++;b++;

}

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

}

A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=2

13.如下程序的输出结果是()。

#include

main()

{floatx=2.0,y;

if(x<0.0)y=0.0;

elseif(x<10.0)y=1.0/x;

elsey=1.0.;

printf(“%f\n”,y);

}

A.0.B.0.C.0.D.1.

14.如下程序的输出结果是()

#include

main()

{

inta=12,b=5,c=-3;

if(a>b)

if(b<0)c=0;elsec++;

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

}

A.0B.1C.-2D.-3

15.阅读以下程序:

#include

main()

{

intx;

scanf(“%d”,&x);

if(x--<5)printf(“%d”,x);

elseprintf(“%d”,x++);

}

程序运行后,如果从键盘输入5,则输出结果是()。

A.3B.4C.5D.6

16.以下程序的输出结果是()。

#include

main()

{

inta=15,b=21,m=0;

switch(a%3)

{

case0:

m++;break;

case1:

m++;

switch(b%2)

{

default:

m++;

case0m++;break;

}

}

printf(“%d\n”,m);

}

A.1B.2C.3D.4

17.下面的程序()。

#include

main()

{

intx=3,y=0,z=0;

if(x=y+z)printf(“****”);

elseprintf(“####”);

}

A.有语法错误不能通过编译

B.输出****

C.可以通过编译,但是不能通过连接,因而不能运行

D.输出####

18.两次运行下面的程序,如果从键盘上输入6和4,则输出结果是()。

#include

main()

{

intx;

scanf(“%d”,&x);

if(x++>5)printf(“%d”,x);

elseprintf(“%d\n”,x--);

}

A.7和5B.6和3C.7和4D.6和4

19.以下程序的输出结果的是()。

#include

main()

{

inta=-1,b=4,k;

k=(++a<0)&&!

(b--<=0);

printf(“%d%d%d”,k,a,b);

}

A.104B.103C.003D.004

20.能正确表示a≥10或a≤0的关系表达式是()。

A.a>=10ora<=0B.a>=10|a<=0

C.a>=10&&a<=0D.a>=10||a<=0

21.假定所有变量均已正确说明,下列程序段运行后x的值是()。

a=b=c=0;x=35;

if(!

a)x--;

elseif(b);

if(c)x=3;

elsex=4;

A.34B.4C.35D.3

22.表示关系X≤Y≤Z的C语言表达式()。

A.(X<=Y)&&(Y<=Z)B.(X<=Y)and(Y<+Z)

C.(X<=Y<=Z)D.(X<=Y)&(Y<=Z)

23.如下程序的输出结果是()。

#include

main()

{

inta,b,c=246;

a=c/100%9;

b=(-1)&&(-1)

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

}

A.2,1B.3,2C.4,3D.2,-1

24.当a=1、b=3、c=5、d=5时,执行下面的程序段后,x的值为()。

if(a

if(c

elseif(a

if(b

elsex=3;

elsex=6;

elsex=7;

A.1B.2C.3D.6

25.能正确表示a和b同时为正或同时为负的逻辑表达式是()。

A.(a>=0||b>=0)&&(a<0||b<0)B.(b>=0&&b>=0)&&(a<0&&b<0)

C.(a+b>0)&&(a+b<=0)D.a*b>0

26.以下程序的输出结果是()。

#include

main()

{

inta=-1,b=1,k;

if(++a<0)&&!

(b--<=0)

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

else

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

}

A.-11B.01C.10D.00

27.下列关于switch语句和break语句的结论中,正确的是()。

A.break语句是switch语句中的一部分

B.在switch语句中可以根据需要使用或不使用break语句

C.在switch语句中必须使用break语句

D.break语句只能用于switch语句中

28.设有说明语句“inta=1,b=0;”,则执行了下列语句后,输出为()。

switch(a)

{

case1:

switch(b)

{

case0:

printf(“**0**”);break;

case1:

printf(“**1**”)

}

case2:

printf(“**2**”);break;

}

A.**0**B.**0****2**

C.**0******1****2**D.主语法错误

29.以下关于运算符优先顺序的描述中正确的是()。

A.关系运算符<算术运算符赋值运算符<逻辑运算符

B.逻辑运算符<关系运算符<算术运算符<赋值运算符

C.赋值运算符<逻辑运算符<关系运算符<算术运算符

D.算术运算符<关系运算符<赋值运算符<逻辑运算符

30.为了避免在嵌套的条件语句if...else中产生二义性,C语言规定:

else子句总是与()配对。

A.缩排位置相同的ifB.其之前最近的if

C.其之后的最近的ifD.同一行上的if

二、填空题:

1.若有定义:

inta=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是3。

c=(a-=(b-5));

c=(a%11)+(b=3);

2.表示“整数x的绝对值大于5”时值为“真”的C语言表达式是x>5||x<-5。

3.下列程序的输出结果是16.00,请填空。

#include

main()

{

inta=9,b=2;

floatx=6.6。

y=1.1,z;

z=a/2+b*x/y+1/2;

printf(“%5.2f\n”,z);

}

4.若从键盘输入58,则以下程序输出的结果是。

#include

main()

{

inta;

scanf(“%d”,&a);

if(a>50)printf(“%d”,a);

if(a>40)printf(“%d”,a);

if(a>30)printf(“%d”,a);

}

5.以下程序输出的结果是0。

#include

main()

{

inta=5,b=4,c=3,d;

d=(a>b>c);

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

}

6.以下程序运行后的输出结果是20,0。

main()

{

intx=0,y=20,t=0;

if(x==y)t=x;x=y;y=t;

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

}

7.设a,b,c为整数,且a=2,b=3,c=4,且执行完语句a*=16+(b++)-(++c);后,a的值是28。

8.2020)&&(x<30))||(x<-100)。

9.若inti=10;,则执行下列程序后,变量i的正确结果是13。

switch(i)

{

case9:

i+=1;

case10:

i+=1;

case11:

i+=1;

default:

i+=1;

}

10.以下程序的输出结果是2。

#include

main()

{

intx=2,y=-1,z=2;

if(x

if(y<0)z=0;

elsez+=1;

printf(“%d\n”,z);

}

11.若运行时输入12,则以下程序的运行结果是0。

#include

main()

{

intx,y;

scanf(“%d”,&x);

y=x>12?

x+10:

x-12;

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

}

12.设x,y,z均为int型变量,请写出描述“x或y中至少有一个小于z”的表达式x

13.已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||A

C的值是0。

14.在C语言中,关系运算符的优先级别是<、>、<=、>=、==、!

=。

15.在C语言中,逻辑运算符的优先级别是!

、&&、||。

16.请写出以下程序的输出结果1。

#include

{

inta=100;

if(a>100)

printf(“%d\n”,a>100);

else

printf(“%d\n”,a<=100);

}

17.请写出以下表达式的等价的表达式x<=01。

(x>0)!

0

18.当a=1,b=2,c=3时,以下语句执行后,a、b、c中的值分别为3、2、2。

if(a>c)

b=a;a=c;c=b;

19.若变量已正确定义,以下语句段的输出结果是*#。

x=0;y=2;z=3;

switch(x)

{

case0:

switch(y==2)

{

case1:

print(“*”);break;

case2:

print(“%”);break;

}

case1:

switch(z)

{

case1:

print(“$”);

case2:

print(“*”);break;

defailt:

printf(“#”);

}

}

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

当前位置:首页 > 高中教育 > 理化生

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

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