全国计算机等级考试2C课程第10讲预编译处理课件

上传人:风*** 文档编号:250753516 上传时间:2024-11-04 格式:PPT 页数:18 大小:134.94KB
收藏 版权申诉 举报 下载
全国计算机等级考试2C课程第10讲预编译处理课件_第1页
第1页 / 共18页
全国计算机等级考试2C课程第10讲预编译处理课件_第2页
第2页 / 共18页
全国计算机等级考试2C课程第10讲预编译处理课件_第3页
第3页 / 共18页
资源描述:

《全国计算机等级考试2C课程第10讲预编译处理课件》由会员分享,可在线阅读,更多相关《全国计算机等级考试2C课程第10讲预编译处理课件(18页珍藏版)》请在装配图网上搜索。

1、,,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,作者:张旭仟 版权所有 欢迎盗版,*,全国计算机等级考试 2C课程,第十讲 编译预处理命令,11/4/2024,1,作者:张旭仟 版权所有 欢迎盗版,全国计算机等级考试 2C课程第十讲 编译预处理命令9/21/,编译预处理命令的基本概念,ANSI C规定,可以在C源程序中加入一些“编译预处理命令” ,以改进程序设计环境,提高编程效率。例如:,#define PI 3.14159,#include ,虽然这些“编译预处理命令”也是由ANSI C统一规定的,但它们并非C语言的组成部分。含有这种 “编译预处理

2、命令”的源程序,只有在正式编译之前先对它们进行“预处理”后,才能被正常编译成“目标程序”。,C语言提供的预处理命令主要有:,宏定义命令,、,文件包含命令,、,条件编译命令,。,为了与一般C语句相区别,这些编译预处理命令”都以 “#”号开头。,11/4/2024,2,作者:张旭仟 版权所有 欢迎盗版,编译预处理命令的基本概念ANSI C规定,可以在C源程序中加,不带参数的宏替换命令,不带参数的宏替换命令,一般形式:,#define 标识符 字符串,例如:,#define PI 3.1415926,其中“#define”是宏定义命令, PI 称为“宏名”, “3.1415926”称为宏体。

3、,作用是将程序中在该命令以后出现的所有的PI都用“3.1415926”代替。,在预编译时将宏名替换成字符串的过程称为“宏展开”。,11/4/2024,3,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令不带参数的宏替换命令9/21/20233,不带参数的宏替换命令,说明:,(1)#define命令、宏名、宏体之间必须用空格隔开;,(2)由于宏定义不是C语言程序语句,行的末尾不需要加“;”号;如果加了分号则会作为宏体的一部分被一起置换。,(3)宏名习惯上一般用大写字母表示,以便与普通变量名区别。但这并非语法规定,即用小写字母并不属于语法错误;,(4)程序中被加上双引号“”的宏名,将不能被替

4、换,如:printf(“PI”);语句中的PI不会被替换为3.1415926;,(5)适当使用宏名代替一个字符串,可以减少程序中重复书写某些复杂数据的工作量。,11/4/2024,4,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令说明:9/21/20234作者:张旭仟,不带参数的宏替换命令,例如:,#include ,#define PI 3.1415926,void main(),{ float l,s,r,v;,printf("input radius:");,scanf("%f",,l=2.0*PI*r;,s=PI*r*r;,v=4.0/3*PI*r*r*r;,printf(

5、"l=%10.4f\ns=%10.4f\nv=%10.4f\n",l,s,v);,},运行情况如下:,1=25.1328,s=50.2655,v=150.7966,11/4/2024,5,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令例如: #include

6、ne G 9.8,__,void main(),{ G的有效范围,…,},__,#undef G,f1(),{,…,},11/4/2024,6,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令(6) 宏定义是用宏名代替一个字符串,只,不带参数的宏替换命令,(9) 在进行宏定义时,可以引用已定义的宏名,宏展开时将会层层置换。,例如:,,#include ,#define R 3.0,#define PI 3.1415926,#define L 2*PI*R,#define S PI*R*R,void main(),{ pri

7、ntf("L=%f\nS=%f\n",L,S);,},编译预处理时:,printf(“L=%f\nS=%f\n”,L,S); 语句将被展开为,printf(“L=%f\nS=%f\n”,2*3.1415926*3.0,3.1415926*3.0*3.0);,11/4/2024,7,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令(9) 在进行宏定义时,可以引用已定义的,带参数的宏定义,带参数的宏定义,作用:不只进行简单的字符串替换,还进行参数的替换。,一般形式为:,#define 宏名(参数表)字符串,,例如:,#define,S(a,b) a*b,,,area=S(3,2);,说明

8、:,程序中用3和2分别代替宏定义中的形式参数a和b,用3*2代替,S(3,2),。因此赋值语句展开为:,area=3*2,11/4/2024,8,作者:张旭仟 版权所有 欢迎盗版,带参数的宏定义带参数的宏定义例如:说明:9/21/20238,带参数的宏定义,对带参的宏定义是这样展开置换的:,对带实参的宏,如S(3,2),基本原则也是按define命令行中指定的字符串从左到右进行置换的。,但如果字符串中包含有宏名中定义的形参,如: “a*b”中的a和b,则要用程序中相应的实参(可以是常量、变量或表达式)来代替;其他字符,如“a*b”中的*号,则原样保留。,图中S(3,2)将被置换为3*2,其中3

9、和2是实参,将代替指定字符串a*b中的a和b,*不是参数,则被原样保留。,11/4/2024,9,作者:张旭仟 版权所有 欢迎盗版,带参数的宏定义对带参的宏定义是这样展开置换的:图中S(3,2,带参数的宏定义,例如:,#include ,#define PI 3.1415926,#define S(r) PI*r*r,void main(),{ float a,area;,a=3.6;,area=S(a);,printf("r=%f\narea=%f\n",a,area);,},说明:,赋值语句“area=S(a);” 展开后被替换为:,area=3.1415926,*a*a;,运行结果:

10、,r=3.600000,area=40.715038,11/4/2024,10,作者:张旭仟 版权所有 欢迎盗版,带参数的宏定义例如: #include 说,文件包含命令,所谓“文件包含”,是指一个源文件可以将另外一个源文件的全部内容包括进来。,C语言提供了#include命令用来实现“文件包含”的操作。其一般形式为:,#include "文件名" 或 #include ,说明:,(1)在#include命令中,文件名可以用双撇号或尖括号括起来。,(2)一个#include命令只能指定一个被包含文件,如果要包含n个文件,要用n个#include命令。,11/4/2024,11,作者:张旭仟

11、版权所有 欢迎盗版,文件包含命令所谓“文件包含”,是指一个源文件可以将另外一个源,文件包含命令,说明:,(3) 在一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。如下图所示,#include ,A,#include ,B,,C,file1.c,file2.c,file3.c,,,C,B,C,11/4/2024,12,作者:张旭仟 版权所有 欢迎盗版,文件包含命令说明:#include A#i,,小练习:,1、以下叙述中错误的是 (2008年4月),A)在程序中凡是以“#”开始的语句行都是预处理命令行,B)预处理命令行的最后不能以分号表示结束,C)#define MAX是合

12、法的宏定义命令行,D)C程序对预处理命令行的处理是在程序执行的过程中进行的,11/4/2024,13,作者:张旭仟 版权所有 欢迎盗版,小练习:1、以下叙述中错误的是 (2008年4月)9/21,,小练习:,2、有以下程序(2010年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);,},程序运行后的输出结果是,A)0 B)-12 C)-20 D)10,11/4/2024,14,作者:张旭仟 版权所有 欢迎盗版,小练习:2、有以下程序(20

13、10年3月)9/21/2023,,小练习:,3、有以下程序(2009年9月),#include,#define f(x) x*x*x,main(),{ int a=3,s,t; 3+1*3+1*3+1,s=f(a+1);,t=f((a+1));,printf("%d,%d",s,t);,},程序运行后的输出结果是,A)10,64 B)10,10 C)64,10 D)64,64,11/4/2024,15,作者:张旭仟 版权所有 欢迎盗版,小练习:3、有以下程序(2009年9月)9/21/2023,,小练习:,4、有以下程序,#include ,#define PT 3.

14、5;,#define S(x) PT*x*x;,mian(),{ int a=1, b=2;,printf(“%4.1f\n”,S(a+b)); 3.5*1+2*1+2,},程序运行后输出的结果是,A)14.0 B)31.5,C)7.5 D)程序有错无输出结果,11/4/2024,16,作者:张旭仟 版权所有 欢迎盗版,小练习:4、有以下程序9/21/202316作者:张旭仟,,小练习:,5、有一个名为init.txt的文件,内容如下:,#define HDY(A,B) A/B,#define PRINT(Y) printf(“y=%d\n”,Y),有以下程序,#include "stdio.h",#include "init.txt",main(),{ int a=1,b=2,c=3,d=4,k;,k=HDY(a+c,b+d);,PRINT(k);,},下面针对该程序的叙述正确的是(D),A)编译有错 B)运行出错,C)运行结果为 y=0 D) 运行结果为 y=6,11/4/2024,17,作者:张旭仟 版权所有 欢迎盗版,小练习:5、有一个名为init.txt的文件,内容如下:9,,,Thank listen!,11/4/2024,18,作者:张旭仟 版权所有 欢迎盗版,Thank listen! 9/21/202318作者:张旭,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  sobing.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!