易错C语言选择题

1.void main()

{int a=2,b=5;

printf("a=%%d,b=%%d\n"); 

}

结果为:()

A. a=%2,b=%5               B. a=2,b=5

C. a=%%d,b=%%d        D. a=%d,b=%d

答案:D

2.若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是(  )

A)p=q        B)*p=*q     C)n=*q      D)p=n

答案:D

3.下面表达式不能访问二维数组b的第i行第j列元素的是()

A. b[i][j]    B. *(b[i]+j)

C. *(*b+i)+j)    D. (*(b+i))[j]

答案:C

【解析】:数组名 b 在表达式中也会被转换为指针。

  • A选项b[i][j]:通过下标的方式,所以A正确
  • B选项*(b[i]+j) :b[i]相当于二维数组的i行,加上j,就相当于i行j列,然后取地址。所以B正确
  • C选项*(*b+i)+j):数组名b相当于指针,*b+i为b[0][i],取地址加j相当于b[j][i]所以C错误
  • D选项(*(b+i))[j]:b+i为第i行地址,在使用*表示第i行首元素内容合并[j]下标,即b[i][j],所以D正确

4.按C语言的规定,以下不正确的说法是       

A)实参可以是常量、变量或表达式     B)形参可以是常量、变量或表达式

C)实参可以为任意类型        D)形参应与其对应的实参类型一致

答案:B

【解析】:形参不能是表达式

5.要使a的低四位翻转,需要进行操作是()

A. a|0xF    B. a&0xF    C. a^0xF    D. ~a

答案:C

【解析】:0x开头为16进制,0xf对应的二进制数为1111。

^为异或操作,若参加运算的两个二进制位值相同则为0,否则为1;

a与0xf做异或操作,可以实现低四位的翻转。

如果是| 按位或 ,则将低四位数全变成1.
如果是& 按位与,则结果不变。

其他的位运算符号:

& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值