C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt

C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt

ID:50043603

大小:640.00 KB

页数:129页

时间:2020-03-08

C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt_第1页
C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt_第2页
C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt_第3页
C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt_第4页
C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt_第5页
资源描述:

《C语言程序设计 教学课件 作者 孟庆昌 陈海鹏 马鸣远 刘振英 第11章 预处理 输入输出和文件操作.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第11章预处理、输入/输出和文件操作预处理功能11.1库函数使用方式11.2常用标准输入/输出函数11.3文件及有关操作11.4其他一些常用的函数(宏)11.5C语言的预处理功能由C编译的预处理程序实现,负责分析和处理行首以“#”号开头的控制行。由于它们是在编译程序的第一遍扫描(即词法和语法分析)之前进行,所以这部分程序称为预处理程序。C语言中并没有专门用于输入/输出的语句。为了给出方便的程序接口,C语言中提供了“标准I/O库”,它是一组函数,可提供一系列I/O服务。11.1.1宏定义和宏替换1.简单宏定义和宏替换简单宏定义的一般形

2、式是:#define标识符字符序列11.1预处理功能其中,标识符被称作宏名,一般用大写字母,以便阅读时容易与程序中的变量名或函数名相区别。例如:#definePI3.1415926对于像PI这样的宏在进行使用和处理时分为三个步骤:①在函数之外(往往在程序开头)使用#define控制行来定义宏名;②在程序中使用已定义的宏名;③在程序进行编译时,由预处理程序对宏名进行宏替换,恢复被宏名所代替的字符序列的原貌。例如:#defineN50#definePI3.1415926inta[N];doubler,l;l=2*PI*r;经过宏替换之后

3、,上述代码实际上就变成:inta[50];doubler,l;l=2*3.1415926*r;有关宏的定义和使用要注意以下几点。(1)宏定义在源程序中要单独占用一行,通常“#”号出现在一行的第一个字符的位置,允许在#号的前面有若干空格或制表符,但不允许有其他字符。(2)宏名用大、小写字母标识都行,为醒目起见,往往用大写字母表示。(3)用双引号括起来的标识符不做宏替换。例如:#defineTRUE1则打印语句printf("TRUE");会打印出TRUE,而不是1。(4)宏定义可以嵌套。例如:#definePI3.1415926#de

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

5、序列的其余部分在下一行中出现。(7)可以用宏定义来表示数据类型。例如:#defineMAX100#defineENTRYstructentrytype在程序中可用ENTRY定义变量:ENTRYtable[MAX],*p;(8)如果宏名出现在#号之后,则不对它进行替换。例如:#defineDEFdefine#DEFN10(9)宏名的有效范围是从定义它的地方开始到其所在文件末尾或者用#undef指令消除该宏定义为止。宏名不受分程序结构的影响,在其有效范围内遵循宏替换的规则。在标准C语言中还有另一种方法定义符号常量,即利用const关键字

6、。const修饰符可以出现在任何变量定义的前面。例如:constintpagesize=66;constfloatpi=3.1415926;带参数的宏定义的一般形式是:#define宏名(参数表)字符序列例如,定义一个计算圆面积的宏:#definePI3.1415926536#definearea(r)(PI*r*r)2.带参数的宏定义和宏替换在使用带参数的宏时应注意下面几点。(1)调用宏时所带的实参可以是常量、已被赋值的变量名或者表达式。例11-3将例11-2的程序改写为交互式输入半径值的方式。#definePI3.1415926

7、536#definearea(r)(PI*r*r)main(){floatr;printf("Input:r=?");scanf("%f",&r);printf("Area=%f",area(r));return(0);}(2)带参数的宏替换仍然是机械地进行替换,而不去理解用户的想法。例11-4本例说明宏替换可能存在副作用。#definePI3.1415926536#definearea(r)(PI*r*r)main(){printf("%f",area(4+6));return(0);}运行结果如下:42.566371

8、为了避免出现与常规理解上的不一致,建议对宏定义中字符序列的整体和各个参数都用圆括号括起来。例如,#definearea(r)(PI*(r)*(r))那么,area(4+6)将被替换为:(3.1415926536*(4+6)*(4+6)

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

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

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