C语言练习题--数据类型、运算符

1.设有说明:char w; int x; double y; 则表达式w*x-y 值的数据类型为( D )。

A. float    B. char     C. int     D. double

C语言类型转换中声明了自动类型转换,由低字节转换到高字节;这其中在一个运算中,若存在double类型,那么最终结果一定是double类型的,因为double是双精度浮点数,占8个字节,是数据类型中占字节数最高之一。

2.若有以下类型说明(  A  ) char w;  int x;  float y, z;  则表达式w*x+z-y的结果为____类型。

A.float         B.char          C.int            D.double

 分析思路与第一题相同,自动类型转换是低字节转换成高字节。如题变量w是char类型,只占一个字节;x是int类型,占四个字节;当与float类型进行运算时,最终结果就会是float类型

3.假定下列 x 和 y 均为 int 型变量,则不正确的赋值为(BD );

A. x+=y++                 B. ++x=++y

C. x=++y                   D. x++=y++

4.以下程序运行后输出的结果是____9__。

#include <stdio.h>

int main()

{

int k = 011;      

printf("%d\n", k++);

    return 0;

}

 分析:1. 变量k前导符是0,所以是一个八进制数,将八进制数转换成十进制数是9;

2.输出是k++,变量后的自增符是先赋值再自增,所以输出结果为9;

5.请正确填写输出结果。

int main()

{

    int a = 15;

    int b = 20;

    int c;

    a && b = ? (1)

    a & b = ? (2)

    a || b ? (3)

    a | b = ? (4)

    a >> 2 = ? (5)

}

 答:(1)1(2)4  (3)1  (4)31 (5)3

 分析:1.&&是逻辑与符号,因为a与b都不是0,所以运算结果为1(真);

2.&是按位与运算符,使a和b的二进制数每一位进行与操作,只有a、b对应位皆是1,与操作值才是1;

a  0 0 0 0 1 1 1 1

b  0 0 0 1 0 1 0 0 --> 00000100-->4

3.||是逻辑或符号,因为a、b都不是0,所以运算结果为1;

4.|是按位或运算符,使a和b的二进制数每一位进行或操作,只要有一方位为1,或操作就为1

a  0 0 0 0 1 1 1 1

b  0 0 0 1 0 1 0 0 -->00011111-->31

5.>>是右移运算符;a 0 0 0 0 1 1 1 1 >> 2 -->00000011-->3

6.为了表示“a和b都不等于0”应使用(C D)。

A. (a!=0) || (b!=0)                   B. allb

C. !((a==0)&&(b==0))              D. a&&b

 选项c是a=0和b=0的取反即为”a和b都不等于0“;

 逻辑与成立a和b都不能为0;

7.设 a=3,b=4,c=4,则表达式 a+b>c&&b==c&&a ll b+c&&b==c 的值为( 1 )。 

 分部分析:1.a=3,b=4,a+b=7>4;所以a+b>c结果为1(真);

2.b和c都是4,所以b==c结果为1(真);a+b>c&&b==c 》》1&&1结果也为1(真)

3.||运算符优先级低于&&,所以先计算b+c&&b==c;b+c=8&&b==c》1,所以8&&1结果为1(真)

4.||运算符左右都为真,则整个式子为1(真)

8.已知 a = 13, a << 2的十进制数值为 (    )。 

答:52-->100110

a 00001011<<2--> 00110100-->52

9.int x = 2, y = 3, z = 4; 则表达式 x + (y > !z)的值为( )。 

答: 3

先看括号里的内容,y=3,z=4,y>!z式子成立,结果为1;x+(y>!z)=2+1=3;

10.能正确表示a和b同时为正或同时为负的逻辑表达式是:( D

A. (a >= 0 ll b >= 0) && (a < 0 ll b < 0)

B. (a>=0 && b>=0) && ( a < 0 && b < 0)

C. (a + b > 0) && (a + b <= 0)

D. a * b > 0

A是a大于0或b大于0和a小于0或b小于0;

B是a和b都大于0并且都小于0,矛盾;

C无法保证a和b符号相同;

11.int a=1, b=2, c=3, d=4, m=2, n=2; 执行 (m=a>b) && (n=c>d) 后,n=___2____

 因为a=1,b=2,所以a>b结果为0(假),那么&&符号右侧为0(假),则整个式子停止运算,那么n=2;

12.语句 printf("%d \n", 12 & 012); 的输出结果是:( B

A. 12       B. 8                   C. 6                   D. 012

12    0 0 0 0 1 1 0 0

012  0 0 0 0 1 0 1 0

&按位与运算符,上下都为1才为1,所以最后结果为00001000 ==> 8

13.有如下代码char cTwoLength = 153;那么 print("\r\n %d", cTwoLength >> 4)打印的值为 __-7____ 

提示:char是有符号字符型,取值范围[-128 , +127]153属于最大值越界,结果是-103,然后对-103进行右移4位的计算输出。右移规则:

- 对于无符号整数,左侧补0

- 对于有符号整数,如果原数是正数,则在左侧补0;如果原数是负数,则在左侧补1

此时获得数值为补码,还需要在进行转换成原码。

提示到这里,你试试计算一下吧,一定要理解清楚原理啊 

-103  1 1 1 1 1 0 0 1

         1 1 1 1 1 0 0 0

         1 0 0 0 0 1 1 1-->-7 

14.以下所列的C语言常量中,错误的是:B

A.0.1f                        B. 1.0e0.1       

C. 'z'                          D. '\110'

指数常量e后边跟一个整数(可以是负数也可以是正数)

15.sizeof(float)是( A B)。

A. 一个双精度型表法式      B. 一个整型表达式

C. 一个函数调用            D. 一个不合法的表达式

 分析:sizeof返回值是数据类型所占字节数,是一个整数,因此这是一个整型表达式。

16.一个32位的机器,一个 char 代表的范围是?一个 int 代表的范围是?

答:(-128,127);(-2^31-1,2^31-1) 

17.下面的代码输出是什么,为什么? 

void foo(void)

{

    unsigned int a = 6;

    int b = -20;

    (a+b > 6) ? puts(">6") : puts("<=6");

}

答:>6;因为运算中既有有符号数又有无符号数,默认会把有符号int转换成无符号int,因此a+b>6;

18.按位或运算符(|) 0x10 | 0x01 = ? 十六进制的结果是多少?

0x10 0 0 0 1 0 0 0 0

0x01 0 0 0 0 0 0 0 1-->0x11

19.按位与运算符(&) 0x10 & 0x01 = ? 十六进制的结果是多少?

答:0x0

20.关于条件的书写

判断year是不是闰年  

if(                    )

(year % 4 == 0 && year % 100 != 0) || year % 400 == 0

判断num是偶数

if(                     )

num % 2 == 0

判断num是一个三位数

if(                     )

num >= 100 && num <= 999

判断字符ch是大写字母

if(                     )

ch > 'A' && ch < 'Z'

判断字符ch是偶数数字字符

if(                     )

ch >= '0' && ch <= '9' && (ch == '0' || ch == '2' || ch == '4' || ch == '6' || ch == '8')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值