第四章 选择结构
一.选择题
1.if后面的逻辑表达式之值( )。 A.只能是0和1 B.只能是正整数或负整数 C.只能是整型或字符型数据 D.可以是任何类型数据 2.以下不正确的语句为( )。
A.if(x>y); B.if(x==y)&&(x!=0) x+=y ; C.if(x C.if(x!=y)x++;else y++; D.if (x>y) && (x!=1) {x++;y++;} 4.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是( )。 if(x>y) z=x;x=y;y=z; A.x=10,y=20,z=30 B.x=20,y=30,z=30 C.x=20,y=30,z=10 D.x=20,y=30,z=20 5.以下程序的输出是( )。 main() { int a=2,b=-1,c=2; if(b if(b<0) c=0; printf(“%d\\n”,c); } A.0 B.1 C.2 D.3 6.以下程序的输出是( )。 main() { int a=2,b=-1,c=2; if(a if(b<0) c=0; else c+=1; printf(“%d\\n”,c) } A.0 B.1 C.2 D.3 7.以下程序的运行结果是( )。 main( ) {int m=5; if(m++>5)printf(“%d\\n”,m); else printf(“%d\\n”,m--); } A.4 B.5 C.6 D.7 8.若执行以下程序时从键盘上输入3和4,则输出结果是( )。 main() { int a,b,s; scanf(“%d%d”,&a,&b); s=a; if(a s*=s; printf(“%d\\n”,s)} A.14 B.16 C.18 D.20 9.运行以下程序,输出( )。 main() { int k=-3; if(k<=0)printf(“****\\n”); else printf(“&&&&\\n”);} A.**** B.&&&& C.####&&&& D.有语法错误不能通过编译 10.下面的程序运行结果是( )。 main( ) { int x=0,y=0,z=0; if(x=y+z)printf(\ else printf(\ A. 有语法错误不能通过编译 B.输出* * * * C.可以通过编译,但是不能通过连接,因而不能运行 D.输出# # # # 11.下列条件语句中,输出结果与其他语句不同的是( )。 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); 12.为了避免if_else语句的二义性,C语言规定else总是与( )组成配对关系。 A.缩排位置相同的if B.在其之前未配对的if C.在其之前最近的未配对的if D.同一行上的if 13.有以下程序 #include {int a=1,b=0; if(-a) b++; else if(a=0)b+=2: else b+=3: printf(\%d\n\,b); } 程序运行后的输出结果是( )。 A.0 B.1 C.2 D.3 14.以下程序的输出结果是( )。 main() { int x=2,y=-1,z=2; if(x if(y<0) z=0; else z=z+1; printf(“%d\\n”,z); } A.3 B.2 C.1 D.0 15.有如下嵌套的if语句 if(a if(a if(b 16.以下选项中与上述if语句等价的语句是( )。 A.k=(a B.k=(a 17.当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是( )。 if(a if(a if(a if(b A.1 B.2 C.3 D.6 18.若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句是( )。 A.a=a+b, b=a-b, a=a-b; B.t=a; a=b; b=t; C.a=t; t=b; b=a; D.t=b; b=a; a=t; 19.以下选项中与if(a==1) a=b;else a++;语句功能不同的switch语句是( )。 A.switch(a) B.switch(a==1) { case 1:a=b;break; { case 0 : a=b;break; default : a++; case 1 : a++; } } C.switch(a) D.switch(a==1) { default : a++;break; { case 1:a=b;break; case 1:a=b; case 0: a++; } } 20.若int i=0;执行下列程序后,变量i的正确结果是( )。 switch (i) { case 9: i+=1 ; case 10: i+=1 ; case 11: i+=1 ; default : i+=1 ;} A.10 B.11 C.12 D.13 21.以下程序输出结果是( )。 main ( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1:switch (y) { case 0 : a++ ; break ; case 1 : b++ ; break ; } case 2:a++; b++; break; case 3:a++; b++; } printf(“a=%d,b=%d”,a,b); } A.a=1,b=0 B.a=2,b=1 C.a=1,b=1 D.a=2,b=2 二.填空题 1.复合语句在语法上被认为是 。空语句的形式是 。 2. 请写出以下程序的输出结果 。 main() { int a = 100; if( a > 100) printf(“%d\\n”, a > 100); else printf(“%d\\n”, a <= 100); } 3将上题中的双分支if语句改写成条件表达式语句: 。 4. 阅读下面程序,程序执行后的输出结果是 。 #include \main() { int x,y,z; x = 1; y = 2; z = 3; if(x>y) if(x>z)printf(\); else printf(\); printf(\\n\); } 5.若从键盘输入58,则以下程序输出的结果是 。 main() { int a; scanf(\); if(a>50)printf(\); if(a>40)printf(\); if(a>30)printf(\); } 6.当a = 1、b = 2、c = 3时,以下if语句执行后,a、b、c中的值分别为: 、 、 。 if(a > c) b = a; a = c; c = b; 7.设有程序片段: switch(grade) { case 'A':printf(\ case 'B':printf(\ case 'C':printf(\ case 'D':printf(\ default: printf(\ } 若grade的值为'C',则输出结果是______________________。 8.以下程序的执行结果是 。 main() { int k=8; switch(k) { case 9: k+=1; case 10: k+=1; case 11: k+=1; break; default: k+=1; } printf(\\n\); } 9.若变量已正确定义,以下语句段的输出结果是 。 x = 0; y = 2; z = 3; switch(x) { case 0: switch( y == 2) { case 1: printf(“*”); break; case 2: printf(“%”); break; } case 1: switch( z ) { case 1: printf(“$”); case 2: printf(“*”); break; default : printf(“#”); } } 10.以下程序是计算某年某月有几天。判断闰年的条件是:能被4整除但不被100整除或能被400整除的年份为闰年。 int main( ) { int yy,mm,len; printf(“输入年份和月份:”);scanf(“%d%d”,&yy,&&mm); switch(mm)