• 沒有找到結果。

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..5E­3  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=1­ae­1  B.double b=1+5e2.5  C.long ao=0xfdal  D.float 2_and=1­e­3 

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%=(x­k%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",c2­c1,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)&&(c­a)  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)&&(y­z)  __________ 

(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 说:我没有偷。

现要求根据这四个人的回答,写出能确定谁是小偷的条件。

相關文件