C语言基础 四 选择结构程序设计Word下载.docx
《C语言基础 四 选择结构程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《C语言基础 四 选择结构程序设计Word下载.docx(29页珍藏版)》请在冰点文库上搜索。
![C语言基础 四 选择结构程序设计Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/a45df764-f8ba-409e-842e-345238f46c22/a45df764-f8ba-409e-842e-345238f46c221.gif)
当关系运算符的两边的类型不一致时,系统自动会进行类型转换。
1.已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是()[2008年4月第17题]
A.kk>
='
A'
kk<
Z'
B.!
(kk>
‖kk<
)
C.(kk+32)>
a'
(kk+32)<
z'
D.isalpha(kk)&
(kk<
91)
答案A和C都是利用关系运算符来判断是否是大小写,B中如果满足了kk>
就不会判断后面的kk<
(短路),所以不能判断,D利用函数。
逻辑运算符及其优先
级
C语言提供三种逻辑运算符:
(1)&
逻辑与(相当日常生活中:
而且,并且,只在两条件同时成立时为“真”)
(2)||逻辑或(相当日常生活中:
或,两个条件只要有一个成立时即为“真”)
(3)!
逻辑非(条件为真,运算后为假,条件为假,运算后为真)
a
b
a&
a||b
真
假
!
“&
”,“||”是双目运算符,“!
”是单目运算符。
(1)!
(非)-&
(与)-||(或),“!
”为三者中最高。
(2)逻辑运算符中的&
和||低于关系运算符,!
高于算术运算符。
(3)结合性是自左向右。
1.当变量c的值不为2、4、6时,值也为“真”的表达式是()[2008年4月第18题]
A.(c==2)‖(c==4)‖(c==6)B.(c>
=2&
=6)‖(c!
=3)‖(c!
=5)
C.(c>
=6)&
!
(c%2)D.(c>
(c%2!
=1)
逻辑与&
所有的表达式都为真,才为真。
,逻辑或||只要有一个为真值即为真。
逻辑表达式
用逻辑运算符(逻辑与、逻辑或、逻辑非)将关系表达式或逻辑量连接起来构成逻辑表达式。
逻辑表达式的值是一个逻辑值“真”或“假”。
逻辑运算结果,以1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”(即认为一个非0的数值是“真”)。
在数学中关系式
是可以使用的,但是在C语言中不可以用,必须用
。
由&
和||组成的逻辑表达式,在某种情况下可以发生“短路现象”:
(1)
,只有当x为真时,才需要判别y的值,只有x和y都为真时,才要判别z的值;
只要x为假,y和z不必判别,整个表达式的值就为0。
(2)
,只要x的值为真,就不必判别y和z的值,整个表达式的值为1,只有x的值为假,才需要判别y的值,只有x和y的值同时为假,才需要判别z的值。
charc=’‘;
inta=1,b;
(此处c的初值为空格字符),执行b=!
c&
a;
后b的值为。
[2008年4月填空第6题]
空格的ASCII码值为32,!
c为假,故整个表达式的值为0.答案为0。
2.执行以下程序段后,w的值为()[2008年9月第18题]
intw=’A’,x=14,y=15;
w=((x||y)&
(w<
’a’));
A.-1B.NULLC.1D.0
(x||y)的值为真,’A’<
’a’为真,答案为真,答案为C。
3.已定义charch=”$”;
inti=1,j;
执行j=!
ch&
i++以后,i的值为。
1[2007年4月填空第11题]
此题考的是逻辑运算符的短路原理。
由于!
ch已经是假,故第二个表达式没有判别到,故没有执行,i没有自增,故答案为1。
if语句的几种形式
if语句用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
if语句三种形式:
1、if(表达式)语句。
例如:
if(x>
y)printf(“%d”,x);
2、if(表达式)语句1else语句2。
elseprintf(“%d”,y);
3、if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
…
elseif(表达式m)语句m
else语句m+1
(实际是else子句中嵌套if语句)。
(1)三种形式的if语句中的“表达式”一般为关系表达式或逻辑表达式,但不限于这两种表达式。
C语言中需要逻辑值的地方,只有0代表“假”,非0(其它)均代表“真”。
(2)else子句不能单独使用,必须是if语句的一部分,与if配对使用。
(3)在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句构成的语句块(复合语句)。
语句块用{}括起来,语句块后面不要“;
”号。
1.设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是()[2007年4月第20题]
A.if(x++);
B.if(x>
y&
y!
=0);
C.if(x>
y)x--
D.if(y<
0){;
}
elsey++;
elsex++;
在if和else后面可以只含一个语句,但是语句必须有分号作为结束标志。
答案选C。
2.若变量已正确定义,有以下程序段
inta=3,b=5,c=7;
if(a>
b)a=b;
c=a;
if(c!
=a)c=b;
printf("
%d,%d,%d\n"
a,b,c);
其输出结果是()。
[2008年4月第19题]
A.程序段有语法错B.3,5,3C.3,5,5D.3,5,7
在if和else后面可以只含一个内嵌的操作语句,如果有多个操作语句,则必须用用{}括起来构成复合语句。
题目中没有用{},所以只有a=b;
是a>
b真是执行的;
c=a;
a>
b是真还是假都要执行。
3.有以下程序段
inta,b,c;
a=10;
b=50;
c=30;
b)a=b;
b=c;
printf(“a=%db=%dc=%d\n”,a,b,c);
程序输出结果是()[2008年9月第20题]
A.a=10b=50c=10B.a=10b=50c=30
C.a=10b=30c=10D.a=50b=30c=50
同上。
if语句的嵌套
if语句的嵌套:
if语句的if块或else块中,由包含一个if语句。
一般形式:
if(…)
if(…)语句1;
else语句2;
else
if(…)语句3;
else语句4;
应当注意if与else的配对关系。
else总是与它上面的最近的未配对的if配对。
特别是if/else子句数目不一样时(if子句数量只会大于或等于else子句数量)。
可以用下面两种方法解决匹配问题:
(1)利用“空语句”,使if子句数量与else子句数量相同。
(2)利用{}确定配对关系。
将没有else子句的if语句用{}括起来。
1.有以下程序
#include<
stdio.h>
main()
{intx=1,y=2,z=3;
y)
if(y<
z)printf(“%d”,++z);
elseprintf(“%d”,++y);
printf(“%d”,x++);
程序结果是()[2008年9月28题]
A.331B.41C.2D.1
条件运算符构成的选择结构
在if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值时,可以使用简单的条件运算符来处理。
例如:
b)max=a;
elsemax=b;
可以使用条件运算符来处理:
max=a>
b?
a:
b;
(注:
a>
b关系运算有没有()都一样)。
它这样执行,a>
b为“真”吗?
如果为“真”,条件表达式为a,否则为b。
条件表达式的一般形式:
表达式1?
表达式2:
表达式3
(1)条件运算符的执行顺序:
先求解表达式1,若为非0(真)则求解表达式2,表达式2的值就是整个条件表达式的值。
若表达式1的值为0(假),则求解表达式3,此时表达式3的值就是整个条件表达式的值。
(2)条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。
(3)条件运算符的结合性“自右向左”。
(4)表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式,函数表达式。
(5)表达式1,表达式2,表达式3的类型都可以不同。
条件表达式值的类型是表达式2,表达式3中类型较高的类型。
1.有以下计算公式
若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是()。
[2007年9月第20题]
A.if(x>
=0)y=sqrt(x);
B.y=sqrt(x)
elsey=sqrt(-x);
if(x<
0)y=sqrt(-x);
=0)y=sqrt(x);
D.y=sqrt(x>
=0?
x:
-x);
if(x<
0)y=sqrt(-x);
A和C比较简单是正确的,D使用的条件表达式也是正确的,B当x<
0时,先计算再判断是错误的。
switch语句
多分支可以使用嵌套的if语句处理,但如果分支较多,嵌套的if语句层数多,程序冗长,降低可读性。
C语言中switch语句是多分支选择语句。
其一般形式:
switch(表达式)
{
case常量表达式1:
语句1
case常量表达式2:
语句2
………
case常量表达式n:
语句n
[default:
语句n+1]
switch语句case中语句的终止可以使用break.
说明:
(1)switch括号后面的表达式,允许为任何类型。
(2)当“表达式”的值与某个case后面的常量表达式的值相等时,就执行此case后面的语句。
如果表达式的值与所有常量表达式都不匹配,就执行default后面的语句(如果没有default就执行跳出switch,执行switch语句后面的语句)。
(3)各个常量表达式的值必须互不相同,否则出现矛盾。
(4)各个case,default出现的顺序不影响执行结果。
(5)执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。
此时,“case常量表达式”只是起到语句标号的作用,并不在此处进行条件判断。
在执行一个分支后,可以使用break语句使流程跳出switch结构,即终止switch语句的执行(最后一个分支可以不用break语句)。
(6)case后面如果有多条语句,不必用{}括起来。
(7)多个case可以共用一组执行语句。
(注意break使用的位置)
常量表达式一般为整型常量或字符型常量(字符型常量别忘记用单引号括起来);
如果没有break,则执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。
main()
{intk=5,n=0;
do
{switch(k)
{case1:
case3:
n+=1;
break;
default;
n=0;
k--;
case2:
case4:
n+=2;
break;
}
printf(“%d”,n);
}while(k>
0&
n<
5);
程序运行后的输出结果是()[2007年4月第23题]
A.235B.0235C.02356D.2356
第一次循环,k为5,执行default;
n=0,k=4;
后面没有break故继续执行n+=2;
,n=2,k=3,排除B和C;
第二次循环k为3,执行n+=1;
n=3,后面有break,故输出3;
第三次循环k还是为3,n变成4,第三次循环k还是3,n变成5,此时循环条件结束。
答案选A。
2.以下程序的运行结果是。
[2007年4月填空第9题]
{inta=2,b=7,c=5;
switch(a>
0)
{case1:
switch(b<
{case1:
switch(“@”);
case2:
printf(“!
”);
case0:
switch(c==5)
{case0:
printf(“*”);
case1:
printf(“#”);
printf(“$”);
}
default:
printf(“&
printf(“\n”);
0为真,值取1,b<
0值为0,由于case1后没有break,转而执行下面的语句,
c==5为1,首先输出#,case0后面没有break,转而执行default输出&
结果为#&
3.有以下程序
#include<
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
a++;
case1:
b++;
}
case2:
case3:
printf(“a=%d,b=%d\n”,a,b);
程序的运行结果是()[2008年4月第20题]
A.a=1,b=0B.a=2,b=2C.a=1,b=1D.a=2,b=1
如果case语句后面没有break是执行下一个语句,如果有break就跳出switch
语句。
答案为D。
相关习题
一、选择题
1.当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是
A.k%2
B.k%2==1
C.(k%2)!
=0
D.!
k%2==1
2.设有定义:
int
k=1,m=2;
float
f=7;
,则以下选项中错误的表达式是
A.k=k>
=k
B.-k++
C.k%int(f)
D.k>
=f>
=m
3.设有定义:
a=2,b=3,c=4;
,则以下选项中值为0的表达式是
A.(!
a==1)&
(!
b==0)
B.(a<
b)&
!
c||1
C.a&
b
D.a||(b+b)&
(c-a)
4.有以下程序
main()
int
a,b,d=25;
a=d/10%9;
b=a&
(-1);
printf("
%d,%d\n"
a,b);
程序运行后的输出结果是
A.6,1 B.2,1 C.6,0 D.2,0
5.有以下程序
{
i=1,j=2,k=3;
if(i++==1&
(++j==3||k++==3))
%d
%d
%d\n"
i,j,k);
A.1
2
3 B.2
3
4 C.2
3 D.2
3
6.若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<
10的是
A.abs(x-y)<
10
B.x-y>
-10&
x-y<
10
C.@(x-y)<
-10||!
(y-x)>
D.(x-y)*(x-y)<
100
7.有以下程序
inta=3,b=4,c=5,d=2;
if(a>
b)
if(b>
c)
%d"
d+++1);
++d+1);
%d\n"
d);
程序运行后的输出结果是
A.2
B.3
C.43
D.44
8.下列条件语句中,功能与其他语句不同的是
A.if(a)printf("
x);
elseprintf("
y);
B.if(a==0)printf("
C.if(a!
=0)printf("
D.if(a==0)printf("
9.以下4个选项中,不能看作一条语句的是
A.{;
}
B.a=0,b=0,c=0;
C.if(a>
0);
D.if(b==0)m=1;
n=2;
10.以下程序段中与语句k=a>
(b>
c?
1:
0):
0;
功能等价的是
A.if((a>
B)&
C))k=1;
B.if((a>
B)||(b>
C))
k=1
else
k=0;
C.if(a<
=B)
D.if(a>
B)
k=1;
elseif(b<
=C)
elseif(b>
C)
elsek=0;
11.有以下程序
{int
a=1,b=2,m=0,n=0,k;
k=(n=b>
a)||(m=a<
b);
k,m);
A.0,0
B.0,1
C.1,0
D.1,1
12.有定义语句:
a=1,b=2,c=3,x;
则以下选项中各程序段执行后,x的值不为3的是
A.if(c<
a)x=1;
B.if
(a<
3)x=3;
elseif(b<
a)x=2;
elseif(a<
2)x=2;
elsex=3;
elsex=1;
C.if(a<
D.if
b)x=b;
if(a<
if
(b<
c)x=c;
1)x=1;
(c<
a)x=a;
13.有以下程序
i=1,j=1,k=2;
if((j++‖k++)&
i++)printf("
执行后输出结果是
A.1,1,2
B.2,2,1
C.2,2,2
D.2,2,3
14.有以下程序
a=5,b=4,c=3,d=2;
b>
elseif((c-1>
=d)==1)
d+1);
else
d+2)
A.2
B.3
C.4
D.编译时有错,无结果
15.已有定义:
intx=3,y=4,z=5;
,则表达式!
(x+y)+z-1&
y+z/2的值是
A.6
B.0
C.2
D.1
16.有一函数,
以下程序段中不能根据x值正确计算出y值的是
A.if(x>
0)y=1;
B.y=0;
elseif(x==0)y=0;
elsey=-1;
elseif(x<
0)y=-1;
C.y=0;
D.if(x>
=0)
if(x>
0)y=1
;
elsey=0;
elsey=-1;
elsey=-1;
17.有以下程序
ma