Day03:C语言学习作业

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

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

答案:double

分析:数据计算是由低精度向高精度自动转换,所以最后变成了double类型的

char w;     int x;     float y, z;  则表达式w*x+z-y的结果为____类型。

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

答案:float

分析:数据计算是由低精度向高精度自动转换,最后变成float

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

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

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

答案:++x=++y

分析:A可以写成x=x+y;y++;C可以写成x=y;y++;D可以写成x=y;x++;y++;而B可以写成x+1=y+1,=是赋值符号,所有左边只能是个变量;

以下程序运行后输出的结果是______。

#include <stdio.h>

int main()

{

int k = 011;      

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

    return 0;

}

答案:9

分析:011是八进制,0为八进制的前缀,则k的十进制值为9,再输出时,自增符号在后,所以是先输出再自增;

请正确填写输出结果

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)29(5)52

分析:a和b都不为零,&&和||都为1,用二进制表达转换一下:a:0000 1101 b:0001 0100

则&关系为0000 0100 = 4,|关系为0001 1101 = 29,a >> 2 = 0011 0100 = 52

为了表示“a和b都不等于0”应使用( )

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

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

答案:D

分析:A和B:||关系只需要左右两边有一边满足就行;C:&&符号是对的,但是!的符号没有再整个表达式外面,只包括了a,所以错误

设 a=3,b=4,c=4,则表达式 a+b>c&&b==c&&allb+c&&b==c 的值为(    )

答案:1

分析:我们将整个试子拆开:a+b>c 结果为1,b==c结果为1,a||b+c结果为1,b==c结果为1,1 && 1 && 1 && 1结果为1 

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

答案:52

分析:a = 13 = 0000 1101,则a << 2 = 0011 0100 = 52

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

答案:3

分析:①!z = 0;②y>0 = 1;③x+1 = 3

能正确表示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和C:题目中的或者同时为可以的出中间的逻辑符号是 || 所以ABC都不对,D很经典同号为正异号为负

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

答案:2

分析:&&有个特性,当左边的为0后就不继续执行右边的式子,所以n没有被赋值,m变成0了

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

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

答案:8

分析:12 = 1100;012 = 1010;12 & 012 = 1000 = 8

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

答案:-7

分析:char字符范围为-128~127,所以153 = 1001 1001 ,先运算>> 4 = 1111 1001,存储到计算机时,识别为负数,所以是补码,读取需要-1取反,结果为1000 0111 = -7

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

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

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

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

A.0.1f                      B. 1.0e0.1       

C. 'z'                           D. '\110'

答案:B

分析:指数类型e后面只能为整数

sizeof(float)是( )。

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

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

答案:B

分析:sizeof是关键字,不是函数,用于计算float的数据长度,用int接收

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

答案:char:-2^15~2^15 - 1,int:-2^31~2^31-1

分析:char是二字节的是16位二进制数据,也就代表他的范围是-2^15~2^15 - 1, int是四字节的,是32位二进制数据,也就代表他的范围是-2^31~2^31-1

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

void foo(void)

{

    unsigned int a = 6;

    int b = -20;

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

}

答案:>6

分析:a和b运算结果一定是变成了无符号整数,所以b变成了整数存储,因为补码存储负数符号位不变,结果就是a+b的值远大与6

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

答案:0x11

分析:0x10 = 0001 0000 ,0x01 = 0000 0001,0x10 | 0x01 = 00010001 = 0x11

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

答案:0x00

分析:0x10 = 0001 0000 ,0x01 = 0000 0001,0x10 & 0x01 = 0000 0000 = 0x00

关于条件的书写

1.判断year是不是闰年   

2.判断num是偶数

3.判断num是一个三位数

4.判断字符ch是大写字母

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

答案:

1:if(year % 400 ! = 0)

2:if(num % 2 == 0)

3:if(num / 100 != 0)

4:if(ch > 'A' && ch < 'Z')

5:if(ch >= 50 && ch <= 56 && ch %2 ==0 )

分析:前面四个都很简单,最后一个偶数数字字符:字符0~9的取值范围为:48~57,2的字符为50,8的字符为56,且每个偶数字符对应的数也是偶数,所以再50~56中间的偶数就是偶数字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值