资源描述
第四章 逻辑运算和判断选取控制
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)&&(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 D)!((x<y)&& !z||1)
[题4.8] 已知x=43,ch=‘A’, y=0;则表达式
(x>=y && ch<'B’&& !y)的值是____.
A)0 B)语法错 C)1 D)”假”
[题4.9] 若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达式的值为”假”。则以下不能满足要求的表达式是____.
A)A%2==1 B)!(A%2==0) C) !(A%2) D)A%2
[4.10]设有: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
[题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);
[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<y){x++;y++;}
[题4.17] 已知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
[题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(“%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 printf{(“%d\n”,m--);
}
A)4 B)5 C)6 D)7
[题4.21]当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是
if(a<b)
if(c<d)x=1;
e1se
if(a<c)
if(b<d)x=2;
e1se x=3;
else x=6;
else x=7;
A)1 B)2 C)3 D)6
[题4.23] 以下程序的输出结果是____.
Main()
{int a=100,x=10,y=20,ok1=5,ok2=0;
if(x<y)
if(y!=10)
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!=y)scanf(%d”, &x);else scanf(“%d”, &y);
D)if(x<y){x++;y++;}
[题4.28]若有条件表达式(exp)?a++:b- -,则以下表达式中能完全等价于表达式(exp)的是____.
A)(exp==0) B) (exp!=0)
C)(exp==1) D)(exp! =1)
[题4.29] 若运行时给变量x输入12,则以下程序的运行结果是____.
main()
{int x,y;
scanf(“%d”,&x);
y=x>12?x+10:x-12;
printf(“%d\n”,y);
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<a?k:c<b?c:a);
}
A)4 B)3 C)2 D)1
[题4.32] 若w、x、y、z、m均为int型变量,则执行下面语句后的m值是___.
w=1; x=2; y=3; z=4;
m=(w<x)?w:x;
m=(m<y)?m:y;
m=(m<z)?m:z;
A) 1 B)2 C)3 D)4
[题4,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<stdio.h>
void main(void)
{int x=1,y,z;
x*=3+2;
printf(“%d\t”,x);
x*=y=z=5;
printf(“%d\t”,x);
x=y==z;
printf(“%d\n”,x);
}
[题4.38]在C语言中,表示逻辑”真”值用[ ]。
非0数字
[题4.39]设y为int型变量,请写出描述”y是奇数”的表达式[ ]。
(y%2==1)
[题4.40]c语言提供的三种逻辑运算符是[1]、[2]、[3]。
&& || !
[题4.41]设x,y,z均为int型变量,请写出描述”x或y中有一个小于z”的表达式[ ]。
x<z || y<z
[题4.42]设x,y,z均为int型变量,请写出描述”x,y和z中有两个为负数”的表达式[ ].
(x<0 && y<0)||(x<0 && z<0)||(y<0 && z<0)
[题4.50] 条件”2<x<3或x<-10”的C语言表达式是[ ]。
(x>2 && x<3)||(x<-10)
[题4.55]有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为【1】。 (1)
[题4.61] 若运行时输入:16<回车>,则以下程序的运行结果是___.
#include<stdio.h>
void main(void)
{
int year;
printf(“Input your year:”);
scanf(“%d”,&year);
if(year>=18)
printf(“you $ 4.5 yuan/xiaoshi”);
else
printf(“you $ 3.0 yuan/xiaoshi”);
}
输出结果:you $ 3.0 yuan/xiaoshi
[题4.65]请阅读以下程序:
main()
{ int t,h,m;
scanf(“%d”,&t);
h=(t/100)%12;
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 二者均计算
#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”,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()
{int 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’)[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;
int 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=25;
printf(“%d\n”,d);
}
20
[题4.76]以下程序的运行结果是____.
#include<stdio.h>
void main(void)
{int x,y=-2,z=0;
if((z=y)<0)x=4;
else if(y==0)x=5;
else x=6;
printf(“\t%d\t%d\n”,x,z); (4 -2)
if(z=(y==0))
x=5;
x=4;
printf(“\t%d\t%d\n”,x,z); (4 0)
if(x=z=y)x=4;
printf(“\t%d\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<a<b)
[题4.79]下面程序根据以下函数关系,对输入的每个x值,计算出y值。请在【】内填入正确内容。
x
y
2<x<=10
x(x+2)
一1<x<=2
2x
x<=-1
x-l
main()
{int x,y;
scanf(“%d”,&x);
if(【1】)y=x*(x+2);
else if(【2】)y=2*x;
else if(x<=-1)y=x-1;
else【3】;
if(y!=-1)printf(“%d”,y);
else printf(“error”);
}
[1]x>2 && x<10 [2] x>-1 && x<=2 [3]y=-1
[题4.82]以下程序根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。请在[]内填入正确内容.
#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)
printf(“等腰三角形”);
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);
}
-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] 如果运行时输入字符’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”,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;
}
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;
case 6:k=2; break;
case 7:k=3; break;
case 8:k=4; break;
[3] k=5;
}
[1] mark/10
[2]case 0: case 1: case 2: case 3: case 4: case 5:
[3]case 9: case 10:
[题4.115] 假设奖金税率如下(a代表奖金,r代表税率)
a<500 r=0%
500<a<1000 r=5%
1000<=a<2000 r=8%
2000<=a<3000 r=10%
3000<=a r=15%
以下程序对输入的一个奖金数,求税率和应交税款以及实得奖金数(扣除奖金税后)。题中r代表税率,t代表税款,b代表实得奖金数。请在[]内填入
正确内容。
main()
{float a,r,t,b;
int c;
scanf(“%f”,&a);
if(a>=3000)c=6;
else c=[1];
switch(c)
{case 0:r=0;break;
case 1:r=0.05;break;
case 2:
case 3:[2];break;
case 4:
case 5:r=0.1;break;
case 6:r=0.15;break;
}
t=a*r;
b=a-t;
printf(“r=%f,t=%f,b=%f”,r,t,b);
}
[1]a/500 [2]r=0.08
[题4.117]以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。请在[]内填入正确内容。
main()
{
int yy,mm,len;
printf(“year,month=”);
scanf(“%d%d”,&yy,&mm);
switch(mm)
{
case 1:case 3:case 5:case7:
case 8:case 10:case 12:[1];break;
case 4:case 6:case 9:case 11:len=30;break;
case 2:
if(yy%4==0&&yy%100!=0||yy%400==0)[2];
else[3];
break;
default:printf(“input error”);
break;
}
printf(“the length of %d %d is%d\n”,yy,mm,len);
}
[1]len=31 [2]len=29 [3] len=28
4.3编 程 题
[题4.119]编制程序要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
[题4.120]试编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。
[题4.121]请编程序:根据以下函数关系,对输入的每个x值,计算出相应的y值。
┌──────┬────────┐
│ X │ y │
├──────┼────────┤
│ x<O │ 0 │
├──────┼────────┤
│ 0<x<=10 │ X │
├──────┼────────┤
│ 10<x<=20 │ 10 │
├──────┼────────┤
│ 20<x<40 │ -0.5x+20 │
└──────┴────────┘
[题4.123]将以下程序段改用非嵌套的if语句实现。
int s,t,m;
t=(int)(s/10);
switch(t)
{case 10:m=5;break;
case 9:m=4;break;
case 8:m=3;break;
case 7:m=2;break;
case 6:m=1;break;
default m=0;
}
[题4.125] 将以下程序段改用嵌套的if语句实现。
Int s,t,m;
t=(int)(s/10);
switch(t)
{case 10:m=5;break;
case 9:m=4;break;
case 8:m=3;break;
case 7:m=2;break;
case 6:m=1;break;
default m=0;
}
[题4.127] 编程实现以下功能:读入两个运算数(datal和data2)及一个运算符(op),
计算表达式datal op data2的值,其中op可为+,-,*,/(用switch语句实现)。
[题4.128]编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为’A’,80~89分为’B’,70~79分为’C’,60—69分为’D’,60分以下为 ‘E’(用switch语句实现)。
[题4.119]
void main()
{ int a,b,x,y;
scanf(“%d%d”,&a,&b);
x=a*a+b*b;
if(x>100)
{ y=1/100 ; printf(“%d\n”,y);}
else printf(“%d\n”,a+b);
}
[题4.120]
void main()
{ int x;
scanf(“%d”,&x);
if(x%5==0 && x%7==0)printf(“yes”);
else printf(“no”);
}
[题4.121]
void main()
{ int x; float y;
scanf(“%d”,&x);
if(x<0)y=0;
else if(x>0 && x<=10)y=x;
else if(x>10 && x<=20)y=10;
else if(x>20 && x<40)y=-0.5*x+20;
else y=-1;
if(y!=-1) printf(“%f”,y);
else printf(“error\n”);
}
[题4.123]
int s,m;
if((s>=110) || (s<60))m=0;
if(s<110 && s>=100)m=5;
if(s<100 && s>=90)m=4;
if(s<90 && s>=80)m=3;
if(s<80 && s>=70)m=2;
if(s<70 && s>=60)m=1;
[题4.125]
int s,m;
if(s>=110) m=0;
else if(s>=100)m=5;
else if(s>=90)m=4;
else if(s>=80)m=3;
else if(s>=70)m=2;
else if(s>=60)m=1;
else m=0;
21
展开阅读全文