本章要求(选择)
1. 掌握if、switch语句的使用方法; 2. 掌握if、switch语句嵌套的用法;
3. 正确编写选择结构的C语言程序,解决实际问题。
一、选择题
1.以下错误的if语句是( C ) A. if(x>y);
B. if(x==y) x+=y;
C. if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y); D. if(x 答:C ,else之前要有分号“;” 2.C语言对嵌套if语句的规定是:else 总是与( D )配对。 A. 其之前最近的if B. 第一个 C. 缩进位置相同的if D. 其之前最近的且尚未配对的if 3.下列关于switch语句和break语句的结论中,正确的是( B ) A. break语句是switch语句中的一部分 B. 在switch语句中可以根据需要使用或不使用break语句 C. 在switch语句中必须使用break语句 4.在下面的条件语句中,只有一个在功能上与其它三个语句不等价,它是( D ) A. if(a) s1; else s2; B. if(a==0) s2; else s1; C. if(a!=0) s1; else s2; D. if(a==0) s1; else s2; 答:a非零时执行s1,a为零时执行s2。 5.若要求在 if 后一对圆括号中表示 a 不等于 0 的关系,则能正确表示这一关系的表达式为( D ) 。( 1997 年 4 月) A.a<>0 B.!a C.a=0 D.a 6.下列叙述中正确的是( D ) A.break语句只能用于switch语句; B.在switch语句中必须使用default; C.break语句必须和switch语句中的case配对使用; D.在switch语句中,不一定使用break语句。 答:break 可以用在循环语句中。 7.以下程序的输出为( A )。 main( ) { int a=20,b=30,c=40; if(a>b) a=b, b=c;c=a; printf(\ } A. a=20,b=30,c=20 B. a=20,b=40,c=20 1 C. a=30,b=40,c=20 D. a=30,b=40,c=30 8.对于条件表达式(k)?(i++):(i--)来说,其中的表达式k等价于( C )。 A. k==0 B. k==1 C. k!=0 D. k!=1 分析:因为条件表达式e1?e2:e3的含义是e1为真时,取表达式e2的值,否则取表达式e3的值,\为真\的意思就是不等于0。 本题正确答案为C。 9.对下述程序,正确的判断是( A )。 main( ) { int a,b; scanf (\if(a>b)a=b; b=a; else a++; b++; printf(\} A. 有语法错误不能通过编译 B. 若输入4,5则输出5,6 C. 若输入5,4则输出4,5 D. 若输入5,4则输出5,5 分析:不管if语句中的条件真假,它只能执行一个语句,要想根据条件执行多个语句,应写成复合语句,程序中if和else的后面都有两个语句,违反了这一点。 本题正确答案为A。 二、读程序题,写出下列程序的运行结果 1. main( ) { int i=10; switch(i) { case 9: i+=1; case 10: i+=1; case 11: i+=1; default: i+=1; } printf(“%d”,i); //13 } 答:i=13 2. #include { 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; } 2 printf(“a=%d,b=%d\\n”,a, b);//a=2,b=1 } 3. #include { int a=2, b=-1, c=2; if(a if(b<0) c=0 else c+=1; printf(“%d\\n”,c); //2 } 答:c=2 4. #include { int a=1, b=3, c=5, d=4; if(a if(c if(a printf(“x=%d”,x);//x=2 } 5. #include main( ) { int x=0, y=1, z=2, w; if(x++) w=x; else if(x++&&y>=1) w=y; else if(x++&&z>1) w=z; printf(“x=%d, w=%d\\n”,x, w);//x=2,w=1 } 6. main( ) { int x=0, y=3, z=2; if(x++&&y++) z--; else if(x+1==6||y--) z++; printf(“x=%d, y=%d,z=%d\\n”,x, y, z);//x=1,y=2,z=3 } 7.main() { int x=100, a=10, b=20, ok1=5, ok2=0; if(a if(! ok1) x=1; else if(ok2) x=10; x=-1; printf(\-1 } 3 8. void main( ) { int a; scanf(“%d”,&a); //输入58 if(a>50) printf(“%d”,a);//58 if(a>40) printf(“%d”,a);//58 if(a>30) printf(“%d”,a);//58 } 运行结果:585858 9. void main() { int a,b,c,x; a=b=c=0; x=35; if(!a) x--; else if(b); if(c) x=3; else x=4; printf(“x=%d\\n”,x);//x=4 } 10. void main( ) { int a=15, b=21, m=0; switch(a%3) { case 0: m++; break; case 1: m++; switch(b%2) { default: m++; case 0: m++; break; } } printf(“%d\\n”,m);//1 } 三、简答题 1. 设x, y, z均为int型变量,请写出描述 “x或y中至少有一个小于z 的表达式”。 答案:x 2. 写出与表达式!(x>0)等价的表达式。 答案:x<=0 3. 写出与表达式!0等价的表达式。 答案:1 4. 写出char型变量ch是小写字母的表达式。 答案:ch>=’a’&&ch<=’z’ 5. 写出满足下列条件的C 语言表达式:int型数x取值为0或1,且float型数y的取 值在1.0-6.0之间的C语言表达式。 答案:(x==0||x==1)&&(y>=1.0&&y<=6.0) 4