一些简单C语言练习

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

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

答案:D

分析:表达式w*x-y中,因为y是double型数据,范围为8字节,而char为1字节,int为4字节,所以整个表达式的数据类型也为double型数据。

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

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

答案:A

分析:表达式w*x+z-y中,因为y和z参与运算,且为float型数据,所以整个表达式的数据类型为float型数据。

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

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

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

答案:B、D

分析:首先在C语言中,“=”表示赋值运算符,作用是将右边表达式的值赋值给左边的变量,即左边只能是定义的一个变量,而不能是一个表达式。所以在A、B、C、D中,B、D赋值就不正确。A中的“+=”是复合赋值运算符,其作用与“=”基本一样。

4.以下程序运行后输出的结果是______。(电工时代)

#include <stdio.h>

int main()

{

int k = 011;

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

    return 0;

}

答案:9

分析:int k=011中,int是整形数据,0开头是八进制的标识,所以k=011转换成十进制是k=9,因为是在输出之前对k进行了自增操作,printf会打印变量k当前的值9。

5.请正确填写输出结果。(恩易物联2)

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)________(2)_________(3)________(4)________(5)________

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

分析:a && b;因为a=15,不为0,所以为真;b=20,不为0,也为真;都为真,所以a && b为真,即为1。        a & b;此运算需要用到a、b的二进制,其二进制如下表,因为全1为1,有0为0,所以结果为4。        a || b;因为a=15,不为0,所以为真;b=20,不为0,也为真;有也1个为真,所以a || b为真,即为1。        a | b;此运算需要用到a、b的二进制,其二进制如下表,因为有1为1,全0为0,所以结果为31。        a >> 2;a的二进制向右移动两位,高位补0,所以其结果如下表所示为3。

6432168421
a0001111
b0010100
a & b0000100
a | b0011111
a >> 20000011

6.为了表示“a和b都不等于0”应使用( )。(山东丁一)

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

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

答案:D

分析:A、B,“||”是逻辑或,只要有一个为真就为真,所以排除A、B。C,((a==0)&&(b==0)),这里面的结果是a等于0,b等于0,整体的结果为0,所以!((a==0)&&(b==0))的结果为1。D,a&&b,a,b都不等于0时结果为真,所以D正确。

7.设 a=3,b=4,c=4,则表达式 a+b>c&&b==c&&allb+c&&b==c 的值为(    )。(易购软件)

答案:1

分析:a+b>c,3+4>4,结果为真;b==c,4=4,结果为真;所以a+b>c&&b==c的结果为真。        a,a=3,结果为真;所以a+b>c&&b==c&&a的结果为真。        b+c,4+4=8,结果为真;所以a+b>c&&b==c&&allb+c的结果为真。        b==c,4=4,结果为真; 所以a+b>c&&b==c&&allb+c&&b==c的结果为真,即1。

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

答案:20

分析:a=13的二进制如下,a向左移动2位,所以结果为20。

168421
a01101
a<<210100

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

答案:3

分析:z=4为真,!z为假为0,y>!z是3>0为真为1,所以x + (y > !z)等于2+1等于3,所以结果为3。

10.能正确表示a和b同时为正或同时为负的逻辑表达式是:( ) (宇视科技,紫光云数,新华三,石峰)

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

答案:D

分析:a和b同时为正或同时为负,逻辑或应该用“||”,所以A,B,C都不对;D,两数之积大于0,说明两个数同号,即a和b同时为正或同时为负。

11.int a=1, b=2, c=3, d=4, m=2, n=2; 执行 (m=a>b) && (n=c>d) 后,n=________(杭州快越科技)

答案:2

分析:表达式 (m=a>b)的结果为假,因为1(赋值给a)大于2(赋值给b)的条件不成立,所以 (m=a>b)的结果为0。由于逻辑与操作符的短路特性,表达式(n=c>d)不会被执行。因此,变量n的值保持不变,仍然为2。

12.语句 printf("%d \n", 12 & 012); 的输出结果是:( ) (紫光云数,新华三,石峰)

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

答案:8

分析:位与运算符,用二进制计算,有0为,全1为1,所以12 & 012的结果为8。

32168421
12001100
012001010
12 & 012001000

13.有如下代码char cTwoLength = 153;那么 print("\r\n %d", cTwoLength >> 4)打印的值为 ________ (紫光云数)

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

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

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

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

答案:-7

分析:char cTwoLength = 153;char为有符号型字符数据,取值范围为[-128,127],153大于127,越界了,其结果应为-103,153二进制如下为10011001,向右移动4位为11111001,正数的原码反码补码都一样,所以读取到的为补码11111001,所以原码为10000111,所以结果为-7。

1286432168421
原码10011001
>>411111001
反码11111000
原码10000111

14.以下所列的C语言常量中,错误的是: (华三外协,紫光云数,新华三,石峰)

A.0.1f   B. 1.0e0.1

C. 'z' D. '\110'

答案:B

分析:在C语言中,科学计数法的指数部分应该为整数,B中的指数为0.1,所以B错。

15.sizeof(float)是( )。(山东丁一)

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

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

答案:B

分析:sizeof用于计算特定类型或对象所占用的内存字节数,并返回一个整型值。所以sizeof(float)是一个整型表达式,与float无关,只是计算float所占用的内存字节数。

16.一个32位的机器,一个 char 代表的范围是?一个 int 代表的范围是?(广域科技)

答案:[2^(-7) 2^7-1]        [2^(-31)  2^31-1]

分析:char占用1字节,1字节等于8比特,即char代表的范围为[2^(-7) 2^7-1]。        int占用4字节,即32比特,所以int代表的范围是[2^(-31)  2^31-1]。

17.下面的代码输出是什么,为什么? (信雅达)

void foo(void)

{

    unsigned int a = 6;

    int b = -20;

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

}

答案:>6

分析:unsigned int a = 6;a为无符号整型;int b = -20;b为有符号整型。所以a+b时,把int b=-20自动转换成无符号整型数,即b在计算时应为2^32-21,所以a+b> 6为真。(a+b > 6) ? puts(">6") : puts("<=6");是三目运算符,即表达式1?表达式2:表达式3;意思是表达式1为真是,输出为表达式2,表达式1为假时,输出为表达式3;所以输出>6。

18.按位或运算符(|) (深圳元征信息科技)  0x10 | 0x01 = ? 十六进制的结果是多少?

答案:0x11

分析:按位或运算符(|),有1为1,全0为0;0x10 | 0x01两个数都为十六进制;所以结果为:

        0x10

    |   0x01

        0x11

19.按位与运算符(&) (深圳元征信息科技)  0x10 & 0x01 = ? 十六进制的结果是多少?

答案:0x00

分析:按位与运算符(&),有0为0,全1为1;0x10 & 0x01两个数都为十六进制;所以结果为:        0x10

           &  0x01

                0x00

20.关于条件的书写

判断year是不是闰年

if(                     )

判断num是偶数

if(                     )

判断num是一个三位数

if(                     )

判断字符ch是大写字母

if(                     )

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

if(                     )

答案:

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

        num % 2 == 0

        num >= 100 && num <= 999

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

        (ch >= '0' && ch <= '9') && ((ch -'0')% 2 == 0)

分析:

        判断一个年份是否为闰年的条件是:该年份能被4整除且不能被100整除,或者能被400整除。

        ‌判断一个数是否为偶数,可以通过检查该数除以2的余数是否为0来实现。

        判断num是一个三位数,判断这个数大于等于100,小于等于999。

        判断字符ch是大写字母,判断字符大于等于'A',小于等于'Z'。

        判断字符ch是偶数数字字符,判断字符大于'0',小于等于'9',且除以2的余数等于0。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值