一. 选择题(共15题,每题3分。)
(1)设有以下语句:
char a=3, b=6, c;
c = a^b<<2;
则c的二进制值是_____。
a. 00011011
b. 00010100
c. 00011100
d. 00011000
(2)表达式0x13&0x17的值是___。
a. 0x17
b. 0x13
c. 0xf8
d. 0xec
(3)表达式0xl3|0xl7的值是____。
a. 0x13
b. 0x17
c. 0xE8
d. 0xc8
(4) 以下叙述中正确的是_____。
a. 表达式a&=b等价于a=a&b
b. 表达式a|=b等价于a=a|b
c. 表达式a!=b等价于a=a!b
d. 表达式a^=b等价于a=a^b
(5) 运作对象必须是整型数的运算符是_____。
a. % b. . c. / d. **
(6) 根据以下定义,错误的表达式是_____。
struct
{
int a;
char b;
} Q, *p = &Q;
a. Q.a
b. (*p).b
c. p->a
d. *p.b
(7) 若x是单精度实型变量,表达式 x = 10/4 的值是_____ 。
a. 2.5 b. 2.0 c. 3 d. 2
(8) 表达式 !x 等价于_____。
a. x == 0 b. x == 1 c. x != 0 d. x != 1
(9) ______是合法的用户自定义标识符。
a. b-b b. float c. <fr> d. _isw
(10) 若变量已正确定义并赋值,表达式______不符合C语言语法。
a. a*b/c; b. 3.14%2 c. 2, b d. a/b/c
(11) _____是不正确的字符常量。
a. ‘n’ b. ‘1’ c. “a” d. ‘101’
(12) 在 C 程序中,用_____表示逻辑值”真”。
a. 1 b. 非 0 的数 c. 非 1 的数 d. 大于 0 的数
(13) ______把x、y定义成float类型变量,并赋同一初值3.14。
a. float x, y=3.14; b. float x, y=2*3.14;
c. float x=3.14, y=x=3.14; d. float x=y=3.14;
(14) 假设变量已正确定义,表达式______的值不是2。
a. 2&3 b. 1<<1 c. a==2 d. 1^3
(15) 若变量已正确定义,语句if(a>b) k=0; else k=1;和______等价。
a. k=(a>b)?1:0; b. k=a>b;
c. k=a<=b; d. a<=b ? 0 : 1;
二.填空题(每题5分)。
(1) &运算符作为单目运算符时表示的是____运算;作为双目运算符时表示的是_____运算。
(2) 请计算sizeof的值:
char str[] = “Hello” ;
char *p = str ;
int n = 10;
请计算
sizeof (str ) = ____
sizeof ( p ) = _____
sizeof ( n ) = ______
(3) 请计算sizeof的值:
void Func ( char str[100])
{
// 请计算
sizeof( str ) = _____
}
(4) 请计算sizeof的值:
void *p = malloc( 100 );
// 请计算
sizeof ( p ) = ______
(5) 下列程序段的输出是_______。
#define f(a, b, x) a*x+b
printf(“%d, %dn”, f(3,2,1), f(6, 5, f(3, 2, 1)));
(6) 下列程序段的输出是_____。
main()
{
int k;
for(k=1; k<5; k++)
{
if(k % 2) printf(“*”);
else continue;
printf(“#”);
}}
三.简单题(共3题,每题10分)
(1) 指出下面程序的错误并改正:
void main(void)
{int a,b;
a = 1;
b = a/++a;
printf(“b equals %dn”, b);}
(2) int a=391,b=1971; 写出 a^b^a的值。
(3) 语句:x++;?++x; x=x+1;?x=l+x; ,执行后都使变量x中的值增1,请写出一条同一功能的赋值语句。