第5章 选择结构程序设计
1、逻辑运算符两侧运算对象的数据类型_____。
A)只能是0或l
B)只能是0或非0正数
c)只能是整型或字符型数据
D)可以是C的任何类型的数据
[D] 教师批改:D
2、以下关于运算符优先顺序的描述中正确的是_____。
A)关系运算符<算术运算符<赋值运算符<逻辑与运算符
B)逻辑与运算符<关系运算符<算术运算符<赋值运算符
C)赋值运算符<逻辑与运算符<关系运算符<算术运算符
D)算术运算符<关系运算符<赋值运算符<逻辑与运算符
[C] 教师批改:C
3、下列运算符中优先级别高的是
A)<
B)+
C)&&
D)!=
[D] 教师批改:B
4、能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的达式是_____。
A)(x>=1)&&(x<=10&&(x>=200)&&(x<=2l0)
B)(x>=1)||(x<=10)||(x>=200)||(x<=210)
C)(x>=1)&&(x<=10)||(x>=200)&&(x<=2l0)
D)(x>=1)||(x<=10)&&(x>=200)||(x<=210)
[A] 教师批改:C
5、设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行 (m=a>b)&&(n=c>d)后n的值为____。
A)1
B)2
C)3
D)4
[B] 教师批改:B
6、以下程序的运行结果是______。
#include "stdio.h”
void main()
{int a,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf(”%d,%d",a,b);
}
A)6,1
B)2,1
C)6,0
D)2,0
[B] 教师批改:B
7、已知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
[A] 教师批改:B
8、请阅读以下程序:
main()
{int a=5,b=0,c=0;
if(a=b+c) printf(”* * *\n”);
else printf(”$ $ $”);
}
以上程序____。
A)有语法错不能通过编译
c)输出* * *
B)可以通过编译但不能通过连接
D)输出$ $ $
[A] 教师批改:D
9、以下程序的运行结果是____。
main()
{ int m=5;
if(m++>5) printf(”%d\n”,m)
else printf(”%d\n”,m--);
}
A)4
B)5
C)6
D)7
[C] 教师批改:C
10、当a=1,b=3,c=5,d=4时,执行完下面一段程序后,x的值是_____。
if(a
if(c
else
if(a<c)
if(b<d) x=2;
else x=3;
else x=6;
else x=7;
A)1
B)2
C)3
D)6
[B] 教师批改:B
11、以下程序的输出结果是____。
main()
{int a=100,x=l0,y=20,ok1=5,ok2=0;
if(x<y)
if(y!=10)
if(!okl)
a=1;
else
if(ok2)
a=10;
a=-1;
printf("%dn",a);
} A)1 B)0
C)-1 D)值不确定
[C] 教师批改:C
12、若有条件表达式达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是____.
A)(exp==0) B)(exp!=0)
C)(exp==1) D)(exp!=1)
[C] 教师批改:B
13、若w=1,x=2,y=3,z=4,则条件表达式w<x?w:y<z?y;z的值是 A)4 B)3
C)2 D)1
[B] 教师批改:D
14、逻辑运算符两侧运算对象的数据类型_____ A)只能是0或l B)只能是0或非0正数
C)只能是整型或字符型数据 D)可以是任何类型的数据
[D] 教师批改:D
15、下列运算符中优先级别高的是 A)< B)+
C)&& D)!=
[D] 教师批改:B
16、能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的达式是_____。
A)(x>=1)&&(x<=10&&(x>=200)&&(x<=2l0) B)(x>=1)||(x<=10)||(x>=200)||(x<=210)
C)(x>=1)&&(x<=10)||(x>=200)&&(x<=2l0) D)(x>=1)||(x<=10)&&(x>=200)||(x<=210)
[C] 教师批改:C
17、判断char型变量ch是否为大写字母的正确表达式是____。
A)‘A‘<=ch<=‘Z‘ B)(ch>=‘A‘)||(ch<=‘Z‘)
C)(ch>=’A’)&&(ch<=’Z’) D)(‘A‘<=ch)AND(‘z‘>=ch)
[B] 教师批改:C
18、设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行
(m=a>b)&&(n=c>d)后n的值为____。
A)1 B)2
C)3 D)4
[B] 教师批改:B
19、 判断char型变量c1是否为小写字母的正确表达式为________
A)‘a‘<=c1<=‘z’ B)(c1>=a)&&(c1<=z)
C)(‘a‘>=c1) ||(‘z’<=c1) D)(c1>=‘a‘)&&(c1<=‘z‘)
[C] 教师批改:D
20、以下程序的运行结果是____。main() { int m=5; if(m++>5)printf(”%d\n”,m)
else printf(”%d\n”,m--);} A)4 B)5
C)6 D)7
[C] 教师批改:C
21、当a=1,b=3,c=5,d=4时,执行完下面一段程序后,x的值是_____
if(a
if(c
else
if(a<c)
if(b<d)x=2;
else
x=3;
else x=6;
else x=7; A)1 B)2
C)3 D)6
[B] 教师批改:B
22、以下程序的输出结果是_____。
main()
{int a=100,x=l0,y=20,ok1=5,ok2=0;
if(x<y)
if(y!=10)
if(!okl)
a=1;
else
if(ok2) a=10;
a=-1;
printf("%dn",a);
} A)1 B)0
C)-1 D)值不确定
[C] 教师批改:C
23、以下程序的输出结果是______。
main()
{int x=2,y=-1,z=2;
if(x<y)
if(y<0) z=O;
else z+=1;
printf(“%d\n”,z);
} A)3 B)2
C)1 D)0
[D] 教师批改:B
24、若运行时给变量x输入12,则以下程序的运行结果是_____。
main()
{int x,y ;
scanf("%d",&x);
y=x>12?x+10:x-12;
printf("%dn",y);} A)0 B)22
C)12 D)10
[A] 教师批改:A
25、执行以下程序段后,变量a,b,c的值分别是_____。
int x=10,y=9;
int a,b,c;
a=(--x==y++)?--x;++y;
b=x++;
c=y; A)a=9,b=9.c=9 B)a=8,b=8,c=10
C)a=9,b=10,c=9 D)a=1,b=11,c=10
[C] 教师批改:B
26、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(“%dn”,m);
}
程序运行后的结果是
( )
A)1 B)2
C)3 D)4
[A] 教师批改:A
27、表达式1&3&5&7的值为______。
A.1 B.3
C.5 D.7
[A] 教师批改:A
28、表达式-1<=3<=-5值是______。
A.0 B.1
C.3 D.表达式语法有错
[A] 教师批改:A
29、假定所有变量均已正确说明,下列是程序段运行后x的值是______。
a=b=c=0;x=35;
if(!a) x--;
else if(b);
if(c) x=3;
else x=4; A.34 B.4
C.35 D.3
[A] 教师批改:B
30、若变量c为char类型,能正确判断出c为小写字母的表达式是______。
A.‘a‘<=c<= ‘z‘ B.(c>= ‘a‘)||(c<=
‘z‘)
C.(‘a‘<=c)and
(‘z‘>=c) D.(c>=
‘a‘)&&(c<=
‘z‘)
[B] 教师批改:D
36、在以下一组运算中,优先级最高的运算符是______。
A.<= B. =
C. % D.
&&
[C] 教师批改:C
37、执行下面语句后的输出结果为______。
int i=-1;
if(i<=0) printf("****n");
else printf("%%%%n"); A.**** B.%%%%
C.%%%%c D.有语法错误,不能正确执行
[A] 教师批改:A
36、在以下一组运算中,优先级最高的运算符是______。
A.<= B. =
C. % D.
&&
[C] 教师批改:C
37、执行下面语句后的输出结果为______。
int i=-1;
if(i<=0) printf("****n");
else printf("%%%%n"); A.**** B.%%%%
C.%%%%c D.有语法错误,不能正确执行
[A] 教师批改:A
38、以下程序的运行结果是________
main()
{ int a=2,b=7,c=5;
switch(a>0)
{case 1:switch (b<0)
{case 1:printf("@");break;
case 2: switch (c==5)
{case 0:printf("*");break;
case 1:printf("#");break;
default:printf("#");break;
}
default:printf("&");
} printf("n");
}
教师批改:#&
39、请读程序
#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",a,b);
}
上面程序的运行结果是_____________
教师批改:a=2,b=1
40、有三个整数a,b,c,由键盘输入,输出其中最大得数。
教师批改:
main()
{
int a,b,c,d;
printf("please input 3 num,
the format is 1 2 3n");
scanf("%d %d
%d",&a,&b,&c);
d=(a>b)?a:b;
d=(d>c)?d:c;
printf("the max number is
%dn ",d);
}
41、以下面的方程为基础,写一程序,输入X值,输出Y值,方程如下:当 x<1
时,y=x,当1<=x<10时,y=2x-1,当x>=10时,y=3x-11
教师批改:
main()
{
int
x,y,a;
printf("please input the value of x ");
scanf("%d",&x);
printf("the value of y is: ");
if(x<1)
{
y=x;
printf("%d",y);
}
else
if(
x>=1&&x<10)
{
y=2*x-1;
printf("%d",y);
}
else
{
y=3*x-11;
printf("%d",y);
}
}
42、给出一百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’,90分以上为A,80~90分为B,70~79分为C,60~69分为D,60分以下为E。
教师批改:
main()
{ int num ;
printf("please input the score:n ");
scanf("%d",&num);
if(num<0||num>100)
printf("the score is error,please input a number from 0-100n
");
else
if(num>=90) num=65;
else
if(num>=80) num=66;
else
if(num>=70) num=67;
else
if(num>=60) num=68;
else num=69;
printf("the level is :");
switch(num)
{
case 65: printf("%c",num);break;
case 66: printf("%c",num);break;
case 67: printf("%c",num);break;
case 68: printf("%c",num);break;
case 69: printf("%c",num);break;
}
}
43、给一个不多于5位的正整数,要求:(1)求出它是几位数,(2)分别打印出每一位数字(3)按顺序打印出各位数字,例如原数时321,应输出123。
教师批改:
main()
{
long
num;
int
k;
printf("please input a num form 0-99999:n");
scanf("%ld",&num);
printf("
the answer one is: the long of the number is: ");
if(num>=10000)
{
k=5;
printf("%d",k);
}
else
if(num>=1000)
{
k=4;
printf("%d",k);
}
else
if(num>=100)
{
k=3;
printf("%d",k);
}
else
if(num>=10)
{
k=2;
printf("%d",k);
}
else
{
k=1;
printf("%d",k);
}
printf("n the answer two is :");
switch(k)
{
case 1: printf("%5ld",num);break;
case 2: printf("%5ld %5ld",num/10,num%10);break;
case 3: printf("%5ld %5ld
%5ld",num/100,num%100/10,num%10);break;
case 4: printf("%5ld %5ld %5ld
%5ld",num/1000,num%1000/100,num%100/10,num%10);break;
case 5: printf("%5ld %5ld %5ld %5ld
%5ld",num/10000,num%10000/1000,num%1000/100,num%100/10,num%10);break;
}
printf("nthe answer three is: ");
switch(k)
{
case 1: printf("%ld",num);break;
case 2: printf("%ld%ld",num%10,num/10);break;
case 3: printf("%ld%ld%ld",num%10,num%100/10,num/100);break;
case 4:
printf("%ld%ld%ld%ld",num%10,num%100/10,num%1000/100,num/1000);break;
case 5:
printf("%ld%ld%ld%ld%ld",num%10,num%100/10,num%1000/100,num%10000/1000,num/10000);break;
}
}
44、企业发放的奖金根据利润提成。利润低于或等于10万的,奖金可提成10%;利润高于10万,低于20万的,低于10万的部分按10%提成,高于10万的提成7.5%;高于20万低于40万时,低于20万的按上述方法提成(下同)。高于20万的按5%提成。高于40万低于60万的,高于40万的部分按3%提成。高于60万低于100万的,高于60万的部分按1.5%提成,超过100万的部分按1%提成。要求从键盘输入当月利润I,求应发奖金数。
要求:
(1)用if语句编程序。
(2)用switch语句编程序。
教师批改:
(1):
main()
{
long i;
int
bonus,bonus1,bonus2,bonus4,bonus6,bonus10;
printf("nnPlease input
the bonus of this month:n");
scanf("%ld",&i);
printf("nn This month
bonus is ");
bonus1=100000*0.1;
bonus2=bonus1+100000*0.075;
bonus4=bonus2+200000*0.05;
bonus6=bonus4+200000*0.03;
bonus10=bonus6+400000*0.015;
if(i<=100000) bonus=bonus1;
else
if(i<=200000) bonus=bonus1+(i-100000)*0.075;
else
if(i<=400000) bonus=bonus2+(i-200000)*0.05;
else
if(i<=600000) bonus=bonus4+(i-400000)*0.03;
else
if(i<=1000000) bonus=bonus6+(i-600000)*0.015;
else bonus=bonus10+(i-1000000)*0.01;
printf("%d",bonus);
}
45、输入4个整数,要求按由小到大的顺序输出。
教师批改:
main()
{ int a,b,c,d,t;
printf("please input four integer numbers,for example:
1,2,3,4n");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b) {t=a;a=b;b=t;}
if(a>c) {t=c;a=c;c=t;}
if(a>d) {t=a;a=d;d=t;}
if(b>c) {t=b;b=c;c=t;}
if(b>d) {t=b;b=d;d=t;}
if(c>d) {t=c;c=d;d=t;}
printf("the number form smallest to biggest
is:n%6dn%6dn%6dn%6dn",a,b,c,d);
}
46、有4个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1,这4个塔的高度为10m,塔外无建筑物,今输入任何一点的坐标,求该点的建筑高度,(塔外的高度为0)。
教师批改:
#include
main()
{ int h;
float w,x,y,j,i,k;
printf("please input the
zuobiao,for example:1,2n");
scanf("%f,%f",&x,&y);
if(x>=3||x<=-3||y>=3||y<=-3)
h=0;
else h=1;
switch(h)
{
case 0 : printf("the height is 0");break;
case 1 :{ x=fabs(x);y=fabs(y);
w=sqrt((x-2)*(x-2)+(y-2)*(y-2));
printf("the height is %f",10-w*10);
}
}
}
47、输入两个整数,若它们的平方和大于100,则输出该平方和的百位数以上(包括百位数字)的各位数字,否则输出两个整数的和。
教师批改:
#include "stdio.h"
main ( )
{
int a, b, c, d ;
printf ( "Please input a,bn");
scanf ( "%d, %d ", &a,
&b);
c=a*a+b*b;
if ( c>100 )
{ d=c/100;
printf ( " %d → %dn", c, d );
}
else
printf
(" a+b=%dn", a+b);
}
运行程序:
输入:11,10↙
输出:221 → 2
输入:3,2↙
输出:a+b=5
若a、b的平方和大于100时,要求输出百位数以上的数字,即去掉个位及十位数字后的数。一个数k,取百位数以上(含百位数)的数字为k/100;取百位数以下(不含百位数)的数字为k
%100。如:12345,12345/100的值为123,即百位数以上(含百位数)的数;12345%100的值为45,即百位数以下(不含百位数)的数。
}