C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt

C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt

ID:50043605

大小:211.00 KB

页数:87页

时间:2020-03-08

C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt_第1页
C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt_第2页
C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt_第3页
C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt_第4页
C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt_第5页
资源描述:

《C语言程序设计 教学课件 作者 孟庆昌 第10章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第10章预处理、输入/输出和文件操作C语言的预处理功能由C编译的预处理程序实现,负责分析和处理行首以“#”号开头的控制行。这些控制行包括宏替换、文件包含和条件编译等。C语言中并没有专门用于输入/输出的语句。为了给出方便的程序接口,C语言中提供了“标准I/O库”,它是一组函数,可提供一系列I/O服务。10.1预处理功能10.2文件包含10.3条件编译10.4其他预处理功能10.5库函数使用方式10.6常用标准输入/输出函数10.7文件及有关操作10.8其他一些常用的函数(宏)10.1预处理功能10.1.1简单宏定义和宏替换简单宏定义的一般形式是:#

2、define标识符字符序列其中,标识符称作宏名,一般用大写字母。例如:#definePI3.1415926对于像PI这样的宏在进行使用和处理时分为3个步骤:①在函数之外(往往在程序开头)使用#define控制行定义宏名;②在程序中使用已定义的宏名;③在程序进行编译时,由预处理程序对宏名进行宏替换,恢复被宏名所代替的字符序列的原貌。例如:#defineN50#definePI3.1415926…inta[N];doubler,l;…l=2*PI*r;…经过宏替换之后,上述代码实际上就变成:…inta[50];doubler,l;…l=2*3.141

3、5926*r;…有关宏的定义和使用要注意以下几点:①宏定义在源程序中要单独占用一行,通常“#”号出现在一行的第一个字符的位置,允许在#号的前面有若干空格或制表符,但不允许有其他字符。②宏名用大、小写字母标识都行,为醒目起见,往往用大写字母表示。③用双引号括起来的标识符不做宏替换。例如:#defineTRUE1则打印语句printf("TRUE");会打印出TRUE,而不是1。④宏定义可以嵌套。例如:#definePI3.1415926#defineTWOPI(2*PI)在预处理后,语句c1=TWOPI*r;便替换成c1=(2*3.1415926)

4、*r;⑤宏替换只是按原来的定义“机械地”进行替换,不管替换后的结果是对还是错。例如:#defineA3+2那么5/A被替换成5/3+2又如:#definePI3.l4l5q/*有错:4的前面是字母l,5的后面是字母q*/…area=PI*r*r;…照样进行宏替换:…area=3.l4l5q*r*r;…为了避免出现上述第一种情况造成的误解,应当把字符序列用括号括起来。#defineA(3+2)⑥如果宏定义中的字符序列过长,在一行中放不下,可在该行末尾加续行符“”,后随一个换行符。#defineLONG_STRINGthisisaverylongs

5、tringthatisusedas↙anexample⑦可以用宏定义来表示数据类型。#defineMAX100#defineENTRYstructentrytype在程序中可用ENTRY定义变量:ENTRYtable[MAX],*p;⑧如果宏名出现在#号之后,则不对它进行替换。例如:#defineDEFdefine#DEFN10⑨宏名的有效范围是从定义它的地方开始到其所在文件末尾或者用#undef指令消除该宏定义为止。宏名不受分程序结构的影响,在其有效范围内遵循宏替换的规则。10.1.2带参数的宏定义1.带参数宏定义的一般格式带参数的宏定义的一

6、般形式是:#define宏名(参数表)字符序列例如,定义一个计算圆面积的宏:#definePI3.1415926536#definearea(r)(PI*r*r)例10-2:下面的程序中使用了带参数的宏,它计算并输出给定半径的圆的面积。#definePI3.1415926536#definearea(r)(PI*r*r)voidmain(){printf("%f",area(6.18));}2.几点使用说明①使用宏定义时所带的实参可以是常量、已被赋值的变量名或者表达式。例10-3:将例10-2的程序改写为交互式输入半径值的方式。#define

7、PI3.1415926536#definearea(r)(PI*r*r)voidmain(){floatr;printf("Input:r=?");scanf("%f",&r);printf("Area=%f",area(r));}②带参数的宏替换与简单的宏替换在替换规则上是一致的,都是机械地进行替换,而不去理解用户的想法。例10-4:本例说明宏替换可能存在副作用。#definePI3.1415926536#definearea(r)(PI*r*r)voidmain(){printf("%f",area(4+6));}为了避免出现与常

8、规理解上的不一致,建议对宏定义中字符序列的整体和各个参数都用圆括号括起来。例如,#definearea(r)(PI*(r)*(r))那么

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。