本章要求(选择)
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 .a0 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=%d,b=%d,c=%d",a,b,c);
}
A . a=20,b=30,c=20
B . a=20,b=40,c=20
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 ("%d,%d",&a,&b);
if(a>b)a=b; b=a;
else a++; b++;
printf("%d,%d",a,b);
}
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
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;
}
printf(“a=%d,b=%d\n”,a, b);//a=2,b=1
}
3. #include
main( )
{ int a=2, b=-1, c=2;
if(a
if(b
else c+=1;
printf(“%d\n”,c); //2
}
答:c=2
4. #include
main( )
{ int a=1, b=3, c=5, d=4;
if(a
if(c
else
if(a
if(b
else x=3;
else x=6;
else x=7;
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(b!=15)
if(! ok1) x=1;
else if(ok2) x=10;
x=-1;
printf("%d\n",x); //-1
}
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
3. 写出与表达式!0等价的表达式。
答案:1
4. 写出char 型变量ch 是小写字母的表达式。
答案:ch>=’a ’&&ch
5. 写出满足下列条件的C 语言表达式:int 型数x 取值为0或1,且float 型数y 的取
值在1.0-6.0之间的C 语言表达式。
答案:(x==0||x==1)&&(y>=1.0&&y
本章要求(选择)
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 .a0 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=%d,b=%d,c=%d",a,b,c);
}
A . a=20,b=30,c=20
B . a=20,b=40,c=20
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 ("%d,%d",&a,&b);
if(a>b)a=b; b=a;
else a++; b++;
printf("%d,%d",a,b);
}
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
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;
}
printf(“a=%d,b=%d\n”,a, b);//a=2,b=1
}
3. #include
main( )
{ int a=2, b=-1, c=2;
if(a
if(b
else c+=1;
printf(“%d\n”,c); //2
}
答:c=2
4. #include
main( )
{ int a=1, b=3, c=5, d=4;
if(a
if(c
else
if(a
if(b
else x=3;
else x=6;
else x=7;
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(b!=15)
if(! ok1) x=1;
else if(ok2) x=10;
x=-1;
printf("%d\n",x); //-1
}
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
3. 写出与表达式!0等价的表达式。
答案:1
4. 写出char 型变量ch 是小写字母的表达式。
答案:ch>=’a ’&&ch
5. 写出满足下列条件的C 语言表达式:int 型数x 取值为0或1,且float 型数y 的取
值在1.0-6.0之间的C 语言表达式。
答案:(x==0||x==1)&&(y>=1.0&&y