面如图1-1所示。
图1-1 Microsoft Visual C++6.0集成开发环境
VC6.0集成开发环境的主框架窗口由标题栏、菜单栏、工具栏、工作区、客户区、输出窗口和状态栏等组成。标题栏用于显示应用程序名和当前打开的文件名;工作区用于显示当前打开工程的有关信息,包括工程的类、资源以及文件组成等内容;客户区用于文本编辑器、资源编辑器等进行文件或资源的编辑;输出窗口用于输出编译信息、调试信息和一些查询结果信息等;状态栏用于显示关于菜单栏、工具栏等的简单说明信息以及文本编辑器中当前光标所在的行列号等。
二、C程序的编译与链接
在计算机上运行一个C程序,必须经过以下几个步骤:输入与编辑源程序→编译源程序得到目标程序→将目标程序与系统库函数连接得到可执行程序→运行可执行程序得到结果。整个过程如图1-2所示。
6
图1-2 C程序运行流程图
下面以创建一个最简单的C语言程序为例,介绍如何在VC 6.0环境下创建、编写、编译、调试、运行一个C语言程序。此处假定程序只由一个源文件组成,即单文件程序。
1. 启动VC 6.0集成开发环境。
2. 新建一个文件。选择菜单栏中的“File”(文件),在其下拉菜单中选择“New”(新建),屏幕上出现New(新建)对话框,如图1-3所示。
图1-3 New(新建)对话框
该对话框包含四个标签:Files(文件)、Projects(工程)、Workspaces(工作区)和Other Documents(其它文档)。选择Files标签,在其下列表中选择“C++ Source File”项,在对话框右边的File(文件名)文本框中输入将要编辑的源程序文件的名称,例如“c1.c”。“.c”是C
7
源程序的后缀,如果不指定后缀,默认后缀是“.cpp”,其为C++源程序的后缀。在Location(位置)文本框中输入将要编辑的源程序文件的存储路径,或单击该文本框后的图标选择路径。此处假定路径为“D:\\C程序示例”。单击“OK”(确定)按钮,回到主窗口。
3. 编辑C语言程序源代码。在主窗口的客户区中输入并编辑如下程序: #include
输入编辑完成后,选择菜单“File”下的“Save”保存源程序文件,也可以按工具栏上的按钮,或是使用快捷键“Ctrl+S”。
如果要打开一个已有的源文件,选择菜单“File”下的“Open”(打开)子菜单,在弹出的Open对话框中选择要打开的源文件路径和名称。
4. 编译源文件。选择菜单栏中的“Build”(构建),在其下拉菜单中选择“Compile c1.c”(编译c1.c)编译文件,也可以使用工具栏上的译命令后,屏幕上出现如图1-4所示的对话框。
按钮,或是使用快捷键“Ctrl+F7”。单击编
printf(\printf (\printf(\
图1-4
意思是:此编译命令要求一个有效的项目工作区,你是否同意建立一个默认的项目工作区?单击“是”按钮。表示同意由系统建立默认的项目工作区,然后开始编译程序。
在对源代码进行编译时如果出现错误,在输出窗口中会显示错误的位置和类型。错误信息分为两类:以error提示的致命错误和以warning提示的警告错误。如果有error错误,程序编译不能通过,也就无法运行。而warning错误不影响生成目标程序和可执行程序,但是可能会影响程序运行的结果。例如在输入时故意漏掉最后一个printf语句后面的分号,那么程序经过编译后在输出窗口中出现的提示信息如图1-5所示。
8
图1-5 输出窗口提示信息
“1 error(s)”表明在程序中有一个错误。在输出窗口的错误提示行上双击鼠标左键,可以定位至程序中的出错处(在客户区的程序中出现一粗箭头指向被报错的程序行)。
程序中的错误通常叫做bugs,发现和修正这些错误的过程叫做调试(debugging)。 值得注意的是,并不是任何时候真正的错误就出现在该行,有时候需要扩大差错范围才能找到错误之所在。另外如果提示有多个错误,我们没有必要试图一次性改正所有的错误,可以先修改一个或两个(最好是你能立即理解并知道如何修正的错误),然后重新编译,此时某些错误提示可能就会消失。不断调试程序,直到输出窗口中显示“c1.obj - 0 error(s), 0 warning(s)”。“c1.obj”是“c1.c”经过编译后生成的目标文件。
5. 连接程序。选择菜单栏中的“Build”,在其下拉菜单中选择“Buid c1.exe”(构建c1.exe),也可以使用工具栏上的
按钮,或是使用快捷键“F7”。完成连接后生成了可执行文件c1.exe。
三、C程序的运行
得到可执行文件c1.exe后,选择菜单栏中的“Build”,在其下拉菜单中选择“!Execute c1.exe”(执行c1.exe),也可以使用工具栏上的运行结果窗口如图1-6所示。
按钮,或是使用快捷键“Ctrl+F5”运行程序。
图1-6 运行结果窗口
运行结果的窗口中共有四行信息,前三行通过程序中的printf语句输出,最后一行“Press any key to continue”并不是程序所产生的输出结果,而是VC 6.0系统自动加上的一行信息,所有程序运行结果的最后一行都会自动添加此行信息,意思是:按任意键继续。当按下任意
9
一键后,该窗口消失,返回VC 6.0的主窗口。
以上只是介绍一个程序只包含一个源文件的情况,如果一个程序包含了多个源文件,只是在程序的创建上有所不同,程序的编译、连接及运行方法一样,具体请参考其它相关书籍,此处不再赘述。
第五节 算法
一、算法概念
著名计算机科学家沃思(Nikiklaus Wirth)提出如下公式:程序=算法+数据结构 算法是程序的灵魂,数据结构是加工对象。除了这两个要素外,一个程序还应当采取合适的设计方法及选择合适的工具。所以,程序应该包含四个方面,表示成公式即为:
程序=算法+数据结构+程序设计方法+语言工具和环境 本书重点在C语言上,所以对算法只是进行简单的介绍。
何为算法?简单地理解,算法就是逐步解决问题的方法。例如要研究一个从四个数中找出最大数的算法,我们可能会采取以下步骤:
S1:比较第一和第二个数,把两个数中较大的那个数放在当前最大值中; S2:用当前的最大值与第三个数进行比较,两者中较大数放在当前最大值中; S3:用当前的最大值与第四个数进行比较,两者中较大数放在当前最大值中。 这时的当前最大值就是四个数中最大的那个数。 一个算法应该具有以下特点:
(1)有穷性:一个算法应包含有限的操作步骤,即算法必须能够在有限的时间内终止。 (2)确定性:算法的每一步都必须有清晰明白的定义,而不能是含糊的、模棱两可的。 (3)有零个或多个输入。
(4)有一个或多个输出。算法必须产生结果,否则就失去了意义。 (5)有效性:算法中每一步应当能有效地执行,并得到确定的结果。
二、算法举例
例1.4 求1+2+3+…+100。
设两个变量:sum表示被加数,n表示加数,每次相加的结果放在被加数sum中。算法表示如下:
S1:1→sum S2:1→n S3:n+1→n S4:sum+n→sum
S5:如果n小于100,返回重新执行S3及其以后的步骤;否则,算法结束,最后得到的sum值就是所要的结果。
例1.5 输入一个大于或等于3的正整数,判断它是否是素数。
所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的数。判断一个数是
10