(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);}
A)没有错 B)第l行有错 C)第6行有错 D)第7行有错 答案:B
评析:字符串复制函数strcpy包含在头文件string.h中,因此,程序中的第l行文件包含命令是错误的。
(44)若有如下说明,则__________的叙述是正确的。
struct st
{ int a;
int b[2l; }a;
A)结构体变量a与结构体成员a同名,定义是非法的
B)程序只在执行到该定义时才为结构体st分配存储单元
C)程序运行时为结构体st分配6个字节存储单元
D)类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后) 答案:D
评析:结构体变量a与结构体成员a同名是合法的定义,引用成员a的方法是a.a,变量a处于不同的“层次”上,系统完全能够分清。st是一个结构体名,不会为结构体名分配存储空间,应该是在运行时为结构体变量a分配6个字节的存储单元,故选项B和选项C错误。
(45)若有以下结构体定义,则________是正确的引用或定义。
struct example { int x; int y; }v1;
A)example.x=10 B)example v2.x=10