B
以下程序的运行结果是 #include \
#define FUDGE(y) 2.84十y
#define PR(a) printf(\#define PRINT1(a) PR(a);putchar(\main()
{int x=2;
PRINT1(FUDGE(5)*x); }
A)11 B)12 C)13 D)15 *【题8.7】 D
以下有关宏替换的叙述不正确的是
A)宏替换不占用运行时间 B)宏名无类型
C)宏替换只是字符替换 D)宏名必须用大写字母表示 *【题8.8】 D
C语言的编译系统对宏命令的处理是 A)在程序运行时进行的 B)在程序连接时进行的
C)和C程序中的其它语句同时进行编译的
D)在对源程序中其它成份正式编译之前进行的 *【题8.9】 D
若有宏走义如下:
#define X 5 #define Y X+1 #define Z Y*X/2
则执行以下printf语句后,输出结果是 int a; a=Y;
printf(\printf(\
A)7 B)12 C)12 D)7 6 6 5 5 *【题8.10】 B
若有以下宏定义: #define N 2
#define Y(n)((N十1)*n)
则执行语句z=2*(N+Y(5));后的结果是 A)语句有错误 B)z=34 C)z=70 D)z无定值 *【题8.11】 B
若有宏定义: #define MOD(x,y) x%y 则执行以下语句后的输出为 int z,a=15,b=100; z=MOD(b,a);
printf(\
A)11 B)10 C)6 D)宏定义不合法 *【题8.12】 C
以下程序的运行结果是
#define MAX(A,B) (A)>(B)?(A):(B) #define PRINT(Y)printf(\main()
{int a=1,b=2,c=3,d=4,t; t=MAX(a+b,c+d); PRINT(t);
}
*【题8.13】 D
以下程序段中存在请误的是 A)#define array_size l00 int arrayl [array_size]; B)#define PI 3.14159
#define S(r) PI*(r)*(r) area=s(3.2);
C)#define PI 3.1415
#define S(r) PI*(r)*(r) area=S(a+b); D)#deine PI 3.4159
#define S(r) PI*(r)*(r) area=S(a); *【题8.14】 A
请读程序:
#include
#define MUL(x,y) (x)*y main()
{int a=3,b=4,c; c=MUL(a++,b++); printf\ }
上面程序的输出结果是
A)12 B)15 C)20 D)16 *【题8.15】 C
#define能作简单的替代,用宏替代计算多项式4*x*x+3*x+2之值的 函数f,正确的宏定义是
A)#define f(x) 4*x*x+3*x+2 B)#define f 4*x*x+3*x+2 C)#define f(a)(4*a*a+3*a+2) D)#define (4*a*a+3*a+2)f(a) *【8.16】 B
对下面程序段: #define A 3
#define B(3)((A+1)*a) x=3*(A十B(7)); 正确的判断是
A)程序错误,不许嵌套宏定义 B)x=93 C)x=21
D)程序错误,宏定义不许有参数 *【题8.17】 D
以下程序中,第一个输出值是8,第二个输出值是 #include
#define N (M+1) #define NN N*N/2 main()
{printf(\ printf(\ }
A)17 B)18 C)30 D)40 *【题8.18】 B
以下程序的输出结果为 。 #inc1ude
#define PR(a) printf(\#define PRINT(a) PR(a);putchar('\\n’); main()
{int x=2;
PRINT(F(3)*x); )
A)8 B)9 C)10 D)11 *【题8.19】 B
以下程序的输出结果为 define PT 5.5
#define S(x) PT*x*x main()
{int a=1,b=2;
printf(\十b)); }
A)12.O B)9.5 C)2.5 D)33.5 *【题8.20】 D
以下在任何情况下计算平方数时都不会引起二义性的宏定义是 A)#define POWER(x) x*x
B)#define POWER(x) (x)*(x) C)#define POWER(x) (x*x)
D)#define POWER(x) ((x)*(x)) *【题8.21】 B
主\文件包含\预处理语句的使用形式中,当#include后面的文件名用\(双引号)括起时,寻找被包含文件的方式是 A) 直接按系统设定的标准方式搜索目录
B) 先在源程序所在目录搜索,再按系统设定的标准方式搜索 C)仅仅搜索源程序所在目录 D)仅仅搜索当前目录 *【题8.22】 C
在\文件包含\预处理语句的使用形式中,当#include后面的文件名用< > (尖括号)括起时,寻找被包含文件的方式是 A)仅仅搜索当前目录
B)仅仅搜索源程序所在目录
C)直接按系统设定的标准方式搜索目录
D)先在源程序所在目录搜索,再按系统设定的标准方式搜索 *【题8.23】 B
请读程序:
#define LETTER 0 main()
{char str[20]=\ while ((c=str[i]!='\\0')
{i++; #if LETTER if(c>='a'&&c<='z') c=c-32; #else if(c>='A' &&c<='Z') c=c+32; #endif printf(\ } }
上面程序的运行结果是
A)C Language B)c language C)C LANGUAGE D)c lANGUAGE *【题8;24】 C
以下正确的描述是
A)C语言的预处理功能是指完成宏替换和包含文件的调用 B)预处理指令只能位于C源程序文件的首部
C)凡是C源程序中行首以\标识的控制行都是预处理指令 D)C语言的编译预处理就是对源程序进行初步的语法检查 *【题8.25】 D
C语言提供的预处理功能包括条件编译,其基本形式为: #XXX标识符 程序段1 #else 程序段2 #endif
这里XXX可以是
A)define或include B)ifdef或include
C)ifdef或ifndef或define D)ifdef或ifndef或if *【题9.1】 B
以下程序的运行结果是
sub(int x,int y,int *z) {*z=y-x;} main()
{int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c);
prinif(\A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7 *【题9.2】 C
执行以下程序后,b的值为【1】 main( )
{int a,b,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m;
b=(-*pl)/(*p2)+7; printf(\ printf(\ }
A)5 B)6 C)7 D)10 *【题9.3】 D
下面程序应能对两个整型变量的值进行交换。以下正确的说法是 main( )
{int a=10,b=20; printf(\ swap(&a,&b); prinif(\ swap(int p,int q) {int t; t=p;p=q;q=t;} A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执 行语句不变)即可 D)以上说法都不正确 *【题9·4】 D
有四组对指针变量进行操作的语句,以下判断正确的选项是 (1)int *p,*q;q=p;
int a,*p,*q;p=q=&a; (2)int a,*p,*q;q=&a;p=*q; int a=20,*p;*p=a;
(3)int a=b=0,*p;p=&a;b=*p;
int a=20,*p,*p=&a;*p=*q; (4)int a=20,*p;*q=&a;p=q; int p,*q;q=&q;
A)正确:(1); 不正确:(2),(3),(4) B)正确:(1),(4); 不正确:(2),(3) c)正确:(3); 不正确:(1),(2),(4) D)以上结论都不正确 *【题9·5】 B
以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是 main()
{int *p,*q,a,b; p=&a;
printf(\ scanf(\ }
A)*p表示的是变量p的地址
B)*p表示的是变量a的值,不是变量a的地址 C)*p表示的是指针变量p的值
D)*p只能用来说明p是一个指针变量 *【题9.6】 D
以下程序有错,错误原因是 main()
{int *p,i; char *q,ch; p=&i; q=&ch; *p=40; *p=*q; }
A)p和q的类型不一致,不能执行*p=*q;语句
B)*p中存放的是地址值,因此不能执行*p=40;语句 C)q没有指向具体的存储单元,所以*q没有实际意义
D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句 *【题9.8 ] B
已有定义int k=2; int *ptr1,*ptr2;且ptrl和Ptr2均已指向变量k,下 面不能正确执行的赋值语句是 A)k=*ptrl+*ptr2; B)ptr2=k
c)ptrl=ptr2; D)k=*ptrl*(*ptr2); *【题9.9】 B
变量的指针,其含义是指该变量的 A)值 B)地址
c)名 D)一个标志 *【题9·10】 D
若已定义int a=5;下面对(1),(2)两个语句的正确解释是 (1)int *p=&a; (2)*p=a;
A)语句(1)和(2)中的*P含义相同,都表示给指针变量p赋值
B)(1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p
C)(1)在对p进行说明的同时进行初始化,使p指向a (2)将变量a的值赋给指针变量p D)(1)在对p进行说明的同时进行初始化,使p指向a (2)将变量a的值赋于*p *【题9;11] D
若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 A)a,point,*&a B)&*a,&a,*point C)*&point,*point,&a D)&a,&*point,point *【题9。13】 D