}
A)ABCDEFGHIJKL B)ABCD
C)ABCDEFGHIJKLMNOP D)AEIM
答案:C
评析:alpha[O]指向“ABCD”的首地址;alpha[1]指向“EFGH”的首地址;alpha[2]指向“IJKL”的首地址,依此类推。当执行p=alpha后,p指向指针数组alpha的首地址。for循环中输出了4个字符串。
(38)下面程序的输出结果是_________。
#include
main()
{ char*p[]={”B00L”,”0PK”,”H”,”SP”};
int i:
for(i=3;i>=0;i–,i–)
printf(“%c”,*p[i]);
printf(”\n”);
}
A)SO B)SP C)SPOPK D)SHOB
答案:A
评析:p[0]存放的是“BOOL\0”的首地址;p[1]存放的是“OPK\0”的首址等。
在printf语句中输出的+p[I]表示p[i]字符串的第一个字符。在for循环中,i的初值为3,那么输出的第一个字符为“s”,接着两次i–,则输出的值为+p[1],即字符“0”,所以本题的输出为SO。
(39)以下程序的输出结果是_________。
#include
void prt(int*x,int*y,int*z)
{ printf(”%d,%d,%d\n”,++*x,++*y*(z++));}
int a=10,b=40,c=20;
main()
{ prt(&a,&b&C);
prt(&a,&b,&C);
}
A)ll,42,3l B)ll,41,20 C)1l,21,40 D)11,41,2l
12,22,41 12,42,20 11,2l,41 12,42,22
答案:B
评析:由于实参传送的是变量的地址,所以对形参指针所指向的单元内容的改变,即对实参内容的改变。
(40)若一个外部变量的定义形式为static int x;,那么,其中static的作用应该是_______。
A)将变量存储在静态存储区
B)使变量x可以由系统自动初始化
C)使x只能在本文件内引用
D)使x的值可以永久保留
答案:C
评析:事实上,无论有无static修饰,外部变量都具有A、B和c三种特性。作为一种修饰,static仅是限制此类型外部变量的引用范围:只能在定义它的文件范围内使用。
(41)以下程序的输出结果是________。
#include
#define SQR(x)x*x
main()
{ int a,k=3;
a=++SQR(k+1);
printf(”%d\n”,a);
}
A)8 B)9 C)17 D)20
答案:B
评析:本题宏替换中遇到形参x以实参k+l代替,其它字符不变。sQR(k+1)展开后应为字符串k+l*k+l。
(42)下面是对宏定义的描述,不正确的是_______。
A)宏不存在类型问题,宏名无类型,它的参数也无类型
B)宏替换不占用运行时间
C)宏替换时先求出实参表达式的值,然后代入形参运算求值
D)宏替换只不过是字符替代而已
答案:C
评析:宏替换实质上就是字符替代,它不可能进行计算,故c错误。带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。
(43)以下程序(程序左边的数字为附加的行号)________。
1#include
2#include
3main()
4{char s[]=”string”;
5 puts(s);
6 strcpy(s,”hello”);
7 printf(”%3s\n”,s);}