计算机2级C语言题库 第九章 预处理命令

合集下载

c语言二级考试填空题和答案

c语言二级考试填空题和答案

c语言二级考试填空题和答案1. 在C语言中,用于定义变量的关键字是______。

答案:int2. 若有定义int a=5, b=9;,则表达式a++ + b--的值是______。

答案:143. 在C语言中,用于表示逻辑“与”操作的运算符是______。

答案:&&4. 下列哪个选项是C语言中的预处理命令?A. printfB. scanfC. includeD. main答案:C5. 若有定义int x=10;,则执行语句x %= 3;后,x的值是______。

答案:16. 在C语言中,用于定义函数的关键字是______。

答案:void 或者 int,取决于函数的返回类型7. 若有定义float a=2.5, b=4.7;,则表达式(int)a+b的值是______。

答案:6.78. 在C语言中,用于表示逻辑“或”操作的运算符是______。

答案:||9. 下列哪个选项是C语言中的合法标识符?A. 2variableB. variable2C. _variableD. variable-2答案:B、C10. 若有定义int x=10;,则执行语句x /= 2;后,x的值是______。

答案:511. 在C语言中,用于表示逻辑“非”操作的运算符是______。

答案:!12. 下列哪个选项是C语言中的合法常量?A. 0x1AB. 1.2e3C. 0123D. 0.1E答案:A、B、C13. 若有定义int x=5;,则执行语句x <<= 2;后,x的值是______。

答案:2014. 在C语言中,用于表示“等于”的比较运算符是______。

答案:==15. 下列哪个选项是C语言中的合法字符串?A. "Hello World"B. 'Hello World'C. "Hello\nWorld"D. "Hello\tWorld"答案:A、C、D16. 若有定义int x=10;,则执行语句x %= 5;后,x的值是______。

c语言的预处理指令分3种  1宏定义  2条件编译  3文件包含

c语言的预处理指令分3种  1宏定义  2条件编译  3文件包含

c语⾔的预处理指令分3种 1宏定义 2条件编译 3⽂件包含宏简介1.C语⾔在对源程序进⾏编译之前,会先对⼀些特殊的预处理指令作解释(⽐如之前使⽤的#include⽂件包含指令),产⽣⼀个新的源程序(这个过程称为编译预处理),之后再进⾏通常的编译所有的预处理指令都是以#开头,并且结尾不⽤分号2.预处理指令分3种 1> 宏定义 2> 条件编译 3> ⽂件包含3.预处理指令在代码翻译成0和1之前执⾏4.预处理的位置是随便写的5.预处理指令的作⽤域:从编写指令的那⼀⾏开始,⼀直到⽂件结尾,可以⽤#undef取消宏定义的作⽤6.宏名⼀般⽤⼤写或者以k开头,变量名⼀般⽤⼩写 宏定义可以分为2种:不带参数的宏定义和带参数的宏定义。

⼀、不带参数的宏定义1.⼀般形式#define 宏名字符串⽐如#define ABC 10右边的字符串也可以省略,⽐如#define ABC2.作⽤它的作⽤是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常⽤来定义常量.3.使⽤习惯与注意1> 宏名⼀般⽤⼤写字母,以便与变量名区别开来,但⽤⼩写也没有语法错误2> 对程序中⽤双引号扩起来的字符串内的字符,不进⾏宏的替换操作。

3> 在编译预处理⽤字符串替换宏名时,不作语法检查,只是简单的字符串替换。

只有在编译的时候才对已经展开宏名的源程序进⾏语法检查4> 宏名的有效范围是从定义位置到⽂件结束。

如果需要终⽌宏定义的作⽤域,可以⽤#undef命令5> 定义⼀个宏时可以引⽤已经定义的宏名#define R 3.0#define PI 3.14#define L 2*PI*R#define S PI*R*R举例1 #include <stdio.h>2#define COUNT 434int main()5 {6char *name = "COUNT";78 printf("%s\n", name);910int ages[COUNT] = {1, 2, 67, 89};1112#define kCount 41314for ( int i = 0; i<COUNT; i++) {15 printf("%d\n", ages[i]);16 }1718// 从这⾏开始,COUNT这个宏就失效19#undef COUNT2021//int a = COUNT 写这个报错2223return0;24 }⼆、带参数的宏定义1.⼀般形式#define 宏名(参数列表) 字符串2.作⽤在编译预处理时,将源程序中所有宏名替换成字符串,并且将字符串中的参数⽤宏名右边参数列表中的参数替换3.使⽤注意1> 宏名和参数列表之间不能有空格,否则空格后⾯的所有字符串都作为替换的字符串2> 带参数的宏在展开时,只作简单的字符和参数的替换,不进⾏任何计算操作。

C程序课件第9章预处理

C程序课件第9章预处理
4 2021/3/20
1、无参宏定义
用一个指定的标识符(即名字)来代 表一个字符串,它的一般形式为:
#define 标识符 字符串 其中的“#”表示这是一条预处理命令。 凡是以“#”开头的均为预处理命令。 “define”为宏定义命令。“标识符”为 所定义的宏名。“字符串”可以是常数、 表达式、格式串等。
2 2021/3/20
所谓预处理是指在进行编译的第一遍扫描(词 法扫描和语法分析)之前所作的工作。预处理是 C 语言的一个重要功能,它由预处理程序负责完 成。当对一个源文件进行编译时,系统将自动引 用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译。
C 语言提供了多种预处理功能,如宏定义、文 件包含、条件编译等。分别用宏定义命令、文件 包含命令和条件编译命令来实现。为了与一般C 语句相区别,这些命令以符号“#”开头。合理地 使用预处理功能编写的程序便于阅读、修改、移 植和调试,也有利于模块化程序设计。本章介绍 常用的几种预处理功能。
14 2021/3/20
9)宏定义是专门用于预处理命令的一 个专用名词,它与定义变量的含义不同, 只作字符替换,不分配内存空间。
2、带参数的宏定义
C语言允许宏带有参数。在宏定义中 的参数称为形式参数,在宏调用中的参 数称为实际参数。对带参数的宏,在调 用中,不仅要宏展开,而且要用实参去 代换形参。
f1()
{ …… }
表示PI只在main函数中有效,在f1中无效。
10 2021/3/20
6)宏名在源程序中若用双引号括起来, 则预处理程序不对其作宏代换。 #define OK 100 main() { printf("OK");
printf("\n"); } 上例中定义宏名OK表示100,但在printf语 句中OK被引号括起来,因此不作宏代换。 程序的运行结果为:OK这表示把“OK”当 字符串处理。

计算机二级c语言第九章 数组和指针习题与答案

计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针1、有以下程序main(){ int a[]={2,4,6,8,10}, y=0, x, *p;p=&a[1];for(x= 1; x< 3; x++) y += p[x];printf("%d\n",y);}程序运行后的输出结果是A)10 B)11 C)14 D)152、有以下程序void sum(int a[]){ a[0] = a[-1]+a[1]; }main(){ int a[10]={1,2,3,4,5,6,7,8,9,10};sum(&a[2]);printf("%d\n", a[2]);}程序运行后的输出结果是A)6 B)7 C)5 D)83、有以下程序main(){int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++< 7) if(p[i]%2) j+=p[i];printf("%d\n",j);}程序运行后的输出结果是A)42 B)45 C)56 D)604、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是A)for(i=0;i<6;i++) printf("%2d",*(p++));B)for(i=0;i<6;i++) printf("%2d",*(p+i));C)for(i=0;i<6;i++) printf("%2d",*p++);D)for(i=0;i<6;i++) printf("%2d",(*p)++);5、有以下程序#include < stdio.h >main(){ int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5);printf("%d %d\n",*p,*q); }程序运行后的输出结果是A)运行后报错 B)6 6 C)6 11 D)5 106、有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是A)5 B)6 C)8 D)97、已有定义:int i,a[10],*p;则合法的赋值语句是A)p=100; B)p=a[5]; C)p=a[2]+2; D)p=a+2;8、以下能正确定义一维数组的选项是A)int num []; B)#define N 100int num [N];C)int num[0..100]; D)int N=100;int num[N];9、有以下程序main(){ int p[7]={11,13,14,15,16,17,18},i=0,k=0;while(i< 7&&p[i]%2){k=k+p[i];i++;}printf("%d\n",k);}执行后输出结果是A)58 B)56 C)45 D)2410、有以下程序main(){ int x[8]={8,7,6,5,0,0},*s;s=x+3;printf("%d\n",s[2]);}执行后输出结果是A)随机值 B)0 C)5 D)611、若有定义:int aa[8];。

C语言程序设计教程CJ_04预处理命令_潭浩强第3版

C语言程序设计教程CJ_04预处理命令_潭浩强第3版

Page 6
辽宁师范大学
蔡静
带参宏替换 函数调用 编译时替换, 运行时调用, 编译时替换 不占用内存 运行时调用 占用内存 只替换不计算 计算 替换使程序代码加长 不加长 存在数据类型问题 不存在数据类型问题
Page 7
辽宁师范大学
蔡静
9.2 “文件包含 处理 文件包含”处理 文件包含
通过预处理命令#include把另一个文件的全部内容包含到本 文件中。 格式1: #include <文件名 文件名> 文件名 只按系统指定的标准方式(从编译系统所在子目录中)检索 文件目录。 格式 2: #include “文件名” 文件名” 文件名 系统首先在当前源文件所在目录中寻找该文件,若找不到, 再按系统指定的标准方式检索其他文件目录。 例:9.6
Page 9
辽宁师范大学
蔡静
Thanks
Page 8
辽宁师范大学
蔡静
9.3 条件编译
指定满足某条件才能对指定语句进行编译,称为条件编译。 几种形式: 程序段2】 程序段 】 #endif
#ifndef 标识符 程序段1 程序段 【#else 程序段2】 程序段 】 #endif
#if 表达式 程序段1 程序段 【#else 程序段2】 程序段 】 #endif
Page 5
辽宁师范大学
蔡静
二、带参数的宏替换/宏定义 带参数的宏替换 宏定义
格式: #define 宏名 形参表 宏名(形参表 形参表) 例:#define S(M, N) M*N
字符串
说明: 带参数的宏定义不是进行简单字符串替换,还要进行参数 替换。形参表列中的参数出现在字符串中。 宏展开只是将程序语句中宏名后括号内的实参代替 #define命令中的形参,并不计算。 宏名与其后括号间不能有空格。 例9.3-9.5:

谭浩强 c语言程序设计(第九章)

谭浩强 c语言程序设计(第九章)
形式1: #ifdef 标识符 程序段1 #else 程序段2 #endif 意义:若该标识 符已被#define 命令定义,则编 译程序段1,否 则编译程序段2 形式2: #ifndef 标识符 程序段1 #else 程序段2 #endif 意义:若该标识
符没有被#define 命令定义,则编 译程序段1,否则 编译程序段2
4
第九章 预处理命令
例:下列程序宏替换。
例 #include <stdio.h> #define N 2 #define M N+1 # define NUM (M+3)*M/2 void main() { int i; for (i=0; i<=NUM; i++); printf(“%d\n”,i); }
第九章 预处理命令
第九章 预处理命令
内容提要: ★宏定义
★文件包含
★条件编译
1
第九章 预处理命令 – 作用:对源程序编译之前做一些处理,生成扩展C 源程序 种类
• 宏定义 • 文件包含 • 条件编译 #define #include #if--#else--#endif等
– 格式:
• “#”开头 • 占单独书写行 • 语句尾不加分号
#ifdef DEBUG printf(“x=%d,y=%d,z=%d\n”,x,y,z); #endif
#define DEBUG
字符串(可为空)
调试时:加上此命令 调试完成后:删去此命令
15
第九章 预处理命令 例5: (选择性地编译不同功能) 。根据需要,有时要把 字母全改为大写输出,另一些时候则要把字母全改为 小写输出。如何适应这两种不同要求。
11
第九章 预处理命令

C语言课件第9章预处理


结果: 结果:
l=25.132740 s=50.265480 v=150.796448
说明: 说明:
(1) 宏名一般用大写字母以区别变量名。 宏名一般用大写字母以区别变量名。 (2) 使用宏名可以减少程序的重复书写和修改。 使用宏名可以减少程序的重复书写和修改。 (3) 宏定义只是简单的替换并不作语法检查。 宏定义只是简单的替换并不作语法检查。 (4) 宏定义不是 语句,不能在后面加分号, 宏定义不是C语句 不能在后面加分号, 语句, 否则连分号一同替换。 否则连分号一同替换。 (5) #define命令出现在函数的外面,在整个函 命令出现在函数的外面, 命令出现在函数的外面 数内有效。 数内有效。 (6) 可以用 可以用#undef命令终止宏定义的作用域。 命令终止宏定义的作用域。 命令终止宏定义的作用域 #define g 9.8 main() : #undef g 终止宏定义g 终止宏定义
#include ”file2.h” : : static a, b, c : :
9.3 条件编译
一般情况下, 一般情况下,编译一个源程序都是所有语 句行都编译(前面所有例子 前面所有例子), 句行都编译 前面所有例子 ,为了需要可以将 满足条件的一部分语句进行编译, 称条件编译。 满足条件的一部分语句进行编译 称条件编译。 条件编译命令的3种形式: 条件编译命令的 种形式: 种形式
系统 角度
与源程序 一同编译 生成执行文件
用户 角度
预编译命令 与源程序 一同编译 生成执行文件
第9章:编译预处理命令 章
C提供的预处理功能有一下三种: 提供的预处理功能有一下三种: 提供的预处理功能有一下三种
1、宏定义 、 2、文件包含 、 3、条件编译 、 全部是以#开头的命令 全部是以 开头的命令

编译预处理题与答案

第九章编译预处理9.1 选择题【题9.1】以下叙述中不正确的是。

A)预处理命令行都必须以#号开始B)在程序中凡是以#号开始的语句行都是预处理命令行C)C程序在执行过程中对预处理命令行进行处理D)以下是正确的宏定义#define IBM_PC【题9.2】以下叙述中正确的是。

A)在程序的一行上可以出现多个有效的预处理命令行B)使用带参的宏时,参数的类型应与宏定义时的一致C)宏替换不占用运行时间,只占编译时间D)在以下定义中C R是称为“宏名”的标识符#define C R 045【题9.3】请读程序:#define ADD(x) x+xmain(){int m=1,n=2,k=3;int sum=ADD(m+n)*k;printf(“sum=%d”,sum);}上面程序的运行结果是。

A)sum=9 B)sum=10 C)sum=12 D)sum=18【题9.4】以下程序的运行结果是。

#define MIN(x,y) (x)<(y)?(x):(y)main(){int i=10,j=15,k;k=10*MIN(i,j);printf(“%d\n”,k);}A)10 B)15 C)100 D)150【题9.5】在宏定义#define PI 3.14159中,用宏名PI代替一个。

A)常量B)单精度数C)双精度数D)字符串【题9.6】以下程序的运行结果是。

#include <stdio.h>#define FUDGE(y) 2.84+y#define PR(a) printf(“%d”,(int)(a))#define PRINT1(a) PR(a); putchar(‘\n’)main(){int x=2;PRINT1(FUDGE(5)*x);}A)11 B)12 C)13 D)15【题9.7】以下有关宏替换的叙述不正确的是。

A)宏替换不占用运行时间B)宏名无类型C)宏替换只是字符替换D)宏名必须用大写字母表示【题9.8】C语言的编译系统对宏命令的处理是。

C语言910章

C语言教案第九章预处理命令1.C语言中以“#”号开头的行,均为“编译预处理”命令行2.宏作为一个预处理命令,只是简单的文本代换3.在字符串代换过程中,一定要注意不要添加任何字符4.不带参数的宏定义及使用,注意宏中括号的用法5.*当宏定义在一行中写不下,需换行时应在最后一个字符后加“\”6.带参数的宏定义及使用7.注意宏名一般使用大写字母,而参数则不限8.文件包含的两种方法(书上212页)9.*条件编译习题217页:2,3,5第十章指针1.地址和指针的概念,指针型变量的定义2.指针型变量的基类型3.取地址运算符& 和指针运算符*4.通过指针为变量赋值及通过指针找出变量的值的方法5.*为指针变量赋“空”值:p=NULL或p=’\0’ 或p=0(NULL为预定义符,ASCII码值为0)6.函数的形参为指针变量时的数据传递7.通过传送地址值,在被调函数中直接改变主调函数中变量的值8.*函数返回地址值9.指针变量取代数组作函数参数10.一维数组与指针11.一维数组中的几种等价形式:设有定义int a[10], *p=a;数组元素的地址——&a[i], a+i, p+i, &p[i]数组元素——a[i], *(a+i), *(p+i), p[i]12.移动指针,每次移动一个单元13.*指针比较,通常两个或多个指针指向同一目标时比较才有意义14.*数组元素的地址作实参15.*函数的指针形参与函数体中数组的区别16.二维数组与指针17.一个二维数组可看作由多个一维数组构成18.几种等价形式:设有定义int a[5][6], *p=a[0]; 则存在着关于变量和变量的地址间的如下等价形式二维数组元素的地址——&a[i][j], a[i]+j, *(a+i)+j, &a[0][0]+列数*i+j,a[0]+列数*i+j 二维数组元素——a[i][j], *(a[i]+j), *(*(a+i)+j), *(&a[0][0]+列数*i+j),(*(a+i))[j]19.指向指针的指针:int a[5][6], **p=a;20.指针数组:int a[5][6], *p[4]; 定义了具有四个元素的基本整型指针数组21.行指针:int a[5][6], (*p)[6]; 定义了一个指向具有六个元素的一维数组的指向指针的指针型变量22.*二维数组名和指针数组作为实参在函数中的数据传递23.*二级指针和行指针作为实参在函数中的数据传递24.*字符串与指针,直接用字符型指针变量记录字符串的地址25.*指向函数的指针习题278页:2,3,4,9,10,14,15。

第09章_预处理

12
程序设计语言Ⅰ
说明
6、#define命令出现在程序中函数的外面,宏名 的有效范围从定义命令开始直到本源程序文件 结束。可以通过#undef终止宏名的作用域。
#define G 9.8 #define PI 3.14 int f1() { …… } #undef G void main() { …… }
程序设计语言Ⅰ
说明
3、带参数的宏定义与函数的本质区别 1)函数调用时,先求表达式的值,然后将值传递给形参; 带参宏展开只在编译时进行的简单字符臵换。 2)函数调用是在程序运行时处理的,给形参分配临时的 内存单元;而宏展开是在编译时进行的,展开时并不给 形参分配内存,也不进行“值传递”,也没有“返回值” 的概念。 3)函数的形参要定义类型,且要求形参、实参类型一致。 宏不存在参数类型问题。 4)宏占用的是编译时间,函数调用占用的是运行时间。 在多次调用时,宏使得程序变长,而函数调用不明显。 20
16
程序设计语言Ⅰ
说明
1、正因为带参宏定义本质还是简单字符替换(除了参数替换),所 以容易发生错误。 例:#define S(r) 3.14*r*r 不再是求 面积了。 #define S(r) 3.14*(r)*(r) area=S(a+b);
宏展开 宏展开
area=3.14*a+b*a+b; area=3.14*(a+b)*(a+b);
6
程序设计语言Ⅰ
一、什么是预处理
所谓预处理是指,在 对源程序进行编译之前, 先对源程序中的预处理 命令(主要指宏定义命 令、文件包含命令和条 件编译命令)进行处理; 然后再将处理的结果, 和源程序一起进行编译, 以得到目标代码。
#define 编译预处理 #include 编译 连接 执行 宏定义 文件包含 条件编译
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1页 共2页
第九章 预处理命令
一 单项选择题
2.以下程序的输出结果是( )。
#define f(x) x*x
main( )
{int a=6, b=2, c;
c=f(a)/f(b);
printf("%d\n", c);
}
A) 9 B) 6 C) 36 D) 18
3.下列程序执行后的输出结果是( )。
#define MA(x) x*(x-1)
main()
{int a=1, b=2; printf("%d\n", MA(1+a+b));}
A) 6 B) 8 C) 10 D) 12

4.以下程序的输出结果是( )。
#define M(x, y, z) x*y+z
main()
{int a=1, b=2, c=3;
printf("%d\n", M(a+b, b+c, c+a));
}
A) 19 B) 17 C) 15 D) 12

7.以下程序的输出结果是( )。
#include
#define MIN(x, y) (x)< (y)?(x):(y)
main()
{int a, b, c;
a=20;b=10;
c=5*MIN(a, b);
printf(“%d\n”, c);
}

A) 20 B) 200 C) 10 D) 50
13.如果文件1包含文件2,文件2中要用到文件3的内容,而文件3中要用到文件4的内
容,则可在文件1中用三个#include命令分别包含文件2、文件3和文件4。在下列关于这
几个文件包含顺序的叙述中,正确的一条是( )。

A) 文件4应出现在文件3之前,文件3应出现在文件2之前
B) 文件2应出现在文件3之前,文件3应出现在文件4之前
第2页 共2页

C) 文件3应出现在文件2之前,文件2应出现在文件4之前
D) 出现的先后顺序可以任意

相关文档
最新文档