A. 1 1 B. 1 2 C.0 0 D.0
51400以下程序的运行结果是( C )。 fun3(int x)
{ static int a=3; a+=x; return a; } main()
{ int k=2,m=1,n; n=fun3(k); n=fun3(m);
printf(\ } A. 3 B. 4 C.6 D.9
51401以下程序运行后输出结果是( D )。 #define F(m,n) m*n main( )
{ int x=5,y=3,a1,a2; a1=F(x+y,x-y); a2=F(x-y,x+y);
printf(\ } A. 16,16 B. 16,-16 C.-7,17 D.17,-7
51402以下叙述正确的是( C )。
A. 编译预处理命令行必须以分号结束 B. 程序中使用带参数的宏时,参数类型要与宏定义时一致
C.宏展开不占用运行时间,只占用编译时间 D.宏名只能包含大写字母和数字字符 51403以下叙述正确的是( B )。
A. 一个源程序只能有一个编译预处理命令行 B. 编译预处理命令行都必须以\开头 C.\定义了与30等价的符号常量PRICE D.使用带参数的宏定义时,应该说明每个参数的数据类型
51404以下叙述错误的是( D )。
A. 编译预处理命令行都必须以#号开始 B. 宏名可以用小写字母表示
C. 使用预处理命令\<文件名>\时,编译系统只在指定的系统目录下查找该文件 D. 宏定义只能放在main()函数之前
51405若有定义:#define N 3+2,则表达式N*2的值为( B )。 A. 5 B. 7 C.10 D.0
51406以下程序运行后输出结果是( C )。 #define MIN(m,n) m 29 main() { int a=3,b=5,c; c=2*MIN(a,b); printf(\ } A. 3 B. 5 C.6 D.10 51407下列#include命令中,正确的是( A )。 A. #include \ B. #include [math.h] C.#include (math.h) D.#include {math.h} 51408下面程序的输出结果是( C )。 #include #define TUE 2*MON #define WED 3*TUE void main() {printf(\ } A. 2 B. 3 C.4 D.5 51409下面错误的叙述是( A )。 A. 预处理命令行必须位于C源程序的起始位置 B. 在C语言中,预处理命令行都以\开头 C.C程序在开头可以不包含预处理命令行:#include 51410以下程序的运行结果是( B )。 #define MUL(r) r*r main() {int a=2,b=3,c; c=MUL(a+b)*2; printf(\ } A. 10 B. 14 C.36 D.50 51411下面程序的运行结果是( C )。 #define N 10 #define K(x) x*x #define T(x) (x*x) main( ) {int a,b; a=9%K(N); b=9%T(N); printf(\ } A. 9,9 B. 9,90 C.90,9 D.90,90 51412以下在任何情况下计算平方数时都不会引起二义性的宏定义是( D )。 A. #define XPF(x) x*x B. #define XPF(x) (x)*(x) 30 C.#define XPF(x) (x*x) D.#define XPF(x) ((x)*(x)) 51413以下程序的运行结果是( C )。 #define X a+b main( ) { int a=3,b=4,s1; s1=2*X; printf(\ } A. 14 B. 6 C.10 D.8 51414下面叙述错误的是( C )。 A. “#define PRICE 30”命令的作用是定义一个与30等价的符号常量PRICE B. 预处理命令行都必须以“#”开头 C.预处理命令行必须以分号结束 D.C源程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率 51415下面叙述正确的是( A )。 A. 宏展开不占用运行时间,只占用编译时间 B. 预处理命令也是C语句,必须以分号结束 C.一个源程序只能有一个预编译处理命令行 D.宏名必须用大写字母表示 51416下面叙述错误的是( D )。 A. “#inclue 51417若有定义:#define PI 3,则表达式PI*2*2的值为( A )。 A. 12 B. 4 C.322 D.不确定 51418若有定义:#define F 2+3,则表达式F*F的值为( C )。 A. 25 B. 13 C.11 D.17 51500下程序的运行结果是( A )。 void ast (int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; } main() { int a=4,b=3,c,d; ast(a,b,&c,&d); printf(\ } A. 7,1 B. 1,7 C.7,-1 D.c、d未赋值,编译出错 31 51501有以下语句: int a[5]={0,1,2,3,4},i; int *p=a; 设0≤i<5,对a数组元素不正确的引用是( C )。 A. *(&a[i]) B. a[p-a] C.*(*(a+i)) D.p[i] 51502若有定义int *p1,*p2; 则错误的表达式是( A )。 A. p1+p2 B. p1-p2 C.p1 51503以下叙述错误的是( D )。 A. 存放地址的变量称为指针变量 B. NULL可以赋值给任何类型的指针变量 C.一个指针变量只能指向类型相同的变量 D.两个相同类型的指针变量可以作加减运算 51504以下程序段运行后,表达式*(p+4)的值为( B )。 char a[]=\ char *p; p=a; A. 'n' B. 'a' C.存放'n'的地址 D.存放'a'的地址 51505以下程序段运行后,表达式*(p++)的值为( A )。 char a[5]=\ char *p=a; A. 'w' B. 存放'w'的地址 C.'o' D.存放'o'的地址 51506若有定义: int *p,k=4; p=&k; 以下均代表地址的是( C )。 A. k, p B. &k, &p C.&k, p D.k, *p 51507若有定义:double *q,p;则能给输入项读入数据的正确程序段是( B )。 A. q=&p;scanf(\ B. q=&p;scanf(\C.*q=&p;scanf(\ D.*q=&p;scanf(\ 51508若已定义: int q=5; 对① int *p=&q;和② p=&q; 这两条语句理解错误的是( C )。 A. ①是对p定义时初始化,使p指向q;而②是将q的地址赋给p B. ①和②中的&q含义相同,都表示给指针变量赋值 C.①是对p定义时初始化,使p指向q;而②是将q的值赋给p所指向的变量 D.①和②的执行结果都是把q的地址赋给p 51509下面语句错误的是( A )。 A. int *p; *p=20; B. char *s=\C.char *str=\ D.char *str;str=\ 51510若有定义int a[2][3],*p=a;,则能表示数组元素a[1][2]地址的是( D )。 A. *(a[1]+2) B. a[1][2] C.p[5] D.p+5 32