s1=M(x+y,x-y); s2=M(x-y,x+y);
printf(\}
A. -1,7 B. 5,5 C. 7,-1 D. 5,-5 145、以下叙述中,正确的是()
A. “#define PRICE=30”定义了与30等价的符号常量PRICE B. 预编译处理命令行都必须以“#”开头
C. 程序中使用带参的宏时,参数类型要与宏定义时一致 D. 宏名只能包含大写字母和数字字符 146、以下叙述中,正确的是()
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} C. #include (string.h) D. #include
#define TWO ONE+1 #define THREE TWO+1 void main () {
printf(\}
A. 产生错误 B. 1 C. 2 D. 3 152、以下叙述中正确的是()
A. 预处理命令行必须位于C源程序的起始位置
16
B. 在C语言中,预处理命令行都以”#”开头
C. 每个C程序必须在开头包含预处理命令行:#include
main() {
int m=1,n=2,k; 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;
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;
17
p=a;
A. ?w? B. 存放?w?的地址 C. ?o? D. 存放?o?的地址 160、若有定义:int *p,a=4;p=&a;则以下均代表地址的是() 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[0];则以下不能表示数组元素a[1][2]的是() A. *(a[1]+2) B. *(p[1]+2) C. p[5] D. *(p+5) 165、若已定义:int a=5,*p;且p=&a;则以下表示中不正确的是()
A. &(*p)==&a B. *(&a)==a C. &(*p)==p D. *(p++)==a++
166、若有以下程序段,其中0<=i<4,0<=j<3,则不能正确访问a数组元素的是()
int i,j,(*p)[3];
int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12}; p=a;
A. *(*(a+i)+j) B. p[i][j] C. (*(p+i))[j] D. p[i]+j 167、以下程序段的运行结果是()
int x[]={2,3,4,5,6,7},*p=x; int i,s=0;
for(i=1;i<6;i++) s+=p[i++]; printf(\
A. 12 B. 15 C. 25 D. 27 168、下面程序的运行结果是()
main() {
int x=36,y=63; int *p,*q,*t; p=&x;q=&y; t=p; p=q; q=t;
printf(\}
A. 36,36 B. 63,63 C. 36,63 D. 63,36
18
169、以下程序段运行后x的值为()
int a[]={1,2,3,4,5,6,7}; int i,x,*p; x=1; p=&a[2];
for(i=0;i<3;i++) x*=*(p+i);
A. 不确定 B. 24 C. 120 D. 60 170、以下程序段运行后x的值为()
int a[]={1,2,3},b[]={4,2,5}; int *p,*q; int i,x; p=a;q=b;
for(i=0;i<3;i++) if(*(p+i)==*(q+i)) x=*(p+i)*2;
A. 2 B. 4 C. 5 171、以下程序运行结果是()
main() {
char a[]=\ for(p=a;p
A. 1357 B. 1357357577 172、下面程序的输出结果是()#include
int i;
char *s=\ for(i=0;i<3;i++)
printf(\}
A. abc bc c B. c bc abc C. abc c bc
D. 不确定 C. 7531 D. 7531531311 19
D. a ab abc
173、下面程序的输出结果是()
#include
char *str=\ printf(\}
A. 1 B. 2 C. 3 D. 错误
174、以下程序执行时,输入1 2 3 4 5<回车>,输出为() #include
int a[N]; int *p=a;
while(p
scanf(\while(p>a)
printf(\}
A. 5 4 3 2 1 B. 1 2 3 4 5 C. 2 3 4 5 1 D. 4 3 2 1 5 175.以下程序段的运行结果是() int x[]={2,3,4,5,6,7},*p=x; int i,s=0;
for(i=1;i<6;i+=2)s+=*(p+i); printf(\A.27 B.25 C.12 D.15
176.以下程序运行结果() main() {
int a[]={9,8,7,6,5,4},*p,*q,i; p=a;q=p+5; for(i=0;i<6;i++)
printf(\}
A.948576675849 B.948576 C.495867 D.495867768594
结构体和共用体
177.以下程序段的运行结果() union
20