第四章 选择语句.docx

上传人:b****8 文档编号:10585242 上传时间:2023-02-21 格式:DOCX 页数:21 大小:27.55KB
下载 相关 举报
第四章 选择语句.docx_第1页
第1页 / 共21页
第四章 选择语句.docx_第2页
第2页 / 共21页
第四章 选择语句.docx_第3页
第3页 / 共21页
第四章 选择语句.docx_第4页
第4页 / 共21页
第四章 选择语句.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

第四章 选择语句.docx

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

第四章 选择语句.docx

第四章选择语句

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

(0

C)逻辑"非"(即运算符!

)的运算级别是最低的

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)可以是任意合法的数值

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

当前位置:首页 > 高等教育 > 教育学

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

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