admin 管理员组文章数量: 1086019
2025年1月2日发(作者:无限debugger)
C 语言上机操作指导
程序设计是实践性很强的过程,任何程序最终都必须在计算机上运行,以检验
程序的正确与否。因此在学习程序设计中,一定要重视上机实践环节,通过上机可
以加深理解C语言的有关概念,以巩固理论知识,另一方面也可以培养程序调试的
能力与技巧。
1(C语言程序的上机步骤
按照C 语言语法规则而编写的C 程序称为源程序。源程序由字母、数字及其
它符号等构成,在计算机内部用相应的ASCII 码表示,并保存在扩展名为“(C”
的文件中。源程序是无法直接被计算机运行的,因为计算机的CPU 只能执行二进
制的机器指令。这就需要把ASCII 码的源程序先翻译成机器指令,然后计算机的
CPU 才能运行翻译好的程序。
源程序翻译过程由两个步骤实现:编译与连接。首先对源程序进行编译处理,
即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序(扩
展名为“(OBJ”的文件)。但目标程序还不能马上交计算机直接运行,因为在源程
序中,输入、输出以及常用函数运算并不是用户自己编写的,而直接调用系统函数
库中的库函数。因此,必须把“库函数”的处理过程连接到经编译生成的目标程序
中,生成可执行程序(扩展名为“(EXE”的文件),并经机器指令的地址重定位,便
可由计算机运行,最终得到结果。
C语言程序的调试、运行步骤可以用图A-1 表示:
图A-1 C 语言程序的调试、运行步骤
图A-1 中,虚线表示当某一步骤出现错误时的修改路线。运行时,无论是出现
编译错误、连接错误,还是运行结果不对(源程序中有语法错误或逻辑错误),都需
要修改源程序,并对它重新编译、连接和运行,直至将程序调试正确为止。
除了较简单的情况,一般的程序很难一次就能做到完全正确。在上机过程中,
根据出错现象找出错误并改正称为程序调试。我们要在学习程序设计过程中,逐步
培养调试程序的能力,它不可能靠几句话讲清楚,要靠自己在上机中不断摸索总
结,它可以说是一种经验积累。
程序中的错误大致可分为三类:
程序编译时检查出来的语法错误;
连接时出现的错误;
程序执行过程中的错误。
编译错误:通常是编程者违反了C 语言的语法规则,如保留字输入错误、大括
号不匹配、语句少分号等等。连接错误:一般由未定义或未指明要连接的函数,或
者函数调用不匹配等因素引起,对系统函数的调用必须要通过“include”说明。
对于编译连接错误,C 语言系统会提供出错信息,包括出错位置(行号)、出错
提示信息。编程者可以根据这些信息,找出相应错误所在。有时系统提示的一大串
错误信息,并不表示真的有这么多错误,往往是因为前面的一两个错误带来的。所
以当你纠正了几个错误后,不妨再编译连接一次,然后根据最新的出错信息继续纠
正。
运行错误:有些程序通过了编译连接,并能够在计算机上运行,但得到的结果
不正确,这类在程序执行过程中的错误往往最难改正。错误的原因一部分是程序书
写错误带来的,例如应该使用变量x 的地方写成了变量y,虽然没有语法错误,但
意思完全错了;另一部分可能是程序的算法不正确,解题思路不对。还有一些程序
有时计算结果正确,有时不正确,这往往是编程时,对各种情况考虑不周所致。解
决运行错误的首要步骤就是错误定位,即找到出错的位置,才能予以纠正。通常我
们先设法确定错误的大致位置,然后通过C 语言提供的调试工具找出真正的错
误。
为了确定错误的大致位置,可以先把程序分成几大块,并在每一块的结束位
置,手工计算一个或几个阶段性结果,然后用调试方式运行程序,到每一块结束
时,检查程序运行的实际结果与手工计算是否一致,通过这些阶段性结果来确定各
块是否正确。对于出错的程序块,可逐条仔细检查各语句,找出错误所在。如果出
错块程序较长,难以一下子找出错误,可以进一步把该块细分层更小的块,按照上
述步骤进一步检查。在确定了大致出错位置后,如果无法直接看出错误,可以通过
单步运行相关位置的几条语句,逐条检查,一定能找出错误的语句。
当程序出现计算结果有时正确有时不正确的情况时,其原因一般是算法对各种
数据处理情况考虑不全面。解决办法最好多选几组典型的输入数据进行测试,除了
普通的数据外,还应包含一些边界数据和不正确的数据。比如确定正常的输入数据
范围后,分别以最小值、最大值、比最小值小的值和比最大值大的值,多方面运行
检查自己的程序。
下面我们以VC++6.0 为上机平台,对C 程序编译、连接和调试作简单介绍。
建议一开始学习上机时,把注意力放在程序的编译、连接和运行,以能运行为目
标,而把调试部分放到学习了第5 章后再看,只有具有一定的程序语句量,调试
才有作用。
2 Visual C++ 语言集成环境
C++语言是在C 语言的基础上发展而来,它增加了面向对象的编程,成为当今
最流行的一种程序设计语言。Visual C++是微软公司开发的,面向Windows 编程
的C++语言工具。它不仅支持C++语言的编程,也兼容C 语言的编程。由于VC++被
广泛地用于各种编程,使用面很广。这里简要地介绍如何在VC++下运行C 语言程
序。
2(1 启动VC++
VC++是一个庞大的语言集成工具,经安装后将占用几百兆磁盘空间。从“开
始”—“程序”—“Microsoft Visual Studio 6.0”—“Microsoft Visual C++
6.0”,可启动VC++,屏幕上将显示图A-2 所示的窗口。
图A-2 VC++窗口
2(2 新建/打开C 程序文件
选择“文件”菜单的“新建”菜单项,单击如图A-3所示的“文件”标签,选
中“C++Source File”,按“确定”。然后在编辑窗口中输入程序。
如果程序已经输入过,可选择“文件”菜单的“打开”菜单项,并在查找范围
中找到正确的文件夹,调入指定的程序文件。
图A-3 新建文件
2(3 程序保存
在打开的VC++界面上,可直接在编辑窗口输入程序,由于完全是Windows 界
面,输入及修改可借助鼠标和菜单进行,十分方便。当输入结束后,保存文件时,
应指定扩展名“.C”,否则系统将按C++扩展名“.CPP”保存。如图A-4 所示。
图A-4 指定保存文件名
2(4 执行程序
首先要生成可执行文件。使用VC++“编译”菜单中的“构件”菜单项,如图
A-5 所示,也可使用快捷键【F7】。在编译连接过程中VC++将保存该新输入的程
序,并生成一个同名的工作区。保存文件时须填入文件名,如“4-1.C”。假如不
指定扩展名.C,VC++会把扩展名定义为.CPP,即C++程序。
图A-5 编译连接菜单
图A-6 编译连接正确
如果程序没有错误,将在图A-6 信息窗口中显示内容:0 error(s) 0
warning(s)。表示没有任何错误。有时出现几个警告性信息(warning),不影响程
序执行。假如有致命性错误(error),如图A-7 所示,双击某行出错信息,程序窗
口中会指示对应出错位置,根据信息窗口的提示分别予以纠正。然后用“编译”菜
单中的“执行”菜单项(或快捷键【Ctrl】+【F5】)执行程序。
图A-7 编译连接出错
当运行C 程序后,VC++将自动弹出数据输入输出窗口,如图A-8 所示。按任
意键将关闭该窗口
对于编译连接执行操作,VC++还提供了一组工具按钮,如图A-9 所示。
图A-9 编译连接执行工具按钮组
2(5 关闭程序工作区
当一个程序编译连接后,VC++系统自动产生相应的工作区,以完成程序的运行
和调试。若想执行第二个程序时,必须关闭前一个程序的工作区,然后通过新的编
译连接,产生第二个程序的工作区。否则的话运行的将一直是前一个程序。
“文件”菜单提供关闭程序工作区功能,如图A-10(a),执行“关闭工作区”
菜单功能,然后在如图A-10(b)对话框中选择“否”。如果选择“是”将同时关闭
源程序窗口。
图A-10 关闭程序工作区
2(6 命令行参数处理
VC++是一个基于窗口操作的C++系统,没有提供命令行参数功能。我们需要在
Windows 的“MS-DOS 方式”窗口里以命令方式实现。具体步骤参考如下:
(1)正确编译连接,生成可执行程序;
(2)通过“我的电脑”或“资源管理器”找到所运行的C 源程序(设为a.c);
(3)进入debug 文件夹(它包含a.c 程序的可执行文件);
(4)执行“开始”菜单的“运行”,填入command,然后“确定” ;
(5)在打开的“MS-DOS 方式”窗口中输入:a 参数1 参数2 ?? ,带参数运行
程序。 2(7 程序调试(*** 重点内容,第5章后开始 ***)
VC++是一个完全基于Windows 的系统,它的调试过程通过鼠标比较容易进行。
(1) 程序执行到中途暂停以便观察阶段性结果:
方法一:使程序执行到光标所在的那一行暂停。 在需暂停的行上单击鼠标,定位光标;
如图A-11 所示,分别点击菜单“编译”—“开始调试”—“Run to
Cursor”,或按【Ctrl】
+【F10】,程序将执行到光标所在行会暂停。如果把光标移动到后面的某个位
置,再按【Ctrl】
+【F10】,程序将从当前的暂停点继续执行到新的光标位置,第二次暂停。
图A-11 执行到光标所在行暂停
方法二:在需暂停的行上设置断点; 在需设置断点的行上单击鼠标,定位光标; 按“编译微型条”中最右面的按钮,如图A-12 所示,或按【F9】。
图A-12 设置断点
被设置了断点的行前面会有一个红色圆点标志。
与TC 一样,不管是通过光标位置还是断点设置,其所在的程序行必须是程序
执行的必经之路,亦即不应该是分支结构中的语句,因为该语句在程序执行中受到
条件判断的限制,有可能因条件的不满足而不被执行。这时程序将一直执行到结束
或下一个断点为止。
(2) 设置需观察的结果变量
按照上面的操作,使程序执行到指定位置时暂停,目的是为了查看有关的中间
结果。在如图A-13 中,左下角窗口中系统自动显示了有关变量的值,其中value1
和value2 的值分别是3、4,而变量i、sum 的值是不正确的,因为他们还未被赋
值。图中左侧的箭头表示当前程序暂停的位置。如果还想增加观察变量,可在图中
右下角的“Name”框中填入相应变量名。
图A-13 观察结果变量
(3) 单步执行
当程序执行到某个位置时发现结果已经不正确了,说明在此之前肯定有错误存
在。如果能确定一小段程序可能有错,先按上面步骤暂停在该小段程序的头一行,
再输入若干个查看变量,然后单步执行,即一次执行一行语句,逐行检查下来,看
看到底是哪一行造成结果出现错误,从而能确定错误的语句并予以纠正。
单步执行按“调试条”中“Step Over”按钮或【F10】,如图A-14 所示。如
果遇到自定义函数调用,想进入函数进行单步执行,可按“Step Into”按钮或
【F11】。当想结束函数的单步执行,可按“Step Out”按钮或【Shift】+
【F11】。对不是函数调用的语句来说,【F11】与【F10】作用相同。但一般对系
统函数不要使用【F11】。
图A-14 单步调试
(4) 断点的使用
使用断点也可以使程序暂停。但一旦设置了断点,不管你是否还需要调试程
序,每次执行程序都会在断点上暂停。因此调试结束后应取消所定义的断点。方法
是先把光标定位在断点所在行,再按“编译微型条”中最右面的按钮或【F9】,该
操作是一个开关,按一次是设置,按二次是取消设置。如果有多个断点想全部取
消,可执行“编辑”菜单中的“断点”菜单项,屏幕上会显示“Breakpoints”窗
口,如图A-15所示,窗口下方列出了所有断点,按“Remove All”按钮,将取消
所有断点。
断点通常用于调试较长的程序,可以避免使用“Run to Cursor”(运行程序到
光标处暂停)或【Ctrl】+【F10】功能时,经常要把光标定位到不同的地方。而对
于长度为上百行的程序,要寻找某位置并不太方便。
如果一个程序设置了多个断点,按一次执行键【F5】会暂停在第一个断点,再
按一次【F5】会继续执行到第二个断点暂停,依次执行下去。
图A-15 取消所有断点
(5) 停止调试
使用“Debug”菜单的“Stop Debugging”菜单项,或【Shift】+【F5】键可
以结束调试,从而回到正常的运行状态。
上面我们只对VC++中主要的功能作了介绍,对于其他的操作读者可以自己试
验,或参考有关Visual C++手册。
版权声明:本文标题:C语言上机操作指导 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735849142a1695951.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论