1、第四章 逻辑运算和判断选取控制 4.1 选 择 题 [题4.1] 逻辑运算符两侧运算对象的数据类型____. A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 [题4.4]能正确表示”当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是____. A)(x>=1)&&(x<=10)&&(x>=200)&&(x<=210) B)(x>=1)||(x<=10)||(x>=200) || (x<=210) C)(x=>1)&&(x<=10) || (x>=200)
2、x<=210) D)(x>=1) || (x<=10) && (x>=200) || (x<=210) [题4.6] 判断char型变量ch是否为大写字母的正确表达式是____. A)’A’<=ch<=’Z’ B)(ch>=’A’)&(ch<=’Z’) C) (ch>=’A’)&&(ch<=’Z’) D)(‘A’<=ch)AND(‘Z’>=ch) [题4.7] 设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是____. A)‘x‘&&‘y‘ B)x<=y C)x||y+z&&y-z
3、 D)!((x
4、d)后n的值为____. A)1 B)2 C)3 D)4 [题4.12]以下程序的运行结果是____. #include “stdio.h” 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 [题4.14] 执行以下语句后a的值为[1],b的值为[2]。 int a=5,b=6,w=1,x=2,y=3,z=4; (a=w>x) && (b=y>z); [
5、1] A)5 B)0 C)2 D)l
[2] A)6 B)0 C)1 D)4
[题4.15] 以下不正确的if语句形式是____.
A) if (x>y &&x!=y);
B) if (x==y)x+=y;
C) if (x!=y)scanf(“%d”,&x) else scanf(“%d”,&y);
D) if (x
6、 B)x=20,y=30,z=30 C)x=20,y=30,z=10 D)x=20,y=30,z=20 [题4.18] 以下if语句语法正确的是___. A)if(x>O) printf(“%f”,x) else printf(“%f”,-x) B)if(x>O) {x=x+y;printf(“%f”,x);} else printf(“%f”,-x); C)if(x>O) {x=x+y; print{(“%f”,x);}; else printf(“%f”,-x); D)if(x>0) {x=x+y;printf
7、%f”,x)} else printf(“%f”,-x); [题4.19] 请阅读以下程序: Main() {int a=5 ,b=0,c=0; if(a=b+c)printf(“***\n”); else printf(“$$$\n”); 以上程序 ___ 。 A)有语法错不能通过编译 B)可以通过编译但不能通过连接 C)输出*** D)输出$$$ [题4.20] 以下程序的运行结果是___ 。 main() {int m=5; if(m++>5)printf(“%d\n”,m); else pr
8、intf{(“%d\n”,m--); } A)4 B)5 C)6 D)7 [题4.21]当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是 if(a
9、if(!ok1) a=1; else if(ok2) a=10; a=-1; phintf(“%d\n”,a); } A)1 B)0 C)-1 D)值不确定 [题4.25]为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与___配对。 A)缩排位置相同的if B) 与之最近的if C)其之后最近的if D) 同一行上的if [题4.26] 以下不正确的语句为___。 A) if(x>y); B) if(x=y) &&(x!=0)x+=y; C)if(x!
10、=y)scanf(%d”, &x);else scanf(“%d”, &y);
D)if(x
11、
A)0 B)22 C)12 D)10
[题4.30] 以下程序的运行结果是____.
Main()
{int k=4,a=3,b=2,c=1;
printf(“\n%d\n”,k 12、34]执行以下程序段后的输出结果是___.
int w=3,z=7,x=10;
printf(“%d\n”,x>10? x+100:x-10);
printf(“%d\n”,w++||z++);
printf(“%d\n”,!w>z);
printf(“%d\n”,w&&z);
A) 0 B)1 C)0 D)0
1 1 1 1
1 1 0 0
1 1 1 0
4.2 填 空 题
[题4.37]以下程序的运行结果是 5 25 1.
#include 13、 14、有一个小于z”的表达式[ ]。
x 15、clude 16、2;
if(h==0)h=12;
printf(“%d:”,h);
m=t%100;
if(m<10) printf(“0”);
printf(“%d”,m);
if(t<1200||t==2400)
printf(“AM”);
else printf(“PM”);
}
若运行时输入:1605<回车>时,程序的运行结果是4:05 PM.
[题4.66] 以下程序实现:输入圆的半径r和运算标志m,按照运算标志进行指定计算。请在[]内填入正确内容。
标志 运算
a 面 积
b 周 长
c 二者均计算
# 17、define pi 3.14159
main()
{char m;
float r,c,a;
printf(“input mark a c or b&&r\n”);
scanf(“%c%f”,&m,&r);
if([1]) (m==’a’)
{a=pi*r*r;printf(“area is %f”,a);}
if([2]) (m==’b’)
{a=2*pi*r;printf(“circle is %f”,a);}
if([3]) (m==’c’)
{a=pi*r*r;c=2*pi*r;printf(“area&& circle are %f %f”, 18、a,c);}
[题4.67]若运行时输入:5999<回车>,则以下程序的运行结果(保留小数点后一位)是___. (3635.4)
main()
{
int x;
float y;
scanf(“%d”,&x);
if(x>=0&&x<=2999) y=18+0.12*x;
if(x>=3000&&x<=5999) y=36+0.6*x;
if(x>=6000&&x<=10000) y=54+0.3*x;
printf(“%6.1f”,y);
}
[题4.68] 以下程序实现输出x,y,z三个数中的最大者。请在[]内填入正确内容。
main()
{i 19、nt x=4,y=6,z=7;
int [1]; (u,v)
if([2]) u=x; (x>y)
else u=y;
if([3])v=u; (u>z)
else v=z;
printf(“v=%d”,v);
}
[题4.71]以下程序对输入的一个小写字母,将字母循环后移5个位置后输出。如‘a’变成’f’,’w’变成’b’.请在[]内填入正确内容。
#include “stdio.h”
main()
{char c;
c=gerchar();
if(c>=’a’&&c<=’u’)[1]; (c=c+5)
else if(c>=’v’&&c<=’z’ 20、)[2]; (c=c-21)
putchar(c);
}
[题4.72] 输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其它字符不变。请在[]内填入正确内容
main()
{char ch;
scanf(“%c”,&ch);
if ([1])ch=ch+32; (ch>=’A’&& ch<=’Z’)
else if (ch>=’a’&&ch<=’z’)[2]; (ch=ch-32)
printf(“%c”,ch);
[题4.73]以下程序的运行结果是
main()
{int a,b,C;
in 21、t s,w,t;
s=w=t=0;
a=-1;b=3;c=3;
if(c>0)s=a+b;
if(a<=0)
{if(b>0)
if(c<=0)w=a-b;
}
else if(c>0) w=a-b;
else t=c;
printf(“%d%d%d”,s,w,t);
} (2 0 0)
[题4.74] 以下程序的运行结果是___.
mian()
{int a,b,c,d,x;
a=c=0;
b=1;
d=20;
if(a)d=d-10;
else if(!b)
if(!c)x=15;
else x= 22、25;
printf(“%d\n”,d);
}
20
[题4.76]以下程序的运行结果是____.
#include 23、t%d\n”,x,z); (4 -2)
}
[题4.77]
main()
{int s,t,a,b;
scanf(“%d,%d”,&a,&b);
s=1;
t=1;
if(a>0) s=s+1;
if(a>b)t=s+t;
else if(a==b)t=5;
else t=2*s;
printf(“s=%d,t=%d”,s,t);
}
为了使输出结果t=4,输入量a和b应满足的条件是【】。(0 24、0
x(x+2)
一1 25、形的类型。请在[]内填入正确内容.
#include “math.h”
{float a,b,c;
float s,area;
scanf(“%f%f%f”,&a,&b,&c);
if([1]) (a+b>c && b+c>a && a+c>b)
{s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“%f”,area);
if([2]) (a==b && b==c)
printf(“等边三角形”);
else if([3]) (a==b || b==c || c==a)
prin 26、tf(“等腰三角形”);
else if((a*a+b*b==c*c)||( a*a+c*c==b*b) ||( b*b+c*c==a*a))
printf(“直角三角形”);
else printf(“一般三角形”);
}
else printf(“不能组成三角形”);
}
[题4.88] 以下程序的运行结果是____.
main()
{int a=2,b=3,c;
c=a;
if(a>b)c=1;
else if (a==b)c=0;
else c=-1;
printf(“%d\n”,c);
}
- 27、1
[题4.91]设有变量定义:int a=10,c=9;
则表达式(--a!=c++)?—a:++c的值是[]。11
[题4.92] 若有说明语句:int x=1,y=0;则表达式x>(y+x)?10:12.5>y++?’a’:’A’的值是[]。 97或’a’
[题4.99] 若运行时输入:-2<回车>,则以下程序的输出结果是____.
main()
{
int a,b;
scanf(“%d”,&a);
b=(a>=0)?a:-a;
printf(“b=%d”,b);
}
b=2
[题4.101] 如果运行时输入 28、字符’Q’, 则以下程序的运行结果是____.
main()
{char ch;
scanf(“%c”,&ch);
ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch;
ch=(ch>=’a’&&ch<=’z’)?(ch-32):ch;
printf(“%c”,ch);
}
Q
[题4.102]若运行时输入:1992<回车>,则以下程序的运行结果是____.
main()
{int y,t;
scanf(“%d”,&y);
t=((y%4==0 && y%100!=0)||y%400==0)?1:0;
if(t)printf(“%d is 29、y);
else printf(“%d is not”,y);
printf(“a leap year”);
}
1992 is a leap year
[题4.108] 若运行时输入:3 5/<回车>,则以下程序的运行结果是___.
main()
{float x,y;
char o;
double r;
scanf(“%f%f%c”,&x,&y,&o);
switch(o)
{case ‘+’:r=x+y;break;
case ‘-’:r=x-y;break;
case ‘*’:r=x*y;break;
case ‘/’:r=x/y;break; 30、
}
printf(“%f”,r);
} 0.600000
[题4.109] 根据以下嵌套的语句所给条件,填写switch语句,使它完成相同的功能。(假设mark的取值在1~100之间。)
if 语句:
if(mark<60)k=1;
else if(mark<70)k=2;
else if(mark<80)k=3;
else if(mark<90)k=4;
else if(mark<100)k=5;
switch 语句:
switch([1])
{ [2] k=1;break;






