习题 4
4.1 单选题
1.在C语言程序中,用( )表示逻辑值“真”。
A.1
B.非0的数
C.非1的数
D.大于 0 的数
2.在 C 语言程序中,做逻辑运算时判断操作数真、假的表述中,下列哪一个是正确的( )。
A.0为假,非0为真
B.只有1为真
C.-1为假,1为真
D.0为真,非0为假
3.表达式!(x>0||y>0) 等价于( )。
A.!x>0||!y>0
B.!(x>0) ||!(y>0)
C.!x>0&&!y>0
D.!(x>0)&&!(y>0)
4.判断整型变量x、y中有且只有1个值为0的表达式为( )。
A.!(x*y) && (x+y)
B.(x*y)&&x+y
C.x*y==0
D.x==0&&y!=0
5.下列条件语句中,功能与其他语句不同的是( )。
A. if(a) printf("%d\n",x); else printf("%d\n",y);
B. if(a==0) printf("%d\n",y); else printf("%d\n",x);
C.if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D.if(a==0) printf("%d\n",x); else printf("%d\n",y);
6.以下程序段中与语句“k=a>b?(b>c?1:0):0;”功能等价的是( )。
7.以下程序执行后输出的结果是( )。
#include"stdio.h" main() {int i=1,j=1,k=2; if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k); }
A.1,1,2
B.2,2,1
C.2,2,2
D.2,2,3
8.下列各语句序列中,能够将变量u和s中的较大值赋值到变量t中的是( )。
A.if(u>s)t=u ; t=s;
B.t=s ; if(u>s)t=u;
C.if(u>s)t=s ; else t=u;
D.t=u ; if(u>s)t=s;
9.以下程序执行后的输出结果是( )。
#include"stdio.h" main() {int k=1,s=0; switch(k){ case 1:s+=10; case 2:s+=20;break; default:s+=3; } printf("%d\n",s); }
A.10
B.30
C.20
D.23
10.以下程序执行后的输出结果是( )。
#include"stdio.h" main() {int a=5,b=4,c=3,d=2; if(a>b>c) printf("%d\n",d); else if((c-1>=d)==1) printf("%d\n",d+1); else printf("%d\n",d+2); }
A.2
B.3
C.4
D.编译时有错误,无结果
11.以下程序执行后的输出结果是( )。
#include"stdio.h" main() {char x='A'; x=(x>='A'&&x<='Z')?(x+32):x; printf("%c\n",x);}
A.A
B.a C.z
D.Z
12.下列程序段执行后,变量k、x、y、z值依次为( )。
int k,x,y,z; x=y=z=1; k=x++&&y++||z++;
A.1、2、2、1
B.1、2、2、2
C.0、2、2、1
D.0、2、2、2
4.2 填空题
1.设x=-1,则表达式1<x<5的值是__________。
2.将下列条件写成C语言的逻辑表达式。
(1)a或b中有一个大于零:__________。
(2)x大于零,并且x小于等于10:__________。
(3)a、b和c同时等于1.5:__________。
(4)p小于a或p小于b或p小于c:__________。
3.写出下列各逻辑表达式的值,设int a=3,b=6,c=8。
(1)a+b>c &&b==c:__________。
(2)a||b+c && b-c:__________。
(3)!(a>b)&& ! c||1:__________。
(4)!(x=a)&&(y=b)&& 1:__________。
(5)!(a+b)-c && b+c/2:__________。
4.将变量a、b、c中的较大者赋给变量max的条件表达式为__________。
5.下列程序执行后的输出结果是__________。
#include"stdio.h" main() { int n=0,m=1,x=2; if(!n)x-=1; if(m)x-=2; if(x)x-=3; printf("%d\n",x); }
6.以下程序执行后的输出结果是__________。
#include"stdio.h" main() {int p,a=5; if(p=a!=0) printf("%d\n",p); else printf("%d\n",p+2); }
7.以下程序执行后的输出结果是__________。
#include"stdio.h" main() {int a=4,b=3,c=5,t=0; if(a<b)t=a;a=b;b=t; if(a<c)t=a;a=c;c=t; printf("%d,%d,%d\n",a,b,c); }
8.下列程序用于计算一元二次方程 ax2+bx+c=0 的根,程序中有不完整的地方,请在下划线处填写适当的语句或表达式以实现程序的功能。
#include"stdio.h" #include"math.h" main() { double a,b,c,t,disc,twoa,root1,root2; printf("Enter a,b,c:"); scanf("%lf,%lf,%lf",&a,&b,&c); if [1] if [2] printf("No answer because of input error\n"); else printf("The single root is %f\n",c/b); else {disc=b*b-4*a*c; twoa=2*a; root1=-b/twoa; t=abs(disc); root2=sqrt(t)/twoa; if [3] printf("Complex roots\n real part=%f image part=%f\n",root1,root2); else printf("Real roots\n root1=%f root2=%f\n",root1+root2,root1-root2); } }
4.3 编程题
1.输入3个实型数值a、b、c,如果能用它们作为三角形的3条边形成一个三角形,则输出三角形的面积,并画出实现该算法的N-S流程图并编程实现。
2.输入整数x、y,若x2+y2>1000,则输出x2+y2百位以上的数字,否则输出两数之和。
3.输入一个整数,判断它能否同时被3、5、7整除,并输出“yes”或“no”字样。
4.对任意输入的x,用下式计算并输出y的值。
5.编写程序输入一个5位整数,判断它是不是回文数。回文数是指一个数从右到左和从左到右的对应数码相同,如12321是回文数,个位与万位相同,十位与千位相同。
6.编写程序用于计算某运输公司的运费。设每公里每吨货物的基本运费为p,货物重量为w,路程为s(单位为km),折扣为d,总费用计算公式为:f=p*w*s*(1-d)
运费计算标准见表4.5。
表4.5 某运输公司运费计算标准