9.2 C基础习题

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

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

答案:D

解析:根据C语言自动类型转换原则,默认从低字节数据类型转换为高字节数据类型。double类型作为题目中的最高字节数据类型。则答案为D.double。

ps:以下数据类型所占字节从第到高排序,自动类型转换。

char-->short/int/long/long long/float/double

int-->long/long long/float/double

float-->double

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

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

答案:D

解析:根据第一道题原则可以总结规律为:在一个运算中,若存在double类型,最终结果一定是double类型

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

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

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

答案:B D

解析:B这种用法违反了赋值语句的基本规则,即赋值语句的左侧必须是一个可以存储值的左值,而右侧是一个表达式。

A选项 x+=y++运算结果展开为:x=x+y++

C选项x=++y右侧为一个表达式,左侧为可以存储的数值,先将y+1后赋值给x。符合赋值语句基本原则

D.
 

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

#include <stdio.h>

int main()

{

int k = 011;      

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

    return 0;

}

答案:9

解析:根据题目中定义的变量int k= 011,0为开头判断其为八进制数。(11)O=(9)D之后。输出k值为9后K再加1,未影响输出结果。

PS:进制的表示方法分为前缀法和后缀法。

后缀法:在数字后面标写大写字母表示。D为十进制B为二进制O为八进制H为十六进制但因其易使计算机识别错误,较为少用。

前缀法:二进制:0b开头 八进制0开头 十六进制0x开头 十进制无前缀

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)____1____(2)__4__(3)____1____(4)____31____(5)___3_____

解析:

①&&为逻辑与,其判断双方是否都非零,非零则为真等于1反之为0。全真为真(全1为1)遇假则假(遇0则0)a=15非零,b=20非零。所以为1。

②&作位与运算。将a=15化为二进制得:0000 1111 将b=20化为二进制得:0001 0100 两者作与运算全1为1。得答案为0000 0100。化为十进制为4。

③||为逻辑或运算 检查等式两边是否至少有一个非零。非零为1故答案为1。

④|为位或运算。将a,b二进制作或运算,有1为1。得0001 1111 故十进制为31。

⑤>>为右移运算符。将a得二进制值 0000 1111向右移动两位得0000 0011。故十进制为3。

总结:要分清何为逻辑运算符,何为位运算符。如果是位运算符则需要化为二进制进行考虑。如果是逻辑运算符则只考虑非零情况的真和假仅判断真假。

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

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

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

答案:D

解析:D ab都不为零是,D选项为真符合题意

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

答案:1

解析:在C语言中,逻辑运算符 &&(逻辑与)的优先级高于 ||(逻辑或)。同时,算术运算符(如 +)的优先级高于逻辑运算符。按照顺序判断逻辑运算符两端是否非零。

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

答案:52

解析:0000 1011  左移两位得 0011 0100

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

答案:3

解析:!z为0,y>0得1,x+1得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

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

答案:0

解析:m=a>b 已经为0.逻辑与运算直接为0。

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

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

答案:B

解析:12为十进制得二进制0000 1100

            012为八进制转化为二进制0000 1010

            作与运算得0000 1000 为十进制8

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

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

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

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

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

A.0.1f                            B. 1.0e0.1       

C. 'z'                              D. '\110'

答案:B

解析:科学记数法中,基数(这里是1.0)后面应该直接跟着指数(用e或E表示),而指数必须是一个整数。0.1不是一个整数,因此这个常量是非法的。

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

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

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

答案:B

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

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

void foo(void)

{

    unsigned int a = 6;

    int b = -20;

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

}

答案:char的范围是-128-127

           int的范围是-2^31-2^31-1

           程序输出结果为>6

解析:运算中既有无符号数又有有符号数默认将有符号数转为无符号数进行计算。计算机中减法将转为补码进行计算。原先的符号位变成了值位所以相加>6.。

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

答案:0x11

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

答案:0x00

19.关于条件的书写

判断year是不是闰年  

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

判断num是偶数

if( num%2==0 )

判断num是一个三位数

if( num<1000&&num>=100)

判断字符ch是大写字母

if(  ch>='A'&&ch<='Z  )

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

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值