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