c语言选择结构程序设计习题册答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章选择结构程序设计
基础练习(A)
一、填空题
1.关系表达式的运算结果是逻辑值。
C语言没有逻辑型数据, 以1 代表“真”, 以0代表“假”。
2.逻辑运算符!是单目运算符, 其结合性是由右结合性。
3.C语言提供的三种逻辑运算符是&& 、|| 、! 。
其中优先级最高的为! ,优先级最低的为| | 。
4.逻辑运算符两侧的运算对象不仅可以是0和1, 或者是0和非0的整数, 也可以是任何类型的数据。
系统最终以0 和非0 来鉴定它们属于“真”或“假”。
5、设y为int型变量, 请写出描述“y是偶数”的表达式(y%2==0) 。
6、设x, y, z均为int型变量, 请写出描述“x或y中有一个小于z”的表达式x<z||y<z 。
7、条件“2<x<3或x<-10”的C语言表达式是x<-10||x>2&&x<3。
8、判断char型变量ch是否为大写字母的对的表达式是(ch>=‘A’)&&(ch<=‘Z’)。
9、当a=3,b=2,c=1时, 表达式f=a>b>c的值是0 。
10、当a=5,b=4,c=2时, 表达式a>b!=c的值是 1 。
11.已知A=7.5,B=2,C=3.6, 表达式A>B&&C>A||A<B&&!C>B的值是0 。
12.若a=6,b=4,c=2, 则表达式!(a-b)+c-1&&b+c/2的值是 1 。
13、有int x,y,z;且x=3,y=-4,z=5, 则表达式(x&&y)==(x||z)的值为 1 。
14、有int x,y,z;且x=3,y=-4,z=5, 则以下表达式的值为 1 。
!(x>y)+(y!=z)||(x+y)&&(y-z)
15.有int a=3,b=4,c=5,x,y;, 则以下表达式的值为0 。
!(x=a)&&(y=b)&&0
16.if (!k) a=3;语句中的!k可以改写为k= =0 , 使其功能不变。
二、选择题
1.逻辑运算符两侧运算对象的数据类型(D)。
A)只能是0或1
B)只能是0或非0正数
C)只能是整型或字符型数据
D)可以是任何类型的数据
2.以下关于运算符优先顺序的描述中对的的是(C)。
A)关系运算符<算术运算符<赋值运算符<逻辑与运算符
B)逻辑与运算符<关系运算符<算术运算符<赋值运算符
C)赋值运算符<逻辑与运算符<关系运算符<算术运算符
D)算术运算符<关系运算符<赋值运算符<逻辑与运算符
3.下列运算符中优先级最高的是(B)。
A)< B)+ C)&& D)!=
4.为判断字符变量c的值不是数字也不是字母时, 应采用下述表达式( D )。
A)c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122
B)!(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122)
C)c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122
D)!(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)
5.能对的表达“当x的取值在[1, 100]和[200, 300]范围内为真, 否则为假”的表达式是( C )。
A) (x>=1)&&(x<=100)&&(x>=200)&&(x<=300)
B) (x>=1)||(x<=100)||(x>=200)||(x<=300)
C) (x>=1)&&(x<=100)||(x>=200)&&(x<=300)
D) (x>=1)||(x<=100)&&(x>=200)||(x<=300)
6.设x、y和z是int型变量, 且x=3,y=4,z=5, 则下面表达式中值为0的是( D )。
A)‘x’&&‘y’
B) x<=y
C) x||y+z&&y-z
D) !((x<y)&&!z||1)
7、已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<‘B’&&!y)的值是(C)。
A)0 B)语法错C)1 D)“假”
8、设有: int a=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后n的值为(B)。
A)1 B)2 C)3 D)4
9、以下不对的的if语句形式是(C)。
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++;}
10、已知int x=10,y=20,z=30;以下语句执行后x, y, z的值是( B )。
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
11.以下if语句语法对的的是(B)。
A) if(x>0)
printf(“%f”,x)
else printf(“%f”,-x);
B) B)if(x>0)
{ x=x+y; printf(“%f”,x); }
else printf(“%f”,-x);
C) C)if(x>0)
{ x=x+y; printf(“%f”,x);};
else printf(“%f”,-x);
D) D)if(x>0)
{ x=x+y; printf(“%f”,x)}
else printf(“%f”,-x);
12.请阅读以下程序:
main()
{
int a=5,b=5,c=0;
if(a==b+c) printf(“***\n”);
else printf(“$$$\n”);
}
以下程序(C)。
A)有语法错不能通过编译B)可以通过编译但不能通过连接
C)输出*** D)输出$$$
三、写出下列程序的运营结果
1.若运营时输入: 2<回车>, 则以下程序的运营结果是2nd class postage is 14p 。
#include <stdio.h>
void main(void)
{
char Class;
printf(“Enter 1 for 1st class post or 2 for 2nd post”);
scanf(“%c”,&Class);
if(Class==‘1’)
printf(“1st class postage is 19p”);
else
printf(“2nd class postage is 14p”);
}
2.若运营时输入: 4.4<回车>, 则以下程序的运营结果是Selling Price(0.30)$5.72 。
#include <stdio.h>
void main(void)
{
float CostPrice,SellingPrice;
printf(“Enter Cost Price $:”);
scanf(“%f”,&CostPrice);
if(CostPrice>=5)
{
SellingPrice=CostPrice+CostPrice*0.25;
printf(“Selling Price(0.25)$%6.2f”,SellingPrice);
}
else
{
SellingPrice=CostPrice+CostPrice*0.30;
printf(“Selling Price(0.30)$%6.2f”,SellingPrice);
}
}
3.以下程序的运营结果是F。
main()
{
if(2*2==5<2*2==4)
print(“T”);
else
printf(“F”);
}
能力提高(B)
一、选择题
1.若希望当A的值为奇数时, 表达式的值为“真”, A的值为偶数时, 表达式的值为“假”, 则
以下不能满足规定的表达式是(D)。
A)A%2==1 B)!(A%2==0) C)!(A%2) D)A%2
2.下列运算符中优先级最低的(A ), 优先级最高的是(C )。
A)?: B)&& C)+ D)!=
3.请阅读以下程序:
main()
{
int a=5,b=0,c=0;
if(a=b+c) p rintf(“***\n”);
else printf(“$$$\n”);
}
以下程序(D)。
A)有语法错不能通过编译B)可以通过编译但不能通过连接
C)输出*** D)输出$$$
4.以下程序的运营结果是(C)。
main()
{
int m=5;
if(m++>5) printf(“%d\n”,m);
else printf(“%d\n”,m--);
}
A)4 B)5 C)6 D)7
二、根据程序的功能, 将以下程序补充完整
1、以下程序对输入的四个整数, 按从小到大的顺序输出。
请在内填入对的内容。
main()
{
int t,a,b,c,d;
printf(“input a,b,c,d:”)
scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);
if(a>b) { t=a;a=b;b=t; }
if (a>c) {t=a;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(“%d,%d,%d,%d”,a,b,c,d);
}
三、编程:
1、试编程判断输入的正整数是否既是5又是7的整倍数。
若是, 则输出yes;否则输出no。
2.编制程序规定输入整数x、y和z, 若x2+y2+z2大于1000,则输出x2+y2+z2千位以上的数字, 否则输出三数之和。
3.编写程序, 输入三角型的三条边长, 求其面积。
注意: 对于不合理的边长输入要输出数据错误的提醒信息。
1.参考答案
main()
{ int x;
if (x%5==0 && x%7==0)
printf(“yes”);
else
printf(“no”);
}
2.参考答案
main()
{ int x,y,z,a,b;
scanf(“%d %d %d”,&x,&y,&z);
a=x*x+y*y*z*z;
if (a>1000)
{b=a/1000;printf(“%d”,b);}
else printf(“%d”,x+y+z);
}
3.参考答案
#include <math.h>
main()
{ float a,b,c,s,area;
scanf(“%f,%f,%f”,&a,&b,&c);
if (a+b>c && b+c>a && a+c>b)
{ s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“area=%7.2f\n”,area);}
else
printf(“bu neng zhucheng san jiao xing \n”); }
第2讲
基础练习(A)
一、填空题
1.在if语句中又包含一个或多个if语句称为if语句的嵌套。
2、为了避免在嵌套的条件语句if-else中产生二义性, C语言规定:else子句总是与其之前最近的未配对的if 配对。
假如if 与else数目不同样, 为实现设计者的企图, 可以加花括号关系。
3.条件运算符是C语言中唯一的一个三目运算符, 其结合性为从右至左。
4.假设条件表达式的格式为: 表达式1?表达式2: 表达式
若表达式2和表达式3的类型不同, 此时条件表达式的值的类型为两者中较高的类型
5.在switch语句中, switch后面括弧内的“表达式”, 可认为任何类型。
6、若a=1,b=2, 则表达式a>b?a:b+1的值是 3 。
7、若w=1.x=2、y=3、z=4, 则条件表达式w<x?w:y<z?y:z的值是 1 。
8、若有以下if 语句: if (a<b) min=a;
else min=b;
可用条件运算符来解决的等价式子为min=(a<b)?a:b ;。
9、若x=1,y=2,z=3, 则表达式(x<y?x:y)==z++的值是0 。
10、设有变量定义:int a=5,c=4;则(--a==++c)?--a:c++的值是 5 , 此时c的存储单元的值为 6 。
二、判断题
1.在switch语句中, 每一个的case常量表达式的值可以相同。
(错)
2.在switch语句中, 各个case和default的出现顺序影响执行结果。
(对)
3、在switch语句中, 多个case可以共用一组执行语句。
(对)
4. 条件表达式能取代一般if的语句。
(错)
5. case后的常量表达式类型一定与表达式类型匹配。
(对)
三、写出以下程序的运营结果
1. main() -1
{
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);
}
2. main() 2 0 0
{
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);
}
3. switch(grade)
{
case ‘A’: printf(“85-100\n”);
case ‘B’: printf(“70-84\n”);
case ‘C’: printf(“60-69\n”);
case ‘D’: printf(“<60\n”);
default: printf(“error!\n”);
}
若grade的值为’C’, 则输出结果是60-69
〈60
error!
能力提高(B)
一、写出下列程序的运营结果
1. #include <stdio.h> 5
5
1
void main(void)
{
int x,y=1,z;
if(y!=0) x=5;
printf(“\t%d\n”,x);
if(y==0) x=4;
else x=5;
printf(“\t%d\n”,x);
x=1;
if(y<0)
if(y>0) x=4;
else x=5;
printf(“\t%d\n”,x);
}
2. #include <stdio.h> 4 -2
4 0
4 -2
void main(void)
{
int x,y=-2,z;
if((z=y)<0) x=4;
else if(y==0) x=5;
else x=6;
printf(”\t%d\t%d\n”,x,z);
if(z=(y==0))
x=5;
x=4;
printf(“\t%d\t%d\n”,x,z);
if(x=z=y) x=4;
printf(“\t%d\t%d\n”,x,z);
}
3. #include <stdio.h> a=2,b=1
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);
}
二、根据程序的功能, 将以下程序补充完整
以下程序计算某年某月有几天。
其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年, 能被400整除的年也是闰年。
请在内填入对的内容。
main()
{
int yy,mm,len;
printf(“year,month=”);
scanf(“%d %d”,&yy,&mm);
switch(mm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: len=31; break;
case 4:
case 6:
case 9:
case 11: len=30; break;
case 2:
if(yy%4==0&&yy%100!=0||yy%400==0) len=29;
else len=28;
break;
default: printf(“input error”); break;
}
printf(“the length of %d %d is %d\n”,yy,mm,len);。