习题四 选择结构程序设计
1. 设变量x和y均已正确定义并赋值。以下if语句中,在编译时将产生错误信息的是______。
A、if(x++); B、if(x>y && y!=0); C、if(x>0) x-- D、if(y<0) {;}
else y++; else x++;
解析:本题考查的是if语句。if后表达式两侧的圆括号不可少,最后是一条语句或是用花括号括起来的一组语句。选项A和B是在表达式后跟了一条空语句,选项D是在表达式后跟了一组空语句,选项C中x--是表达式而不是语句,所以在编译时会出现错误信息。故本题答案选C。
2. 有以下程序
main()
{ int i;
for(i=1;i<=40;i++)
{ if(i++%5==0)
if(++i%8==0) printf ("%d",i);}
printf("\n"); }
执行后的输出结果是______。
A、5 B、24 C、32 D、40
解析:本题考查的是if语句的应用。在满足for 语句条件下,第一个if语句的条件是指i先对5取余后,再自行加1;第二个if语句的条件是指:i=i+1后,再对8取余。故本题答案选C。
3. 在嵌套使用if语句时,C语言规定else总是______。
A、和之前与其具有相同缩进位置的if配对 B、和之前与其最近的if配对
C、和之前与其最近的且不带else的if配对 D、和之前的第一个if配对
解析:本题考查的是if语句的使用规则。在嵌套使用if语句时,C语言规定else总是和之前与
其最近的且不带else的if配对。故本题答案为C。
4. 有以下程序
main()
{ int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k); }
程序运行后的输出结果是______。
A、1 2 3 B、2 3 4 C、2 2 3 D、2 3 3
解析:本题考查的是条件判断语句。本题中执行"i++==1&&(++j==3||k++==3)"时,先执行i++==1,由于i++是先运算,后自加,所以表达式"i++==1"的值为真,其值为1,然后执行括号中的表达式,由于++j是先自加,后运算,所以表达式"++j==3" 的值为真,根据短路原理,
右边的表达式"k++==3"不再进行运算,直接得出括中表达的值为1,相与后整个表达式的值也为1,输出i,j,k时,由于未执行过k,所以它们的值分别为2,3,3。故本题的答案为D。
5.有以下程序:
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);}}
程序运行后的输出结果是______。
A、022111 B、021021 C、000122 D、012
解析:此题考点是switch语句。switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case 常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值到匹配的入口标号,就从此标号开始执行下去,不再进行判断。如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。本题中没有使用break终止switch语句的执行。在此题中当i=0时,执行第一个case语句,因为它后面没有break,所以一直到执行完default语句结束,再执行下一循环。故本题答案为C。
6. 下列条件语句中,功能与其他语句不同的是______。
A、if(a) printf("%d\n",x); else printf("%d\n",y);
B、if(a==0) printf("%d\n",y); else printf("%d\n",x);
C、if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D、if(a==0) printf("%d\n",x); else printf("%d\n",y);
解析:此题考的是if语句中逻辑表达式值的判断。if(a)表示a值为真(即不等于0都为真)的话,就输出x的值,否则输出y的值;if(a==0)表示如果a与0等值,即a不为真,就输出y的值,否则输出x的值,此与选项A等价;再看选项C,a不等于0,即为真,输出x,否则输出y,与前两个都同意;而选项D恰好与前几项的意思相反,它是a为0时,输出x,为真时输出y。故本题答案为D。
7.有以下程序
main()
{ char k; int i;
for(i=1;i<3;i++)
{ scanf("%c",&k);
switch(k)
{ case '0': printf("another\n");
case '1': printf("number\n");}
}}
程序运行时,从键盘输入:01↙,程序执行后的输出结果是______。
printf是什么意思c++A、another B、another C、another D、number
number number number number
another number
解析:此题考点是switch语句。本题中没有使用break终止switch语句的执行,本题当k为0时,执行完case '0'后将继续执行case '1'。故本题答案为C。
8.以下4个选项,不能看作一条语句的是______。
A、{;} B、a=0,b=0,c=0; C、if(a>0); D、if(b==0)m=1;n=2;
解析:if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出
的两种操作之一。在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。选项D中没有将两个操作语句括起来,不能看作一条语句。故本题答案为D。
9.以下程序的输出结果是______。
main()
{ int a=-1,b=1, k;
if((++a<0)&&!(b--<=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);
}
A、-1 1 B、0 1 C、1 0 D、0 0
解析:本题的考查点是if条件的判断。++a是先运算后使用,b--是先使用后运算。执行++a后,a值为0,不满足条件,所以a为0,b仍为1,接下去执行else语句,输出1 0。故本题答案为C。
10. 有以下程序
main()
{ int c;
while((c=getchar() )!='\n') {
switch(c-'2') {
case 0: case 1: putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break; } }
}
A、668977 B、668966 C、66778777 D、6688766
解析:本题的考查点是switch()语句。getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据表达式c-'2'的值进行分支选择;putchar()是在屏幕上打印一个字符,最后的结果应当为 668977。故本题答案为A。
11.有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是______。
A、if (c<a) x=1; B、if (a<3) x=3;
else if (b<a) x=2; else if (a<2) x=2;
else x=3; else x=1;
C、if (a<3) x=3; D、if (a<b) x=b;
if (a<2) x=2; if (b<c) x=c;
if (a<1) x=1; if (c<a) x=a;
解析:本题的考查点是if语句。选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3;选项B,a<3成立,执行第一种操作,x=3;选项C,a<3成立,执行第一种操作,x=3;a<2成立,执行第二种操作,此时x=2;a<1不成立,最后的不执行,所以执行此段程序后x=2;选项ф,a<b成立,执行x=b,此时x=2;b<c成立,执行x=c,此时x=3;c<a不成立,不执行x=a,所以执行此段程序后x=3。故本题答案为C。
12.以下关于逻辑运算符两侧运算对象的叙述中正确的是______
A、只能是整数0或1 B、只能是整数0或非0整数
C、可以是结构体类型的数据 D、可以是任意合法的表达式
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论