首页 > 全部 > 二级C语言 > 国家二级C语言机试(翻译预处理和指针)模拟试卷12

国家二级C语言机试(翻译预处理和指针)模拟试卷12

本单篇文档共8360字,内容预览3600字,预览为有答案版,源文件无水印,下载后包含无答案空白卷版和有答案版,同时也有计算机类NCRE全国计算机二级整科真题模拟题,讲义课件,思维导图,易错高频题等下载。
二级C语言 章节练习 6290人下载
价格: 1.00 原价:¥9.60
收藏

国家二级C语言机试(翻译预处理和指针)模拟试卷12

选择题

1.以下程序的输出结果是( )。

#define PT 3.5;

#define S(x)PT*x*x;

main(){int a=1,b=2;

printf(’’%4.1f\n’’,S(a+b));}(C)

A. 14.0

B. 7.5

C. 程序有错无输出结果

D. 31.5

解析:C语言规定预处理语句后面不能加分号,因此程序有错。如果没加分号的话S(a+b)=PT*a+b*a+b=3.5*1+2*1+2=7.5。

2.以下程序的输出结果是( )。

#include

#define S(x)4*(x)*x+1

void main()

{int k=5,j=2;

printf(’’’’%d\n’’,S(k+j));

}(B)

A. 33

B. 143

C. 28

D. 197

解析:本题考查带参数的宏的定义和替换点。在程序中定义了带参数的宏S(x),当在主函数中用参数k+i调用宏S时,根据宏替换的原则,则S(k+j)=S(5+2)=4*7*5+2+1=143。

3.以下程序的输出结果是( )。

#include

#define SUB(A)(A)-(A)

main(){int a=2,b=3,c=5,d;

d=SUB(a+b)*c;

printf(’’%d\n’’,d);}(D)

A. 0

B. 10

C. 一12

D. 一20

解析:本题主要考查的是宏替换,在程序中执行d=SUB(a+b)*c这条语句时,首先要进行宏替换,依据宏SUB(A)的定义可知,上面这条语句替换为d=(a+b)一(a+b)*c,因为乘法的优先级比减法的优先级高,所以先进行乘法运算,即d=5—5*5=一20,可以看出,出现了运算错误。

4.以下程序的输出结果是( )。

#include

#define N 5

#define M N+1

#define f(x)(x*M)

main()

{int i1,i2;

il=f(2);

i2=f(1+1);

printf(’’%d%d\n’’,il,i2);}(D)

A. 12 12

B. 12 7

C. 12 11

D. 11 7

解析:本题考查了宏的嵌套定义定义了3个宏定义语句,分别是:#defineN 5、#defineM N+1和#definef(x)(x*M),所以根据C语言的宏交替规则,我们可知,f(2)=2*N+12*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。

5.关于#define N 100的叙述中正确的是( )。(D)

A. 宏定义行中定义了标识符N的值为整数100

B. 上述宏定义行实现将100赋给标识符N

C. 在运行时用100替换标识符N

D. 在编译程序对C源程序进行预处理时用100替换标识符N

解析:在C语言中,凡是以“#”开头的行,都称为“翻译预处理”。其含义是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令进行处理的过程,即在程序执行之前就处理了。由#define定义的宏就是编译预处理命令。C程序在进行编译之前,都要先对程序中所有出现的“宏名”。都用宏定义中的替换文本进行替换。

6.以下程序的输出结果是( )。

#include

#define N 2

#define M N+1

#define NUM(M+1)*M/2

main(){printf(’’%d\n’’,NUM);}(B)

A. 9

B. 8

C. 7

D. 6

解析:本题考查宏替换。宏展开以后NUM为(2+1+1)*2+1/2,计算以后值为8。在进行宏展开的时候,要展开以后再进行计算。

7.以下程序的输出结果是( )。

#include

#include

int fun(int n) main()

{int *P; {int a;

p=(int *)malloc(sizeof(int)); a=fun(10);

*p=n;return *p; printf(’’%d\n’’,a+fun(10));

} }(B)

A. 21

B. 20

C. 10

D. 11

解析:本题考查内存申请。函数fun(int n)的功能是在内存中每次动态地申请一个整型变量的存储空间,把整型变量n的值存入这个存储空间中。所以当在主函数中执行输出语句时,a+fun(10)的值等于20。

8.关于int(*f)(int);的叙述中正确的是( )。(C)

A. f是基类型为int的指针变量

B. f是指向int类型一维数组的指针变量

C. f是指向函数的指针变量,该函数具有一个int类型的形参

D. f是函数名,该函数的返回值是基类型为int类型的地址

解析:题目中定义语句int(*f)(int)中f是指向函数的指针变量,该函数中也只有一个int型的形参。

9.关于函数参数的叙述中正确的是( )。(D)

A. 函数的形参类型不能是指针类型

B. 函数的类型不能是指针类型

C. 基类型不同的指针变量可以相互混用

D. 设有指针变量为“double *p”,则“p+1”将指针p移动8个字节

解析:C语言中在对指针进行加、减算术运算时,数字1表示1个存储单元的长度,而double类型数据在内存中占8个字节,因此移动一次移动8个字节。其他三个都不正确。

10.设int x=0,*p;下列赋值语句正确的是( )。(B)

A. *p=x;

B. p=NULL;

C. p=x;

D. *p=NULL;

解析:定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址.以致出现错误的运算结果。

11.22.设float x;则以下对指针变量P进行定义且赋初值的语句中正确的是( )。(B)

A. float *p=1;

B. float *p=&x;

C. float p=&x;

D. int *p=(float)x;

解析:C语言中定义指针变量的一般形式为类型名木指针变量名1,*指针变量名2,……因而在选项B的表达式中,赋值号的左边表示定义了指针变量p,而右边表示求变量x的地址值。

12.没有编译错误的程序段是( )。(A)

A. char*sp,s[10];sp=’’Hello’’;

B. char*sp:s[10];s=’’Hello’’;

C. char strl[10]=’’computer’’,str2[10];str2=str1:

D. char mark[];mark=’’PROGRAM’’;

解析:本题考查了赋值表达式。选项B中数组名为

本文档预览:3600字符,共8360字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载

剩余未完,查看全文
收藏
国家二级C语言机试(翻译预处理和指针)模拟试卷12

推荐资源

客服

扫码添加客服微信

热线

官方客服

如遇问题,请联系客服为您解决

电话客服:

客服微信:pujinet

工作时间:9:00-18:00,节假日休息

公众号

扫码关注微信公众号