习题四 选择结构程序设计
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 (\ printf(\
执行后的输出结果是______。
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(\程序运行后的输出结果是______。
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(\ case 2:printf(\
default:printf(\程序运行后的输出结果是______。
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(\B、if(a==0) printf(\C、if (a!=0) printf(\D、if(a==0) printf(\
解析:此题考的是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(\ switch(k)
{ case '0': printf(\ case '1': printf(\ }}
程序运行时,从键盘输入:01↙,程序执行后的输出结果是______。 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(\ else
printf(\}
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的是______。