C语言程序调试前言:C语言程序的调试主要是为了排除程序的逻辑错误,在程序运行的结果与预期的结果不一致的情况下进行。C语言程序调试的手段有多种:1.最简单的一种是”单步调试”,使用”stepover”.一步一步地执行.可在“变量窗口”(Variables)观察和分析变量的变化。2.使用设置(或取消)断点,再使用运行到断点.可在“变量窗口”(Variables)观察和分析变量的变化。然后决定是继续单步执行,还是运行到下一个断点。C++6.0的界面窗口如下:3.运行到光标处:先定位好光标的位置,再使用(runtocursor)运行到光标处。然后决定是继续单步执行,还是运行到下一个断点。输出窗口工作窗口编辑窗口可在菜单栏空白处右击.选择要显示的窗口和工具条。调试工具条的显示:方法:使用右键:在菜单栏空白处右击.调试程序示例1:计算分段函数:1/xx≠0f(x)=0x=0#includestdio.hvoidmain(){floatx,y;printf(inputx:\n);scanf(%f,x)if(x!=0)y=1/x;elsey=0;printf(f(%.2f)=%.1f\n,x,y);}注:在进行调试前,首先要正常通过编译和连接,排除所有语法错误.点击此按钮进行编译.1.“输出窗口”显示出错信息说明及大致行数.3.黑色箭头指示错误的大致位置.2.双击某行错误信息.一.单步调试:主要是解决程序的逻辑错误:运行结果与期望值不一致.1.开始单步调试:单击”单步执行”(StepOver(F10))变量窗口.显示或隐藏变量窗口.显示或隐藏观察窗口.观察(wacth)窗口.可以输入变量和表达式,观察它们的值.当运行到输入语句时,任务标上会出现小图标.点击之.在输入窗口输入数据.2.停止调试:单击”终止调试”(StopDebuging)终止调试.二.设置断点调试:调试程序示例2:计算累加和,程序有错。#includestdio.hvoidmain(){inti,sum;for(i=1;i=100;i++)sum=sum+i;printf(sum=%d\n,sum);}排除语法错误,运行后发现其结果显然不对。如下图所示,设置一断点。使用此按钮,运行到断点处.在变量窗口发现sum的值有问题!这时应想到是变量没赋初值。注:如果程序代码多,可设多个断点,。调试程序示例2:输入一个5~10之间的整数n,求:1!+2!+…..n!.#includestdio.hvoidmain(){intn=0,i=1,s,k=1;printf(请输入5-10之间任意数:\n);scanf(%d,&n);while(in){s+=k;i++;k*=i;}printf(1!+2!+..%d!=%d\n,n,s);}三.运行到光标处:排除语法错误,运行后发现其结果显然不对。先定位好光标。1.使用此按钮(runtocursor),运行到光标处.2.输入数据后,运行到光标处.使用单步调试,一步一步执行。同时观察变量的变化。说明:1.可以使用”单步”,”断点”,”运行到光标处”等手段互相组合来进行.2.在调试时,也可利用”监视窗口”,输入变量或表达式,观察其值的变化.输入变量或表达式,同时观察其值的变化。调试示例:求二数的最小公倍数和最大公约数.#includestdio.hvoidmain(){intm,n,j,k;printf(inputm,n:\n);scanf(%d%d,&m,&n);while(m0&&n0);j=m;while(j/n!=0)j=j+m;k=(m*n)/j;printf(最小公倍数是%d\n最大公约数是%d\n,j,k);}Inputmn:37(回车)首先排除所有语法错误后,运行程序:输出结果:最小公倍数是:3最大公约数:7答案不对!调试方法:1.首先要排除语法错误.点击此按钮进行编译.当排除所有语法错误后,进行下步操作:(在光标所在行)点击此图标设断点(再点击即取消).根据需要可以设置多个断点.调试开始:点击此图标(GO),运行到断点处.中间有一输入语句,输入数据:-37程序运行到第一个断点.在”变量窗口”观察到:m=-3,n=7.再次点击此图标(GO),运行到第二个断点处.在”变量窗口”观察到:m=-3,n=7.在此处发现问题…….什么问题?是因为数据输入不对!程序要求不允许输入负数,二个数必需为正数,否则程序不能往下走.单击”终止调试”(StopDebuging)终止调试.把循环条件:(M0&&n0)改为:(M0||n0)关闭工作区间,重新编译,设置二个断点.点击图标(GO),运行.如输入:-37.再点击图标(GO),程序不向下走.说明有问题:输入数据不对!重新输入正确数据:37.点击图标(GO),运行到第二个断点.然后可以执行”单步调试”,运行到printf()处.发现:j=3k=7.答案也不对!说明第二个断点后有问题.单击”终止调试”(StopDebuging),仔细分析.循环条件改为(j%n!=0)Inputmn:37(回车)重新运行程序:输出结果:最小公倍数是:21最大公约数:1C语言程序调试结束