第4章选择结构Word下载.docx
《第4章选择结构Word下载.docx》由会员分享,可在线阅读,更多相关《第4章选择结构Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
”级别最高,其次是“&
”,“||”级别最低,逻辑运算符中的“&
”和“||”低于关系运算符,而“!
”高于关系运算符。
2.逻辑表达式
逻辑表达式是由逻辑运算符和运算对象组成,其中,参与逻辑运算的对象可以是一个具体的值,还可以是C语言中任意合法的表达式,逻辑表达式的运算结果为1。
若a=5,则!
a的值为0。
因为a的值为5,被认做是“真”,对它进行“非”运算后,结果为“假”,即结果为0.当A和B的值结合方式不同时,各种逻辑运算所得到的结果是不同的。
见表4-3
表4-3逻辑运算表
A
B
A&
A||B
1
值得注意的是:
在数学中,关系式0<
x<
10是可以使用的,表示x的值应在大于0且小于10的范围内。
但在C语言中却不能用0<
10这样一个关系表达式来表示上述逻辑关系,即关系运算符不能连用,但可以借助逻辑运算符来辅助运算,正确的表示方法是0<
x&
10,在C语言中,由&
或||组成的逻辑表达式,在某些特定情况下会产生“短路”现象。
如
(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
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<
y)
min=x;
/*求两数中较小的一个*/
elsemin=y;
可以用min=(x<
y)?
x:
y来替换,其中(x<
y是一个条件表达式,“?
:
”就是条件运算符。
该表达式是这样执行的:
如果(x<
y)条件成立,则整个表达式取值x,否则取值y。
优先级:
条件运算符高于赋值运算符,但低于逻辑运算符、关系运算符和算术运算符。
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<
stdio.h>
main()
floata,b,t;
scanf(“%f,%f”,&
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.读下列程序:
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.对下述程序,()是正确判断。
scanf(“%d,%d”,&
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.以下程序的输出结果是()。
intx=1,y=0,a=0,b=0;
switch(x)
case1:
switch(y)
case0:
a++p;
break;
b++;
case2:
a++;
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>
=z)
7.以下程序正确的输出结果是()
stdilo.h>
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.以下程序的输出结果是()。
intw=4,x=3,y=2,z=1;
printf(“%d\n”,(w<
x?
w:
z<
y?
x));
A.1B.2C.3D.4
9.以下程序的运行结果是()。
intk=2;
switch(k)
printf(“%d\n”,k++);
printf(“%d”,k++);
case4:
printf(“%D\n”,k++);
defaulf:
printf(“Full!
A.13B.23C.22D.32
10.下列程序的运行结果是()
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.如下程序的输出结果是()
intx=1,a=0,b=0;
case0:
case1:
case2:
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.如下程序的输出结果是()。
{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.如下程序的输出结果是()
inta=12,b=5,c=-3;
elsec++;
A.0B.1C.-2D.-3
15.阅读以下程序:
intx;
if(x--<
5)printf(“%d”,x);
elseprintf(“%d”,x++);
程序运行后,如果从键盘输入5,则输出结果是()。
A.3B.4C.5D.6
16.以下程序的输出结果是()。
inta=15,b=21,m=0;
switch(a%3)
m++;
case1:
switch(b%2)
case0m++;
printf(“%d\n”,m);
17.下面的程序()。
intx=3,y=0,z=0;
if(x=y+z)printf(“****”);
elseprintf(“####”);
A.有语法错误不能通过编译
B.输出****
C.可以通过编译,但是不能通过连接,因而不能运行
D.输出####
18.两次运行下面的程序,如果从键盘上输入6和4,则输出结果是()。
intx;
if(x++>
elseprintf(“%d\n”,x--);
A.7和5B.6和3C.7和4D.6和4
19.以下程序的输出结果的是()。
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<
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<
23.如下程序的输出结果是()。
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(c<
d)x=1;
elseif(a<
c)
if(b<
d)x=2;
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&
b<
0)
C.(a+b>
(a+b<
=0)D.a*b>
26.以下程序的输出结果是()。
inta=-1,b=1,k;
if(++a<
printf(“%d%d\n”,a,b);
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)
switch(b)
printf(“**0**”);
printf(“**1**”)
printf(“**2**”);
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,请填空。
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,则以下程序输出的结果是。
inta;
a);
if(a>
50)printf(“%d”,a);
if(a>
40)printf(“%d”,a);
if(a>
30)printf(“%d”,a);
5.以下程序输出的结果是0。
inta=5,b=4,c=3,d;
d=(a>
c);
printf(“%d\n”,d);
6.以下程序运行后的输出结果是20,0。
intx=0,y=20,t=0;
if(x==y)t=x;
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.20<
30或x<
-100的C语言表达式是((x>
20)&
(x<
30))||(x<
-100)。
9.若inti=10;
,则执行下列程序后,变量i的正确结果是13。
switch(i)
case9:
i+=1;
case10:
case11:
i+=1;
10.以下程序的输出结果是2。
intx=2,y=-1,z=2;
if(y<
0)z=0;
elsez+=1;
printf(“%d\n”,z);
11.若运行时输入12,则以下程序的运行结果是0。
y=x>
12?
x+10:
x-12;
printf(“%d\n”,y);
12.设x,y,z均为int型变量,请写出描述“x或y中至少有一个小于z”的表达式x<
z||y<
z。
13.已知A=7.5,B=2,C=3.6,表达式A>
B&
C>
A||A<
C的值是0。
14.在C语言中,关系运算符的优先级别是<
、>
、<
=、>
=、==、!
=。
15.在C语言中,逻辑运算符的优先级别是!
、&
、||。
16.请写出以下程序的输出结果1。
inta=100;
100)
printf(“%d\n”,a>
100);
printf(“%d\n”,a<
=100);
17.请写出以下表达式的等价的表达式x<
=01。
(x>
0)!
18.当a=1,b=2,c=3时,以下语句执行后,a、b、c中的值分别为3、2、2。
b=a;
a=c;
c=b;
19.若变量已正确定义,以下语句段的输出结果是*#。
x=0;
y=2;
z=3;
switch(y==2)
{
print(“*”);
print(“%”);
switch(z)
print(“$”);
defailt:
printf(“#”);