第四章 选择语句.docx
《第四章 选择语句.docx》由会员分享,可在线阅读,更多相关《第四章 选择语句.docx(21页珍藏版)》请在冰豆网上搜索。
第四章选择语句
27.若有以下程序
#include
main()
{inta=1,b=2,c=3,d=4,r=0;
if(a!
=1);elser=1;
if(b==2)r+=2;
else;if(c!
=3)r+=3;
else;if(d==4)r+=4;
printf("%d\n",r);
}
则程序的输出结果是
A)10
B)7
C)6
D)3
参考答案:
B
【解析】else总是和与之最近的上面的if配对,执行第一个if,判断条件不成立,执行elser=1;语句。再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立执行第7行else后面的空语句";"。再执行第四个if的判断条件d==4成立,执行r+=4,r的值为7。然后打印输出。
28.若有以下程序
#include
main()
{inta=1,b=2,c=3,d=4,r=0;
if(a!
=1);elser=1;
if(b==2)r+=2;
if(c!
=3);r+=3;
if(d==4)r+=4;
printf("%d\n",r);
}
则程序的输出结果是
A)3
B)7
C)6
D)10
参考答案:
D
【解析】第一个if语句a!
=1条件为假,所以执行else后的语句r=1。第二个if语句b==2条件成立,执行r+=2,r的值变为3,第三个if语句c!
=3条件为假,所以不做任何操作。执行下面的r+=3操作,r的值变为6。判断第四个if条件,d==4条件成立,执行r+=4操作,结果为10。
29.有以下程序:
#include
main()
{ inta=0,b=0,c=0,d=0;
if(a=1)b=1;c=2;
elsed=3;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
程序输出( )。
A)1,1,2,0
B)0,0,0,3
C)编译有错
D)0,1,2,0
参考答案:
C
【解析】本题中if(a=1)b=1;与elsed=3;之间多了语句c=2;所以会出现else语句的位置错误的编译失败提示。
30.有以下程序段:
#include
inta,b,c;
a=10;b=50;c=30;
if(a>b)a=b,b=c;c=a;
printf("a=%db=%dc=%d\n",a,b,c);
程序的输出结果是( )。
A)a=10b=50c=30
B)a=10b=50c=10
C)a=10b=30c=10
D)a=50b=30c=50
参考答案:
B
【解析】本题中a>b的条件不满足,所以不执行逗号表达式a=b,b=c;的操作,而是执行c=a操作,即c的值为10。
32.有以下程序
#include
main()
{intx;
scanf("%d",&x);
if(x<=3);else
if(x!
=10)printf("%d\n",x);
}
程序运行时,输入的值在哪个范围才会有输出结果
A)小于3的整数
B)不等于10的整数
C)大于3或等于10的整数
D)大于3且不等10的整数
参考答案:
D
【解析】根据代码可知如果x的值小于3,执行空语句,不进行打印操作。如果x的值大于3,再判断x的值是否不等于10,如果不等于10就打印x的值,所以选择D选项。
程序分析结果
33.若有定义语句:
char*s1="OK",*s2="ok";
以下选项中,能够输出"OK"的语句是
A)if(strcmp(s1,s2)!
=0)puts(s2);
B)if(strcmp(s1,s2)!
=0)puts(s1);
C)if(strcmp(s1,s2)==1)puts(s1);
D)if(strcmp(s1,s2)==0)puts(s1);
参考答案:
B
【解析】strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同的字符的大小作为比较结果。
因为'OK'<'ok',所以strcmp(s1,s2)为负值,只有B选项正确。
34.有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母
#include
#include
voidfun(char*p)
{
inti=0;
while(p[i])
{
if(p[i]==''&&islower(p[i-1]))
p[i-1]=p[i-1]-'a'+'A';
i++;
}
}
main()
{
chars1[100]="abcdEFG!
";
fun(s1);
printf("%s\n",s1);
}
程序运行后的输出结果是
A)abcdEFg!
B)AbCdEFg!
C)abcdEFG!
D)aBcDEFG!
参考答案:
D
【解析】调用fun函数后,实参数组名s1传给形参指针p,p也指向数组s1。
fun函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母的话,就把前一个字符转换为大写。
程序中语句p[i-1]=p[i-1]-'a'+'A';即p[i-1]=p[i-1]-32,意思是将p[i-1]中的字符转换为大写。
因此D选项正确。
35.有以下程序
#include
intf(intx)
{
inty;
if(x==0||x==1)return(3);
y=x*x-f(x-2);
returny;
}
main()
{
intz;
z=f(3);
printf("%d\n",z);
}
程序的运行结果是
A)0
B)9
C)6
D)8
参考答案:
C
【解析】主函数中调用f函数,同时将数值3传递给变量x,执行条件与if(x==0||x==1);此时条件不成立,跳过return(3);,直接执行语句y=x*x-f(x-2);这里f(x-2)为函数的递归调用,再次调用f函数,此时x=1,条件语句条件成立,返回3给f
(1),y=3*3-3=6,最后将6返回主函数,并进行输出。
因此C选项正确。
36.以下函数实现按每行8个输出w所指数组中的数据
#include
voidfun(int*w,intn)
{inti;
for(i=0;i{______________
printf("%d",w[i]);
}
printf("\n");
}
在横线处应填入的语句是
A)if(i/8==0)printf("\n");
B)if(i/8==0)continue;
C)if(i%8==0)printf("\n");
D)if(i%8==0)continue;
参考答案:
C
【解析】要按照每行8个输出数据的话,横线处语句的功能应该为:
当i是8的倍数时(i%8==0),输出一个换行符。
因此C选项正确。
1.以下选项中,当x为大于1的奇数时,值为0的表达式是
A)x%2==0
B)x/2
C)x%2!
=0
D)x%2==1
参考答案:
A
【解析】算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。D选项的值为真,即1。
2.当变量c的值不为2、4、6时,值为"真"的表达式是
A)(c>=2&&c<=6)&&(c%2!
=1)
B)(c==2)||(c==4)||(c==6)
C)(c>=2&&c<=6)&&!
(c%2)
D)(c>=2&&c<=6)||(c!
=3)||(c!
=5)
参考答案:
D
【解析】逻辑或表达式中有一个值不为0,结果即为真,逻辑与表达式中只有两个运算对象均非零,结果才为真。所以只有选项D满足要求。
3。
以下叙述中正确的是
A)在C语言中,逻辑真值和假值分别对应1和0
B)关系运算符两边的运算对象可以是C语言中任意合法的表达式
C)对于浮点变量x和y,表达式:
x==y是非法的,会出编译错误
D)分支结构是根据算术表达式的结果来判断流程走向的
参考答案:
B
【解析】A选项中,在C语言中,逻辑真值对应非0;C选项中,表达式:
x==y是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。
因此B选项正确。
4.下列关系表达式中,结果为"假"的是
A)3<=4
B)(3<4)==1
C)(3+4)>6
D)(3!
=4)>2
参考答案:
D
【解析】B选项中,关系表达式(3<4)==1即1==1,结果为真;C选项中,(3+4)>6即7>6,结果为真;A选项中,3<=4结果为真。
D选项中,(3!
=4)>2即1>2,结果为假。
因此D选项正确。
5.以下叙述中正确的是(短路运算)
A)对于逻辑表达式:
a++||b++,设a的值为1,则求解表达式的值后,b的值会发生改变
B)对于逻辑表达式:
a++&&b++,设a的值为0,则求解表达式的值后,b的值会发生改变
C)else不是一条独立的语句,它只是if语句的一部分
D)关系运算符的结果有三种:
0,1,-1
参考答案:
C
【解析】B选项和A选项中,对于逻辑表达式,其中b的值不会因为表达式的结果发生改变;D选项中,关系运算符的结果有"真"和"假"两种。
因此C选项正确。
6.有以下程序(短路运算)
#include
main()
{intx=35,B;charz='B';
B=((x)&&(z<'b'));
printf("%d\n",B);
}
程序运行后的输出结果是
A)1
B)0
C)35
D)66
参考答案:
A
【解析】本题重点考察逻辑运算符和关系运算符的相关知识,已知变量x为整型变量,并赋值为35,变量z为字符型变量,并赋值为'B'。
语句B=((x)&&(z<'b'));中,(x)的值为1,'B'的asscii码小于'b'的asscii码,所以(z<'b')的值也为1,1&&1结果为1。
因此A选项正确。
7.若变量已正确定义,以下选项中非法的表达式是
A)a!
=4||'b'
B)'a'=1/2*(x=y=20,x*3)
C)'a'%4
D)'A'+32
参考答案:
B
【解析】A选项中'a'即表示a为字符常量,再给'a'赋值1/2*(x=y=20,x*3),是不正确的。
因此B选项正确。
8.与数学表达式x≥y≥z对应的C语言表达式是
A)(x>=y)||(y>=x)
B)(x>=y>=z)
C)(x>=y)!
(y>=z)
D)(x>=y)&&(y>=z)
参考答案:
D
【解析】本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。
因此D选项正确。
9.以下叙述中正确的是
A)逻辑"或"(即运算符||)的运算级别比算术运算要高
B)C语言的关系表达式:
0(0C)逻辑"非"(即运算符!
)的运算级别是最低的
D)由&&构成的逻辑表达式与由||构成的逻辑表达式都有"短路"现象
参考答案:
D
【解析】B选项中,(x>0)&&(x<10)的值是1或0,条件是x>0并且x<10。
但是0)的运算级别是最高的;A选项中,算术运算符优先级较高,关系和逻辑运算符优先级较低。
因此D选项正确。
10.表示关系式x≤y≤z的C语言表达式的是
A)(x<=y)&&(y<=x)
B)(x<=y)||(y<=x)
C)(x<=y<=z)
D)x<=y)!
(y<=x)
参考答案:
A
【解析】本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。
因此A选项正确。
11.有以下程序
#include
voidfun(char*c)
{
while(*c)
{
if(*c>='a'&&*c<='z')
*c=*c-('a'-'A');
c++;
}
}
main()
{
chars[81];
gets(s);
fun(s);
puts(s);
}
当执行程序时从键盘上输入HelloBeijing<回车>,则程序的输出结果是
A)hellobeijing
B)HelloBeijing
C)HELLOBEIJING
D)hELLOBeijing
参考答案:
C
【解析】主程序读取整个字符串存于s中,调用fun函数,字符指针c指向数组s。
函数fun的功能是把指针c所指向的字符数组中的所有小写字符转换为大写。
gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束。
如果*c为小写字符,则*c=*c-32(转大写)。
因此C选项正确。
11.若有以下程序
#include
main()
{inta=6,b=0,c=0;
for(;a&&(b==0);)
{b+=a;a-=c++;}
printf("%d,%d,%d\n",a,b,c);
}
则程序的输出结果是
A)5,6,0
B)6,0,0
C)6,6,1
D)5,6,1
参考答案:
C
【解析】本题重点考察C语言中for语句和逻辑表达式,for语句的一般形式为:
for(表达式1;表达式2;表达式3)语句
其循环中的"表达式1(循环变量赋初值)"、"表达式2(循环条件)"和"表达式3(循环变量增量)"都是选择项,即可以缺省,但";"不能缺省。
该题目中省略了"表达式1(循环变量赋初值)"和"表达式3(循环变量增量)"。
for(;a&&(b==0);){b+=a;a-=c++;}相当于while(a&&(b==0)){b+=a;a-=c++;}。
因此C选项正确。
12.有以下程序
#include
main()
{doublex=2.0,y;
if(x<0.0)y=0.0;
elseif((x<5.0)&&(!
x))y=1.0/(x+2.0);
elseif(x<10.0)y=1.0/x;
elsey=10.0;
printf("%f\n",y);
}
程序运行后的输出结果是
A)0.000000
B)0.250000
C)0.500000
D)1.000000
参考答案:
C
【解析】本题重点考察if语句,变量x和y均为double类型,由于变量x赋值为2.0,因此执行if((x<5.0)&&(!
x)),即条件为0,继续执行if(x<10.0),条件为1,即执行y=1.0/x;。
依据printf()函数输出类型中f是以小数形式输出单、双精度实数。
因此C选项正确。
13.若a是数值类型,则逻辑表达式(a==1)||(a!
=1)的值是
A)1
B)0
C)2
D)不知道a的值,不能确定
参考答案:
A
【解析】逻辑或"||"要求只要两边的运算对象有一个非零,结果就为真,虽然不知道a的值,但是若a为1,则左边运算对象为1,若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1。
15.当变量c的值不为2、4、6时,值也为"真"的表达式是
A)(c>=2&&c<=6)&&(c%2!
=1)
B)(c==2)||(c==4)||(c==6)
C)(c>=2&&c<=6)&&!
(c%2)
D)(c>=2&&c<=6)||(c!
=3)||(c!
=5)
参考答案:
D
【解析】逻辑或运算符中只要有一个运算量为真结果就是真,当c>=2&&c<=6条件不成立时c的值肯定不是2、3、4、5、6,所以c!
=3,与c!
=5均成立。所以D选项的结果一定为真。
16.有以下程序(短路运算)
#include
main()
{inta=1,b=2,c=3,d=0;
if(a==1&&b++==2)
if(b!
=2||c--!
=3)
printf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
elseprintf("%d,%d,%d\n",a,b,c);
}
程序运行后的输出结果是
A)1,3,2
B)1,3,3
C)1,2,3
D)3,2,1
参考答案:
B
【解析】else总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为1,不再执行第二个case语句中的操作。而是进入第二个if语句条件判断,因为b!
=2条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c--!
=3)c的值不变,也不再执行第一个else语句。打印a的值1,b的值3,c的值3。
17.若有以下程序(短路运算)
#include
main()
{inta=1,b=2,c=3,d=4;
if((a=2)||(b=1))c=2;
if((c==3)&&(d=-1))a=5;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
则程序的输出结果是
A)1,2,3,4
B)2,1,2,-1
C)5,1,2,-1
D)2,2,2,4
参考答案:
D
【解析】第一个if语句的判断条件中是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断。执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2。判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作。所以结果为选项D。
18.若有以下程序(短路运算)
#include
main()
{inta=1,b=2,c=3,d=4;
if((a=2)&&(b=1))c=2;
if((c==3)||(d=-1))a=5;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
则程序的输出结果是
A)2,2,2,4
B)2,1,2,-1
C)5,1,2,-1
D)1,2,3,4
参考答案:
C
【解析】第一个if语句的判断条件中是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第一个运算对象a=2非零,判断第二个表达式b=1也非零,所以条件成立执行c=2的赋值操作。执行第二个if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c==3运算对象为假,所以需要判断第二个运算对象d=-1,结果为-1非零,所以条件成立,执行a=5,的操作,所以a值为5,b值为1,c值为2,d值为-1。
19.下关于逻辑运算符两侧运算对象的叙述中正确的是( )。
A)可以是任意合法的表达式
B)只能是整数0或非0整数
C)可以是结构体类型的数据
D)只能是整数0或1
参考答案:
A
【解析】C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A)。
20.设有宏定义:
#defineIsDIV(k,n)((k%n==1)?
1:
0)
且变量m已正确定义并赋值,则宏调用:
IsDIV(m,5)&&IsDIV(m,7)
为真时所要表达的是
A)判断m是否能被5和7整除
B)判断m被5和7整除是否都余1
C)判断m被5或者7整除是否余1
D)判断m是否能被5或者7整除
参考答案:
B
【解析】本题考查逻辑运算符的相关概念,逻辑与若要为真,那么两边都要为真,所需要m都能被5和7整除都余1,所以选项B正确。
21.若有定义intx,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?
(x++):
(y++)中的条件表达式(x-y)等价的是( )。
A)(x-y<0||x-y>0)
B)(x-y<0)
C)(x-y>0)
D)(x-y==0)
参考答案:
A
【解析】条件表达式:
x=表达式1?
表达式2:
表达式3的含义是:
先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。
若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。
在本题中与表达式1:
(x-y)等价的是(x-y<0||x-y>0)。
22.若变量已正确定义
for(x=0,y=0;(y!
=99&&x<4);x++)
则以上for循环
A)执行3次
B)执行4次
C)执行无限次
D)执行次数不定
参考答案:
B
【解析】本题重点考察for语句的循环次数,for(x=0,y=0;(y!
=99&&x<4);x++),y!
=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。
23.有以下程序
#include
main()
{inta=-2,b=0;
while(a++&&++b);
printf("%d,%d\n",a,b);
}
程序运行后输出结果是
A)0,2
B)0,3
C)1,3
D)1,2
参考答案:
D
【解析】本题重点考察while语句,变量a和b分别赋初值为-2和1,while语句的语义是:
计算表达式的值,当值为真(非0)时,执行循环体语句。
a++即a参与运算后,a的值再自增1。
++b即b自增1后再参与其它运算。
当表达式的值为0时,退出循环,最后输出a和b的值为1和2。
因此D选项正确。
24.if语句的基本形式是:
if(表达式)语句,以下关于"表达式"值的叙述中正确的是
A)必须是逻辑值
B)必须是整数值
C)必须是正数
D)可以是任意合法的数值