好文档 - 专业文书写作范文服务资料分享网站

C语言上机软件VC++6.0中文版安装,学习Visual C++ 6.0编程环境的使用

天下 分享 时间: 加入收藏 我要投稿 点赞

与y的和s,差d,商q,模r,而后计算res=s+2d+3q+4r的值(res应该等于16)并显示在屏幕上。但编制的如下程序运行后却得出了一个错误结果“res=26”。

#include

void main() {

int x=3, y=5;

int s, d, q, r, res;

s = x + y; d = s - y; q = x / y; r = x % y;

res = s + 2*d + 3*q + 4*r; printf(\}

图3-1 程序dbgTest.cpp的跟踪调试

分析上述所编制的程序行,假设能在要输出res结果值的那一程序行(倒数第二行)处设置一个临时断点,让程序先执行到此断点处(注意设为断点的那一行尚未被执行!),看一看那时各变量的动态取值情况,有可能就会找到出错的原因!基于上述分析,先将鼠标光标移动到“printf(\res);”那一行处(左键单击那一行任意位置),从而指定了临时性断点的行位置,而后执行“Build→Start Debug→Run to Cursor”选项,使程序运行到所指定行时暂停其执行,并显示出如图3-1的界面,其中的左下方窗口中就列出了当时各变量的取值情况:和s=8,差d=3(x=3,y=5,它们的差d=3肯定是错误的!),商q=0,模r=3,最终结果res=26。再仔细查看程序中负责计算差d的那一个语句“d=s-y;”就会恍然大悟,原来将“x-y”误写成了“s-y”!找到了错误,此时可以通过菜单选项“Debug→Stop Debugging”,中断当前的调试过程并返回正常的编辑状态,修改所发现的错误后,再一次执行将能得出正确结果“res=16”。

顺便指出,图3-1中显示的变量是“自动查看”方式的,即VC6自动显示当前运行上下文

16

中的变量的值。如果变量比较多,自动显示的窗口比较混乱,则可以在 Watch 列表中添加自己想要监控的变量名。

上述设置临时断点(到鼠标光标那一行处)的调试手段使用起来很方便,会经常使用(也经常在到达一个断点后,又设置另一个新的临时断点)。另外也常配合使用“单步执行”的方式,来仔细检查每一步(一个程序行)执行后各变量取值的动态变化情况,如,先通过“Run to Cursor”执行到某一个鼠标光标临时断点行处,而后通过使用Debug菜单的“Step Over”或“Step Into”来进行所谓的“单步执行”,当然,每执行一步后,都要仔细观察并分析系统自动给出的各变量取值的动态变化情况,以便及时发现异常而找到出错原因。

3.4 设计合适的程序调试方案

让我们来分析并设计对如下程序进行调试的具体方法与手段(实际上,对不同的程序,都需要在分析其执行结果以及其程序编写结构的基础上,来设计相应的对其进行具体调试的方法与手段,宗旨是想方设法逐步缩小“侦察”范围,直到最后找到出错位置)。 该程序除main外,还有一个自定义函数f。若已经能确认调用f函数前计算出的res值(或s、d、q或r其中之一的结果值)不正确的话,则可像上一程序那样,在计算出res变量值的下一行(或在靠前一些的某一行)处设置断点,看到达那一断点处是否一切正常。若到达断点处的数据结果已经不正常的话,错误已经出现(出现在跟前或出现在前面,从而找到了错误或者缩小了“侦察”范围);若断点处仍然正常,可断言错误出现在后面,而后,一:可又一次通过鼠标光标往更靠后一些的适当位置设置新断点,再一次“Debug→Run to Cursor”(一下向后“迈”过了许多行,再继续“侦察”!);二:通过“单步执行”(Debug→StepOver),在重点怀疑的那一块地方仔细地逐行进行“侦察”。 注意,“Step Over”不会“跟踪”进入f函数内部,若怀疑f函数可能有问题的话,要通过使用“Debug→Step Into”进入f内部再进行细致调试(在不遇到函数调用的地方,“Step Over”与“Step Into”的功能是相同的。若通过“Step Into”进入到函数内部,单步执行若干步之后,若发现不再需要进行单步调试的话,可通过“Step Out”从函数内部返回到调用语句的下一语句处)。 作为练习,请读者利用这一程序对上述的调试方法与手段进行多方面的灵活使用与体验!可以看出,程序调试是一件很费时费力而又非常细致的工作,需要耐心,要通过不断的实践来总结与积累调试经验。至于VC6提供的其他调试方法与手段,这儿就不一一介绍了。

#include

int f(int a) {

int b, c;

b = a + 5; c = 2*b + 100; return c; }

void main() {

int x=3, y=5;

int s, d, q, r, res, z;

s = x + y; d = x - y; q = x / y; r = x % y;

17

res = s + 2*d + 3*q + 4*r; printf(\ z = f(36);

printf(\}

前面也提到过,通过“Run to Cursor”所设置并到达的断点是一个临时性的断点。实际上,VC6还提供设置与清除固定性断点的方法。设置固定性断点最简单的方法是:在某一程序行处,单击鼠标右键,在菜单中选择“Insert/Remove Breakpoint”项(通过左键单击该选项,此时该行前将出现一个圆形的黑点标志,意味着已经将该行设置成了固定断点)。

清除固定性断点的方法为:在具有圆形黑点标志的固定断点行处,单击鼠标右键,在菜单中选择“Remove Breakpoint”项(通过左键单击该选项,此时该行前的那一个圆形黑点标志将消失,意味着已经清除了该固定断点)。

设置了固定性断点后,通常通过“Build→Start Debug→Go”或“Debug→Go”选项使程序开始执行,直到遇到某断点或遇到程序结束而停止。

还要说明的是,可以随时设置任意多个固定性断点,也可以随时清除它们。通过使用菜单选项“Edit→Breakpoints”,会出现一个对话框,在其中的“Break at”文本框中键入要设置断点的程序行的行数信息(但通常是先通过鼠标光标选定某一程序行,再利用菜单选项进入上述对话框,而后通过点击“Break at”文本框右边的小三角按钮,并选定系统自动提供的程序行的行数,以免自己要真正地去数清楚那一行的行数),也能够在指定行处设置一个固定性断点(通过OK按钮确定);如果要清除某断点,可在“Breakpoints”列表栏中先选定它,之后单击Remove按钮。实际上,除位置断点外,通过“Edit→Breakpoints”,还可以设置数据断点,消息断点,以及条件断点等,这儿就不再细说了。

VC6是一个极为庞大的开发工具,我们所介绍的仅仅是一些基本的应用,使用这些应用已经可以完成书中所涉及到的例子和作业,有兴趣的读者可通过参看其他有关介绍VC6的资料或书籍来进行进一步的学习与提高。

3.5 优秀程序员的基本素质——丰富的想象、严谨的思维 (1)程序运行结果看起来对了,但并不意味着程序没有隐藏的问题

①以下程序是从键盘输入一个数(x,x是一个int型整数),计算y(y=1000x+9)并在屏幕上输出,程序基本上是对的,能输出正确的结果。

#include

void main() {

int x, y;

printf(\ scanf(\ y = 1000*x + 9;

printf(\}

但是,当x输入为5000000,屏幕上却输出y=705032713,出现了错误。 ②以下程序的功能是从键盘上读入一串字符,然后在屏幕上输出。

#include

void main() {

char str[10];

18

printf(\ scanf(\

printf(\}

若用户在输入str时不小心多按了(或无意碰触)几下键盘,则程序运行会出错,如图3-2所示——可能稍严重的是程序运行死机(不报错),特别严重的是若有人精心设计输入的字符,完全可能造成系统被入侵或被严重破坏。

图3-2 程序运行过程中因用户的输入而出错

③以下程序的功能是从计算班中男生(boy)和女生(girl)的比例。如果女生数为0时,程序会怎样?

#include

void main() {

int boy, girl;

printf(\ scanf(\

printf(\}

实际工作中,类似的隐藏的问题往往是破坏力巨大的“地雷”,往往造成极大的损失,例如火箭发射、宇宙飞船飞行、高速列车运行中的事故,我们平常接触最多的恐怕是微软的各种系统需要不断地打补丁。因此,在程序设计中,必须缜密考虑各种情况,哪怕是机率极小的意外。

(2)严谨思维的典范——程序员学习的榜样

丰富的想象力、严谨的思维是一个优秀的程序应当具备的素质。 设计程序时不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,并且考虑全面、思维严谨。 以下2个小故事,应当是一个优秀程序员的标准思维,它形象、幽默、充分地展示了一个优秀程序员的严谨、全面的思维。一个优秀的程序员只有这样思考并设计程序,才能保证程序始终能可靠、稳定地工作,减少和避免发生事故。 ①方程仅仅对于正实数的简单情形成立

物理教授走过校园,遇到数学教授。 物理教授在进行一项实验,他总结出一个经

19

验方程,似乎与实验数据吻合,他请数学教授看一看这个方程。 一周后他们碰头,数学教授说这个方程不成立。可那时物理教授已经用他的方程预言出进一步的实验结果,而且效果颇佳,所以他请数学教授再审查一下这个方程。 又是一周过去,他们再次碰头。数学教授告诉物理教授说这个方程的确成立, \但仅仅对于正实数的简单情形成立。\

②判断开枪后树上还有几只鸟

某日,老师在课堂上想看看一学生智商有没有问题,问他 “树上有十只鸟,开枪打死一只,还剩几只?”

他反问“是无声手枪或别的无声的枪吗?”(例如激光枪) “不是。” “枪声有多大?” “80-100分贝。”

“那就是说会震的耳朵疼?” “是。”

“在这个城市里打鸟犯不犯法?” “不犯。”

“您确定那只鸟真的被打死啦?”

“确定。”偶已经不耐烦了“拜托,你告诉我还剩几只就行了,OK” “OK,树上的鸟里有没有聋子?” “没有。”

“有没有关在笼子里的?” “没有。”

“边上还有没有其他的树,树上还有没有其他鸟?” “没有。”

“有没有残疾的或饿的飞不动的鸟?” “没有。”

“算不算怀孕肚子里的小鸟?” “不算。”

“打鸟的人眼有没有花?保证是十只?”

“没有花,就十只。” 偶已经满脑门是汗,且下课铃响,但他继续问 “有没有傻的不怕死的?” “都怕死。”

“会不会一枪打死两只?” “不会。”

“所有的鸟都可以自由活动吗?” “完全可以。”

“如果您的回答没有骗人,”学生满怀信心的说,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”

老师当即晕倒。

4 编译与链接过程中常见的出错提示

编译、链接过程中,主要由于初学和录入阶段的击键失误,VC经常会提示程序有错(语法和

拼写问题,肯定不会指明算法有问题,否则就不用编程了)。遇到这些英文的提示时,不少

20

C语言上机软件VC++6.0中文版安装,学习Visual C++ 6.0编程环境的使用

与y的和s,差d,商q,模r,而后计算res=s+2d+3q+4r的值(res应该等于16)并显示在屏幕上。但编制的如下程序运行后却得出了一个错误结果“res=26”。#includevoidmain(){intx=3,y=5;ints,d,q,r,res;
推荐度:
点击下载文档文档为doc格式
5d97o2kcgu3xy6q95j8d
领取福利

微信扫码领取福利

微信扫码分享