【答案】A
【考点解析】C语言中NULL表示空指针,指向内存地址为0的单元,内容为0。
第7章 编译预处理、结构体、共用体、位运算与文件操作
7.1编译预处理
一、选择题
【例1】(2000年4月)下列程序执行后的输出结果是( )。
#define MA(x) x*(x-1)
main()
{int a=1,b=2; printf("%d \n",MA(1+a+b));}
A. 6 B. 8
C. 10 D. 12
【答案】B
【考点解析】先进行宏展开在进行运。
MA(1+a+b)=(1+a+b)*((1+a+b)-1)=1+1+2*(1+1+2-1)=8
【例2】(2000年9月)有如下程序
#define N 2
#define M N+1
#define NUM 2*M+1
main()
{ int i;
for(i=1;i<=NUM;i++)printf("%d\n",i);
}
该程序中的for循环执行的次数是( )。
A. 5 B. 6
C. 7 D. 8
【答案】B
【命题目的】考查C语言宏定义。
【考点解析】程序先进行宏展开在进行运算,所以N的值是2,M的值是3,NUM=2*M+1= 2*N+1+1=2*2+1+1=6,所以进行了6次循环。
【例6】(2004年4月)有以下程序
#define f(x) x*x
main( )
{ int i;
i=f(4+4)/f(2+2);
printf("%d\n",i);
}
执行后输出结果是( )。
A. 28 B. 22
C. 16 D. 4
【答案】A
【考点解析】先进行宏展开再进行运算,i=4+4*4+4/2+2*2+2=28。
7.2结构体、共用体
7.3位运算
一、选择题
【例1】(2000年4月)设int b=2;表达式(b<<2)/(b>>1)的值是( )。
A. 0 B. 2
C. 4 D. 8
【答案】D
【考点解析】b用二进制形式表示为0000 0010,左移两位,0000 1000,变为8,右移一位,0000 0001,变为1,所以选D。
【例2】(2001年9月)以下程序的输出结果是( )。
main()
{ int x=0.5; char z='a';
printf("%d\n",(x&1)&&(z<'z'));
}
A. 0 B. 1
C. 2 D. 3
【答案】A
【考点解析】x为整型,所以x的值为0,x&1=0&1=0,0&&(z<’z’)=0。
【例3】(2002年4月)以下程序的输出结果是( )。
main()
{ char x=040;
printf("%o\n",x<<1);
}
A. 100 B. 80