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

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

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

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

选择题

1.以下叙述中正确的是(D)

A. 在C语言中,预处理命令行都以\\

B. 预处理命令行必须位于C源程序的起始位置

C. #include 必须放在C程序的开头

D. C语言的预处理不能实现宏定义和条件编译的功能

解析:在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。#include <stdio.h>命令行表示程序中要引用C标准函数库中的标准输入输出函数。

2.有以下程序

#define PT 3.5 ;

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

main() {

int a=1, b=2;

printf(\\(C)

A. 31.5

B. 7.5

C. 程序有错无输出结果

D. 14.0

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

3.以下关于宏的叙述中正确的是(D)

A. 宏定义必须位于源程序中所有语句之前

B. 宏名必须用大写字母表示

C. 宏调用比函数调用耗费时间

D. 宏替换没有数据类型限制

解析:本题考查宏替换的规则。宏替换分为简单的字符替换和带参数的宏替换两类。使用宏时应注意以下几点:

①宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。

4.有以下程序

#include <stdio.h>

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

void main()

{

int k=5,j=2;

printf(\\(B)

A. 197

B. 143

C. 33

D. 28

解析:这道题涉及到带参数的宏的定义和替换这个知识点。在程序中定义了带参数的宏S(x),当在主函数中用参数k+j调用宏S时,根据宏替换的原则,则S(k+j)=S(5+2)=4*7*5+2+1=143。

5.设有宏定义: #define IsDIV(k,n) ( ( k%n==1) ? 1 : 0) 且变量m已正确定义并赋值,则宏调用: IsDIV(m,5) && IsDIV(m,7) 为真时所要表达的是(C)

A. 判断m是否能被5和7整除

B. 判断m被5或者7整除是否余1

C. 判断m被5和7整除是否都余1

D. 判断m是否能被5或者7整除

解析:本题考查宏定义和三目运算符。三目运算符的格式为:test ? 语句1 : 语句2

其中,test可以是任何 Boolean 表达式。语句1,当 test 是 true 时执行该语句,可以是复合语句;语句2,当 test 是 false 时执行该语句,可以是复合语句。isDIV(k ,n)要表达的是当k除n的余数是1时表达式的值为1,否则为0,所以题中要表达的是m被5和7整除是否都余1。

6.有以下程序

#include <stdio.h>

#define SUB(a) (a)-(a)

main() {

int a=2,b=3,c=5,d;

d=SUB(a+b)*c;

printf(\\(D)

A. -12

B. 0

C. 10

D. -20

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

7.有以下程序

#include <stdio.h>

#define f(x) x*x*x

main() {

int a=3,s,t ;

s=f(a+1);

t=f((a+1));

printf(\\(B)

A. 10,10

B. 10,64

C. 64,10

D. 64,64

解析:根据题目中宏f(x)的定义,f(a+1)=a+1*a+1*a+1= a+a+a+1=10,而f((a+1))=(a+1)*(a+1)*(a+1)=4*4*4=64。

8.有下列程序:

#include <stdio.h>

#define N 5

#define M N+1

#define f(x) (x*M)

main( )

{ int i1,i2;

i1=f(2);

i2=f(1+1);

printf(\\(D)

A. 12 7

B. 12 12

C. 11 11

D. 11 7

解析:在本题中,定义了3个宏定义语句,分别是:#define N 5、#define M N+5和#define f(x) (x*M),所以根据C语言的宏替换规则,我们可知,f(2)=2*N+1=2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。

9.以下叙述中错误的是(B)

A. 预处理命令行的最后不能以分号表示结束

B. C程序对预处理命令行的处理是在程序执行的过程中进行的

C. #define MAX 是合法的宏定义命令行

D. 在程序中凡是以“#”开始的语句行都是预处理命令行

解析:预处理命令行是以“#”开始的语句,预处理命令行的最后不能以分号表示结束,预处理命令行。其中宏定义的字符替换的定义格式为:# define 标识符 字符串,预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。

10.若程序中有宏定义行: #define N 100 则以下叙述中正确的是(D)

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

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

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

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

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

11.有以下程序

#include<stdio.h>

#define N 2

#define M N+1

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

main() { printf(\\(B)

A. 4

B. 8

C. 9

D. 6

解析:宏展开以后NUM为(2+1+1)*2+1/2,计算以后值为8。注意在进行宏展开的时候,千万不要试图计算,展开以后再进行计算。

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

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

推荐资源

客服

扫码添加客服微信

热线

官方客服

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

电话客服:

客服微信:pujinet

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

公众号

扫码关注微信公众号