3.1 实验目的 - Tsinghua University

11
3 程序开发环境的使用 我们知道,程序开发要经历源程序编辑、编译、链接、运行、调试等多个重复环节, 对于早期的程序员来说,每一个环节都是由独立的工具完成的,即程序的编辑器、编译器、 连接器、调试器都是独立的程序工具,在这样的环境下,程序员的工作效率比较低。随着 软件技术的进步,逐渐出现了集成开发环境(IDE)。所谓集成开发环境就是将源程序的编 辑、编译、链接、运行、调试等程序开发的基本环节集成在一个平台上,以提高程序质量 和程序开发效率。 由于 C 语言是 C++语言的子集,所以无论哪个开发环境,C 语言和 C++语言的开发工 具是统一的,一套集成开发环境既可以开发 C 语言程序,也可以开发 C++程序。 3.1 实验目的 1)了解和使用 Visual C++ 6.0(简称 VC)集成开发环境。 2)熟悉 VC 的控制台应用程序的开发、调试步骤和方法。 3)掌握 C 程序的编辑、编译、链接和运行过程。 4)了解项目、文件、工作区等基本概念。 5)能理解常见错误的提示信息,并根据提示进行改错。 3.2 相关知识点 3.2.1 C 语言的组成特点 1C 语言的基本构成要素是函数,程序的入口点是主函数。程序从主函数的第一条 语句开始执行,主函数的最后一条语句执行完毕,程序执行结束。 2)程序是处理数据的,所以一般的程序都会有输入输出语句。C 语言的输入输出是 以库函数的形式给出的。基本的输入输出函数是 scanf printf3C 语言库函数的原型说明都是放在相关的头文件中的,函数 scanf printf 放在 stdio.h 文件中。

Transcript of 3.1 实验目的 - Tsinghua University

Page 1: 3.1 实验目的 - Tsinghua University

第 3 章 程序开发环境的使用

我们知道,程序开发要经历源程序编辑、编译、链接、运行、调试等多个重复环节,

对于早期的程序员来说,每一个环节都是由独立的工具完成的,即程序的编辑器、编译器、

连接器、调试器都是独立的程序工具,在这样的环境下,程序员的工作效率比较低。随着

软件技术的进步,逐渐出现了集成开发环境(IDE)。所谓集成开发环境就是将源程序的编

辑、编译、链接、运行、调试等程序开发的基本环节集成在一个平台上,以提高程序质量

和程序开发效率。

由于 C 语言是 C++语言的子集,所以无论哪个开发环境,C 语言和 C++语言的开发工

具是统一的,一套集成开发环境既可以开发 C 语言程序,也可以开发 C++程序。

3.1 实验目的

(1)了解和使用 Visual C++ 6.0(简称 VC)集成开发环境。

(2)熟悉 VC 的控制台应用程序的开发、调试步骤和方法。

(3)掌握 C 程序的编辑、编译、链接和运行过程。

(4)了解项目、文件、工作区等基本概念。

(5)能理解常见错误的提示信息,并根据提示进行改错。

3.2 相关知识点

3.2.1 C 语言的组成特点

(1)C 语言的基本构成要素是函数,程序的入口点是主函数。程序从主函数的第一条

语句开始执行,主函数的 后一条语句执行完毕,程序执行结束。

(2)程序是处理数据的,所以一般的程序都会有输入输出语句。C 语言的输入输出是

以库函数的形式给出的。基本的输入输出函数是 scanf 和 printf。

(3)C 语言库函数的原型说明都是放在相关的头文件中的,函数 scanf 和 printf 放在

stdio.h 文件中。

Page 2: 3.1 实验目的 - Tsinghua University

程序设计实践教程(C 语言描述) 68

3.2.2 C 语言上机开发程序过程

现在我们暂时不考虑怎么样设计一个程序。假设我们已经在纸上或头脑里编写出了一

个 C 语言程序,那么如何上机实践将我们的想法或者在纸上编写的程序变成可执行的程序,

以验证我们所编写的程序是否正确呢?这是初学 C 语言时必须解决的问题。这个过程可以

用图 3-1 来说明。

图 3-1 C 语言上机实践过程

1.编辑、修改源程序

首先我们需要一个编辑器以编辑或者修改源程序。理论上讲,任何一个文本处理器都

可以作为源程序编辑器,最简单的编辑器就是 Windows 操作系统的记事本程序。当然现在

大多数 C 语言集成开发环境都自带编辑器。这一步的输出结果是源程序文件(例如 xx.c)。

C 语言的源程序文件一般以.c 作为扩展名。

2.将源程序编译成二进制文件

源程序编辑完成后,这一步使用编译器编译源程序。编译器完成以下两方面的任务。

(1)检查源程序语法。如果源程序中存在语法错误,那么编译器会给出语法错误的相

关提示信息。不同的编译器给出的语法错误信息的详细程度不同。但即使最简单的编译器,

也会给出语法错误所在的行号。更高级的编译器还会给出语法错误具体信息,例如变量未

定义、括号不匹配等。

(2)编译生成目标文件。如果源程序已经没有语法错误,那么用编译器将源程序编译

成二进制代码文件,实质上就是将 C 语言语句翻译成对应的二进制机器指令,将这些二进

制机器指令保存到一个文件中,这样的文件称为目标文件(例如 xx.obj)。

3.构建可执行程序

在第 2 步生成的目标文件尽管是机器指令,但是一般情况下还不能直接运行,必须使

用连接器将目标文件构建成可执行程序,这个过程也称为连接过程。连接器完成下面几个

任务:

Page 3: 3.1 实验目的 - Tsinghua University

第 3 章 程序开发环境的使用 69

(1)绝大多数的 C 语言程序都需要标准库函数支持,所有的标准库函数都已经被编译

成二进制代码,并且存放在一个库文件之中。所以必须将库文件与目标文件合并在一起(链

接)才能构成独立的可执行文件。 如果某些函数在本程序中没有实现,在库函数中也没有

实现,那么连接器也会报错。

(2)不同的操作系统,其可执行文件的格式不一样。必须将目标文件转换成操作系统

能认识的可执行文件格式。

需要说明的是,现代的集成开发环境一般都将编辑器、编译器和连接器集成在一起,

我们上机时能够明确“看见”的只有源程序编辑器(实际上是编辑窗口),而编译器和连接

器在后台工作,不需要我们手动调用,只需要按一两个按钮或者快捷键即可。详细情况见

本章后面的实验范例。

3.2.3 集成开发环境介绍

集成开发环境(Intergrated Development Environment,IDE)可以给程序员提供很大的

帮助。大多数的 IDE 包含编辑器、编译器、链接器、调试器这四个组件。例如微软的 Visual

Studio 本身内置的编译器就是很好的例子。Codeblocks 是另一个很好的例子。

程序员使用 IDE 的主要原因是开发应用程序的各个组成部分之间可方便地进行切换。

一般一个特定的 IDE 负责处理一种编程语言,但也有一些支持多种编程语言的 IDE,例如

NetBeans、Microsoft Visual Studio、MyEclipse、WinDev 和 Xcode 等。

IDE 的宗旨是提供一个强大和易于使用的用于创作、修改、编译、部署、调试软件,

并增加开发人员的软件生产效率的环境。

目前用得 多的 C/C++集成开发环境有下面几种:

(1)微软公司的 Visual C++系列:Visual C++是微软 Visual Studio 套件的一个组成部

分,可以独立安装。作为初学者,比较适用的是 Visual C++ 6.0,Visual C++ 6.0 是微软 1998

年发布的 Visual studio 6.0 套件的一部分,是基于 Windows 平台的 C/C++语言开发工具。它

不仅支持 C++语言的编程,也兼容 C 语言的编程。

尽管微软公司后续又发布了多个 Visual Studio 套件(如 2003 版、2005 版、2008 版和

2010 版),但是作为初学者,Visual C++ 6.0 合适。

微软 Visual Studio 套件只能用在 Windows 操作系统下,也就是说,只能开发 Windows

应用程序,不能开发其他操作系统的应用程序。

(2)Codeblocks。Code::Blocks (codeblocks)是一个开源、免费、跨平台的 C/C++集成开

发环境。官方网站上称其能满足 苛刻的用户需求。其功能比较强大,可以扩展插件,有

插件向导功能,可以方便地创建自己的插件。Code::Blocks 是用 C++编写的(用 wxWidgets

库),捆绑了 MinGW 编译器。

Codeblocks 集成开发环境是跨操作系统平台的, 因此 Codeblocks 既可以开发 Windows

应用程序,也可以开发 UNIX(Linux)系统的应用程序。

(3)PellsC。PellsC 是一个小巧的 C/C++集成开发环境。其特点是界面与 VC++ 6.0 相

似,快捷键与 VC++ 6.0 完全相同,可以作为 VC++ 6.0 的替代品。

Page 4: 3.1 实验目的 - Tsinghua University

程序设计实践教程(C 语言描述) 70

尽管我们这里介绍了三种集成开发环境,但是初学者开始学习时只需要认真掌握一种

开发环境即可。如果掌握了一种开发环境的使用,再想学习其他的开发环境是一件很轻松

的事情。本教材后面的范例以 VC++ 6.0 作为开发环境。

3.3 实验范例

【实验 3-1】 Visual C++ 6.0 集成环境的使用。

1.问题描述

使用 Visual C++ 6.0 集成环境编辑、编译并运行下面的示例程序:

#include<stdio.h> void main() { printf("This is my first C program!\n"); }

说明:本题要求完成一个字符串的输出,并且是“依葫芦画瓢”!

2.实验步骤

(1)首先建立一个存放 C 语言源程序的文件夹。本例中,我们在 F 盘的文件夹

Meshwork 下创建一个子文件夹 C_E。后续实验的所有文件都放在这个文件夹下①。本书所

有实验文件夹的完整的路径是:F:\Meshwork\C_E。

(2)启动 VC++ 6.0 开发环境。选择菜单“开始”→“程序” →Microsoft Visual Studio

6.0→Microsoft Visual C++ 6.0,得到 Visual C++ 6.0 启动后的用户界面,如图 3-2 所示。

图 3-2 Visual C++ 6.0 用户界面

① 注:建议大家养成一个好习惯,每次实验前建立一个自己的独立文件夹。

Page 5: 3.1 实验目的 - Tsinghua University

第 3 章 程序开发环境的使用 71

(3)创建新项目。

① 单击菜单 File→New,显示 New 对话框,如图 3-3 所示。

图 3-3 “新建”对话框

② 在左边标签栏中,选中 Project 标签,然后在标签下面的列表栏中选择 Win32 Console

Application(Win32 控制台应用程序①)。在右边的 Project name 输入框中输入一个项目名,本

例输入“ep3_1”。在 Location 位置框中,单击 按钮,选择项目所在的路径,这里我们选

择在第(1)步中建立的文件夹路径 F:\Meshwork\My_CP\,单击“确定”按钮。

③ 在“Win32 Consol Application-Step 1 of 1”对话框中选择 An empty project 单选项。

然后单击“完成”按钮,如图 3-4 所示。

图 3-4 Win32 Consol Application-Step 1 of 1 对话框

① “控制台应用程序”是一种在 DOS 窗口中运行的基于字符界面的程序。由于这种类型的应用程序比纯

Windows 界面程序简单,这样使得我们可以将精力先投入到学习使用 C 编程语言,而不需要把过多的精

力投入到学习复杂的 Windows 界面编程中去。

Page 6: 3.1 实验目的 - Tsinghua University

程序设计实践教程(C 语言描述) 72

(4)建立 C 语言源程序文件。

① 单击菜单 File→New,显示 New 对话框,选择 Files 标签,如图 3-5 所示。在列表

栏中,选择 C++ Source File,然后在右边的 File 输入框中输入源程序的文件名 ep3_1.c。

图 3-5 “新建”窗口

② 单击“确定”按钮,则创建完成了一个源程序文件,并出现编辑窗口,如图 3-6

所示。

图 3-6 C++源程序编辑窗口

Page 7: 3.1 实验目的 - Tsinghua University

第 3 章 程序开发环境的使用 73

③ 在“源程序编辑”窗口下编辑 C 源程序,如图 3-7 所示。

图 3-7 编辑 C 源程序

(5)编译链接和运行源程序。

① 选择菜单项 Build,出现“compile ep3_1.c”菜单项,这时系统开始对当前的源程序

进行编译,在编译过程中,将所发现的错误显示在屏幕下方的 Build 窗口中(如图 3-8 所示)。

所显示的错误信息中指出该错误所在行号和该错误的性质。用户可根据这些错误信息定位、

修改程序错误。

图 3-8 “编译”窗口

② 编译无错误后,可进行链接生成可执行文件(.exe),这时选择 Build 下拉菜单中的

“build e3_1.exe”选项。Build 窗口出现如图 3-9 所示的信息说明编译链接成功,并生成以

源文件名为名字的可执行文件(ep3_1.exe)。

Page 8: 3.1 实验目的 - Tsinghua University

程序设计实践教程(C 语言描述) 74

图 3-9 编译链接信息

③ 运行可执行文件的方法是选择 Build 菜单项中的“Execute ep3_1.exe”选项。这时,

运行该可执行文件,并将结果显示在另外一个显示执行文件输出结果的窗口中,如图 3-10

所示。

图 3-10 运行 C 程序结果

(6)关闭和打开工作区。单击菜单“文件”→“关闭工作区”,关闭工作区。单击菜单

“文件”→“打开工作区”,在弹出的对话框中选定“F:\meshwork\my_cp\ep3_1 \ep3_1.dsw”,

单击“打开”按钮,则可打开工作区,对已建立的项目文件进行修改。

3.实验小结

(1)关于编译、运行程序及调试程序的快捷工具栏和快捷键的使用可参看 1.4 节的

内容。

(2)如果只是开发控制台应用程序,可以采用更简单的方法和步骤(假设我们新建的

程序文件名是 xx.c)。

① 在存放程序的文件夹下新建文本文件 xx.c;

② 用鼠标双击 xx.c 文件,自动打开 VC++开发平台;

③ 编辑程序语句;

④ 编译程序(按快捷工具栏的编译按钮或者快捷键 Ctrl+F7),自动建立项目文件。

Page 9: 3.1 实验目的 - Tsinghua University

第 3 章 程序开发环境的使用 75

3.4 课内实验

3.4.1 基本输入与输出

【实验 3-2】

1.问题描述

从键盘输入两个数据,计算它们的和,并打印输出在屏幕上。源程序代码如下:

#include<stdio.h> void main() { int a,b,s; /* 定义变量 */ printf(" Enter two number a,b=?\n"); scanf("%d%d", &a,&b); /*调用标准函数,要求用户输入两个数据*/ s=a+b; printf("s=%d\n",s); }

说明:本题要求完成基本的键盘输入和屏幕输出的练习。

2.实验步骤与要求

(1)在 VC++ 6.0 编辑环境下建立编辑源程序。

(2)编译直到程序没有错误。

(3)从键盘输入 10 20↙,运行结果如何?

(4)从键盘输入 10,20↙,运行结果如何?

(5)任意输入两个整数,之间用“空格”或者 Enter 键或者 Tab 键分隔,结果如何?

3.4.2 数据交换

【实验 3-3】

1.问题描述

从键盘输入两个实数,交换它们的值。下面是 C 程序:

1. #include<stdio.h> 2. void main() 3. { 4. double a,b,temp; 5. printf("输入两个实数 a,b=?\n");

Page 10: 3.1 实验目的 - Tsinghua University

程序设计实践教程(C 语言描述) 76

6. scanf("%lf%lf",&a,&b); 7. temp=a; /* 将 a 的值存储起来 */ 8. a=b; /* 将 b 的值转到 a 中,实现 b向 a 转换 */ 9. b=temp; /* 将记录 a 原始值的变量 temp赋值给 b, 实现 a向 b转换 */ 10. printf(" 交换后 a=%lf,b=%lf\n",a,b); 11. }

2.实验步骤与要求

(1)在 VC++ 6.0 编辑环境下建立编辑源程序。

(2)编译直到程序没有错误。

(3)从键盘输入 10 20↙,运行结果如何?

(4)在第 7 行之前增加一条语句,输出变量 a 和 b 的原始数据值,然后运行程序,观

察结果。

3.4.3 求自然数的累加和

【实验 3-4】

1.问题描述

求 1 到 100 之间的 100 个自然数的累加和,即求 1+2+3+4+5+…+100 的值,程序源代

码如下:

#include<stdio.h> void main() { int i,sum=0; for(i=1;i<=100;i++) sum=sum+i; /*累加求和 */ printf("sum=%d\n",sum); }

说明:

(1)本题要求完成经典的 C 算法——累加求和,当我们把计算方法教给计算机后,剩

下计算的问题就让计算机来算好了,计算机会像一头老黄牛一样不厌其烦地做事情。其他

相似的计算如“连乘”,“求级数”,“求p”,“求阶乘”等都与此类似。

(2)本实验用到了循环语句(for 语句),同学们可能还没学到这里,没关系,只需照

猫画虎,将源程序编辑、保存、运行即可,主要是体验开发环境的使用。

2.实验步骤与要求

(1)在 VC++编辑环境下编辑源程序。

(2)编译直到程序没有错误。

Page 11: 3.1 实验目的 - Tsinghua University

第 3 章 程序开发环境的使用 77

(3)观察运行结果是否正确。

3.5 课外实验

【实验 3-5】 编写一个 C 程序,输入 a,b,c 三个值,输出其中 大者。

【实验 3-6】 编写一个 C 程序,计算 8!