A. 宏展开不占用运行空间,只占用编译时间 B. 预编译处理命令行必须以分号结束 C. 一个源程序只能有一个预编译处理命令行
D. 使用带参数的宏定义时,应该说明每个参数的数据类型 147、以下的叙述中不正确的是()
A. 宏展开不占用运行时间,只占用编译时间 B. 宏名无类型
C. 宏名必须用大写字母表示 D. 预处理命令行都必须以#号开始
148、若有定义:#define PI 3,在表达式PI*2*2的值为() A. 12 B. 4 C. 3 D. 不确定 149、以下程序运行后,屏幕输出为() #define MIN(a,b) ((a)<(b)?(a):(b)) main() {
int x=2,y=3,z; z=2*MIN(x,y); printf(\}
A. 2 B. 3 C. 4 D. 6 150、下列#include命令中,正确的是() A. #inclue [string.h] B. #include {string.h}
36
C. #include (string.h) D. #include
printf(\}
A. 产生错误 B. 1 C. 2 D. 3 152、以下叙述中正确的是()
A. 预处理命令行必须位于C源程序的起始位置 B. 在C语言中,预处理命令行都以”#”开头
C. 每个C程序必须在开头包含预处理命令行:#include
D. C语言的预处理只能实现宏定义和条件编译的功能 153、以下程序的运行结果是() #define ADD(x) x+x main() {
int m=1,n=2,k;
37
k=ADD(m+n)*3; printf(\}
A. 9 B. 10 C. 12 D. 18 154、下面程序的运行结果是() #define M 10 #define S(x) x*x #define F(x) (x*x) main() { int n1,n2; n1=1000/S(M); n2=1000/F(M);
printf(\}
A. 10,10 B. 1000,10 C. 10,1000 D. 1000,1000 指针
155、设有以下语句,则()是对a数组元素的不正确引用,其中0<=i<10。
int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
38
A. a[p-a] B. *(&a[i]) C. p[i] D. *(*(a+i))
156、若有定义int *p1,*p2;则指针变量p1、p2不能进行运算的是()
A. < B. = C. + D. -
157、以下关于指针概念的叙述中,错误的是()
A. 一个指针变量只能指向同一类型的变量 B. 一个变量的地址称为该变量的指针
C. 两个同类型的指针变量可以作加减运算 D. 任何指针变量都可以与空指针NULL进行比较 158、以下程序段运行后*(p+3)的值为() char a[]=”good”; char *p; p=a;
A. ?d? B. ?\\0? C. 存放?d?的地址 D. ?0? 159、以下程序段运行后*(++p)的值为() char a[5]=”work”; char *p; p=a;
A. ?w? B. 存放?w?的地址 C. ?o? D. 存放?o?的地址
160、若有定义:int *p,a=4;p=&a;则以下均代表地址的是()
39
A. a,p B. &a,p C. &a,*p D. a,*p 161、若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是() A.
*p=&a;scanf(“%lf”,p);
B.
*p=&a;scanf(“%lf”,*p);
C. p=&a,scanf(“%lf”,*p); D. p=&a;scanf(“%lf”,p); 162、若已定义:int x=12;对①int *p=&x;和②*p=x;这两条语句的正确理解是()
A. 语句①是在对指针变量p定义时初始化,使p指向x;而语句②是将变量x的值赋给指针变量p所指向的变量 B. 语句①和②中的*p含义相同,都表示给指针变量赋值 C. 语句①是在对指针变量p定义时初始化,使p指向x;而语句②是将变量x的值赋给指针变量p
D. 语句①和②的执行结果都是把变量x的地址赋给指针变量p
163、下面语句正确的是() A.
int
*p;*p=20
B.
char
*s=”abcdef”;printf(“%s\\n”,s);
C. char str[]=”abcd”;str++; D. char str[]={?a?,?b?,?c?};printf(“%s”,str);
164、若有定义int a[2][3],*p=a;则以下不能表示数组元素a[1][2]的是()
40