资源描述:
《c语言程序设计现代方法15-编写大型程序ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第15章编写大型程序1Copyright©2008W.W.Norton&Company.Allrightsreserved.源文件一个C程序可以分成任意数量的源文件。依照惯例,源文件具有.c扩展名。每一个源文件包含部分程序,主要是函数和变量的定义。必须有一个源文件包含一个名为main的函数,它是程序的入口。Copyright©2008W.W.Norton&Company.Allrightsreserved.2源文件考虑编写一个简单的计算器程序。程序可以求按波兰式输入的整型表达式的值。在逆波兰式中,操作符在操作数之后。如果用户输入这样一个表达式305-7*程序应该打印出它的值(在本例
2、中是175).Copyright©2008W.W.Norton&Company.Allrightsreserved.3源文件程序逐个读入操作数和操作符,并使用一个栈去追踪中间结果。如果程序读入一个数,它就把这个数压入栈。如果程序读入一个操作符,它就从栈里弹出两个数,并执行该运算,然后将计算结果压入栈。当程序到达用户输入的末尾时,表达式的值就已经在栈中。Copyright©2008W.W.Norton&Company.Allrightsreserved.4源文件怎样计算表达式305-7*将30压入栈.将5压入栈.弹出栈顶的两个数,将30减去5,得25,然后将结果压回栈.将7压入栈.弹
3、出栈顶的两个数,将它们相乘,再把结果压回栈.现在栈里就是175,即表达式的值.Copyright©2008W.W.Norton&Company.Allrightsreserved.5源文件程序的主函数将包含一个执行如下操作的循环:读入一个符号(数或运算符).如果它是数,就把它压入栈.如果是运算符,就从栈里弹出操作数,并执行该运算,然后把结果压入栈.当把这样一个程序分成文件时,把相关的函数和变量放在同一个文件中是有意义的.Copyright©2008W.W.Norton&Company.Allrightsreserved.6源文件读入符号的函数和相关的处理符号的函数一起,可以形成一个
4、源文件(设为token.c).与栈相关的函数,如push,pop,make_empty,is_empty,和is_full可以放入一个不同的文件stack.c.表示栈的变量也应该放入stack.c.主函数放入另外一个文件calc.c.Copyright©2008W.W.Norton&Company.Allrightsreserved.7源文件将一个程序分为多个源文件有重大好处:把相关的函数和变量放入一个文件中有助于澄清程序的结构.每个源文件可以单独编译,节省时间.函数能够更容易地用于其他程序中.Copyright©2008W.W.Norton&Company.Allrightsre
5、served.8头文件当一个程序分为几个源文件时,会有如下问题:一个文件中的函数怎样调用在另一个文件中定义的函数?函数怎样访问其他文件中的外部变量?两个文件怎样共享相同的宏定义和类型定义?答案在于#include,它使多个文件共享信息成为可能.Copyright©2008W.W.Norton&Company.Allrightsreserved.9头文件#include告诉预处理器把指定的文件内容插入进来.多个文件需要共享的信息可以放入这样一个文件中.然后用#include就可以把这个文件的内容包含到每一个源文件中.这样被包含进来的文件就叫头文件(有时也叫包含文件).依照惯例,头文件
6、具有.h扩展名.Copyright©2008W.W.Norton&Company.Allrightsreserved.10#include#include有两种主要形式.一种用于C库中的头文件:#include另一种用于所有的其他头文件:#include"filename"两者的不同之处在于编译器如何确定头文件的位置.Copyright©2008W.W.Norton&Company.Allrightsreserved.11#include定位头文件的典型规则:#include:查找系统头文件所在的路径.#include“filename”:查
7、找当前路径,然后查找系统头文件所在的路径.查找头文件的位置可以改变,通常通过命令行选项,例如-Ipath.Copyright©2008W.W.Norton&Company.Allrightsreserved.12#include不要用尖括号包含你写的文件:#include/***WRONG***/预处理器可能会在系统头文件所在的地方寻找myheader.hCopyright©2008W.W.Norton&Company.Allrightsres