float x;
int i;
x=3.6;
i=(int)x;
printf("x=%f,i=%d\n",x,i);
return 0;
}
程序运行结果如下:
x=3.600000,i=3
注意:语句 i=(int)x 把 x 强制转换后赋给 i,而 x 本身的类型并不改变。
【例 2.34】 设 x=2.5,a=7,y=4.7,算术表达式 x+a%3*(int)(x+y)%2/4 的结果为( ) 。 A.2.5 B.7 C.4.7 D.2.75
解析:取模运算只能在整数之间进行,a 为整型变量,因为%、*、/这三个运算符的优先 级别相同,而类型强制转换符优于*、/运算符,a 的值为 7,7%3=1,又因为(int)(2.5+4.7)=7,
1*7=7,7%2=1,1/4=0,所以表达式 x+a%3*(int)(x+y)%2/4=x+0=2.5。答案为 A。
习 题
一、选择题
1.在 C 语言中,正确的 int 类型的常数是( )。
A.2U B.059 C.3a D.0xaf 2.下列数据中,为字符的是( )。
A.'AB' B."A" C.HOW D.'A'+2 3.若有以下定义和语句:
int u=010,v=0x10,w=10;
printf("%d,%d,%d\n",u,v,w);
则输出结果是( )。
A.8,16,10 B.10,10,10 C.8,8,10 D.8,10,10 4.以下符合 C 语言语法的浮点型常量是( )。
A.1.2E0.5 B.3.14.159E C..5E3 D.E15 5.下列用户定义的标识符不符合规定的是( )。
A.f2_g3 B.For C.5n D._n6 6.下列标识符中是 C 语言的保留字是( ) 。
A.Int B.FLOAT C.double D.Char 7.下列变量定义正确的是( ) 。
A.int x_1;y; B.int x=y=5; C.int for=4; D.printf=2,x_y=2;
8.下列变量定义中合法的是( ) 。
A.short _a=1ae1 B.double b=1+5e2.5 C.long ao=0xfdal D.float 2_and=1e3
9. 设 x、 y、 z 和 k 都是 int 型变量, 则执行表达式 x=(y=52,z=26,k=32)后, x 的值为 ( ) 。
A.4 B.26 C.32 D.52
10.下列算术运算符中,只能用于整型数据的是( ) 。
A. B.+ C./ D.%
11.若 a 为 int 类型,且其值为 3,则执行完表达式 a += a = a*a 后,a 的值是( ) 。
A.3 B.9 C.–12 D.6
12.设有如下变量定义:
int i=8,k,a,b;
unsigned long w=5;
double x=1,y=5.2;
则符合 C 语言语法的表达式是( ) 。
A.a+=a=(b=4)*(a=3) B.x%(3) C.a=a*3=2 D.y=int(i)
13.假设有以下变量定义:int k=7,x=12;,则能使值为 3 的表达式是( ) 。 A.x%=(k%=5) B.x%=(xk%5)
C.x%=k+k%5 D.(k%=5)–(x%=k) 14.以下程序的输出结果是( ) 。
main() {
int a=10,b=10;
printf("%d %d\n",a,++b);
return 0;
}
A.10 11 B.11 13 C.9 11 D.11 12 15.若已定义 x 和 y 为 double 类型,则表达式 x=1,y=x+3/2 的值为( ) 。
A.1.0 B.1.5 C.2.0 D.2.5 16.若有如下定义和语句:
char c1='a',c2='f';
printf("%d,%c\n",c2c1,c2'a'+'B');
则输出结果是( ) 。 A.2,M
B.5,G C.2,E
D.输出项与对应的格式控制符不一致,输出结果不确定
17.设 x、y、t 均为 int 型变量,则执行语句:x=y=3; t = ++x || ++y;后,y 的值为( ) 。
A.不定值 B.4 C.3 D.1
18.设 a、b、c、d、m、n 均为 int 型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻 辑表达式(m = a > b) && (n = c > d) 运算后,n 的值是( ) 。
A.0 B.1 C.2 D.3
19.语句 printf("%d",(a=3)&&(b=3));的输出结果为( ) 。
A.无输出 B.不确定 C.1 D.1
20.当 c 值不为 0 时,在下列选项中能正确将 c 的值赋给变量 a、b 的是( ) 。 A.c=b=a B.(a=c)||(b=c) C.(a=c)&&(b=c) D.a=c=b
21.设 int x=2,y=1;,表达式(!x||y)的值是( ) 。
A.2 B.1 C.2 D.1
22.下面程序的输出结果是( ) 。
#include"stdio.h"
main() {
int a=1,b=4,k;
k=(a++<=0)&&(!(b<=0));
printf("%d %d %d",k,a,b);
return 0;
}
A.0 0 3 B.0 1 2 C.1 0 3 D.1 1 2
23.设二进制数 x 的值是 00110101,若想通过 x&y 运算使 x 中的低 4 位不变,高 4 位清 零,则以下能实现此功能的是( ) 。
A.x=x|0x0f B.x=x&0x0f C.x=x|0xf0 D.x=x&0xf0 24.设有以下语句:
char a=3,b=6,c;
c=a Ù b<<2;
则 C 的二进制值是( ) 。
A.00011011 B.00010100 C.00011100 D.00011000 25.若有定义“int a=2,b=3,c=4;”则值为 0 的表达式是( )。
A.a||(b+b)&&(ca) B.(a<b)&&!c||1 C.a&&b D.(!a==1)&&(!b==0)
26.设有定义“int k=1,m=2;float f=7;” ,以下选项中错误的表达式是( )。 A.k=k>=k; B.k+f C.k%int(f) D.k>=f>=m
27. 设有定义 “int x=10,y=3,z;” , 则语句 “printf("%d",z=(x%y,x/y));” 的输出结果为 ( )。
A.3 B.0 C.4 D.1 28.设有说明语句“char c='\101';” ,则变量 c( )。
A.包含 1 个字符 B.包含 2 个字符 C.包含 3 个字符 D.说明不合法 二、填空题
1.一个 C 程序由若干函数构成,其中必须有一个__________。
2.一个语句中至少应该包含一个__________。
3.若采用十进制数的表示形式,则 077 可表示为__________,0111 可表示为__________,
0x29 可表示为__________,0xab 可表示为__________。
4.表达式 5%(3)的值是__________,表达式5%(3)的值是__________。
5.执行下列语句后,z 的值是__________。
int x=4,y=25,z=2;
z=(y/++x)*z;
6.设 x、y、z 均为 int 型变量,且 x=3,y=4,z=5,请写出下面每个表达式对应的结果。
(1)(x&&y)==(x||z) __________
(2)!(x>y)+(y!=z)||(x+y)&&(yz) __________
(3)x++y+(++z) __________
7.设 a=3,b=2,c=1,则 a>b 的值为__________,a>b>c 的值为__________。
8.设有变量定义“int i=5,j=4;”则条件表达式(i==j++)?i:++j 的值为__________。
9.执行下列语句后,a 的值为__________,b 的值为__________,c 的值为__________。
int x=10,y=9;
int a,b,c;
a=(x==y++)?x:++y;
b=x++;
c=y;
10.已知:int i,j,k;
i=j=k=3;
求下列表达式的结果。
(1)~i|i&j
(2)i Ù =j Ù =i
(3)j*k>>2&i
11.有以下程序段,执行后的结果为__________。
int a=2,b=2;
a+=a*=a;
b+=b*=b+b;
printf("%d,%d",a,b);
12.有以下程序段,执行后的结果为__________。
int a=2,b=3,c=4;
printf("%d,%d",a>0,a<0);
printf("%d,%d",c>b>a,c<b<a);
13.有以下程序段,执行后的结果为__________。
int i=1,j=2,k=3,m;
m=i++==1&&(++j==3||k++==3);
printf("%d,%d,%d,%d",i,j,k,m);
14.有以下程序段,执行后 k 的值为__________。
int k=0,a=1,b=2,c=3;
k=a<b?b:a;
k=k>c?c:k;
15.定义“int x=10,y=5,z;” ,则语句“printf("%d", z=(x+=y,x/y));”的输出结果为__________。
16.有以下程序段,执行后的结果为__________。
{ int x=50,y=5,z=5;
x=y==z;printf("%d\n",x); { int x,y,z;
x=y=2;
5.写出下列程序的输出结果。
main() { int x,y,z;
x=y=z=0;
五、解答题
已知 A,B,C,D 四人中有一个人是小偷,并且,这四个人中每个人要么说真话,要么 说假话。在审讯过程中,这四个人分别回答如下:
A 说:B 没有偷,是 D 偷的。
B 说:我没有偷,是 C 偷的。
C 说:A 没有偷,是 B 偷的。
D 说:我没有偷。
现要求根据这四个人的回答,写出能确定谁是小偷的条件。