最近写了不少的程序,发现效果很好,一些复杂的程序以前看懂的,但是写不出来的也能够很快写出来了,一切得益于调试,以前总不认为调试能起多大作用,真是大错特错!!!

今天感触颇深,自调试程序以来,我写程序连warning都没有了,更不用说程序运行不了的情况,确实让我学习了不少东西,非常高兴,也养成了一个很好的习惯,不断为自己的代码写上注释,养成一个很好的习惯,这也得益于陈正冲老师的教诲!!在此深表感谢~~~

废话少说,看下面的程序:

/************************************************
 *   File name      :multi_rows.c
 *   CopyRight      :2011-03-24,All rights Reserved.
 *   Module name    :...
     *
 *   CPU            :
 *   RTOS           :....
     *
 *   Create Date    :2011-03-24
 *   Author/Corporation:  hackerling/maple Corporation
 *
 *   Abstract Description :
 *   这个程序的思路就是:在一个数组中来存储两个多项式,然后结果存储在从下

*   标为0开始的位置,然后输出。当然,在main()函数里,那个调用padd()的starta/finisha,startb/finishb,这几个参数的值这里需要根据你的输入做相应的更改,我没有继续完善,因为很简单,自己注意!!
 *   ---------------Revision History--------------
 *   No  Version  Date       Revised By   Item     Description
 *
 *
 **************************************************************/

#include <stdio.h>
#include <stdlib.h>
#define  MAX_TERMS 100

struct polynomial   //多项式某项的结点结构
{
 float coef; //系数
 int expon;  //指数
};
struct polynomial terms[MAX_TERMS];    //数组最多想为MAX_TERMS
int avail=0;   //avail为全局变量

int COMPARE(int coef1,int coef2)  //比较两个数的大小
{
 if(coef1<coef2)
  return -1;
 else if (coef1==coef2)
  return 0;
 else
  return 1;
}

void attach(float coefficient,int exponent)   //加入一个新项到一个多项式中
{
 
 if(avail>MAX_TERMS)
 {
  printf("Too many terms in the polynomial");
  exit(1);
 }
 terms[avail].coef=coefficient;


/*
 ***************************************************************************************************/
 terms[avail].expon=exponent;   //此处存在风险,极大的风险,因为他会改变数组的值从而影响后面的判断*

/ ***************************************************************************************************
 */


avail++;    //多项式的项数加1
}
void padd(int starta,int finisha,int startb,int finishb,int *startd,int *finishd)
//用于计算a(x)+b(x)=d(x)
//其中starta/finisha表示的第一个多项式的起始和终止下标,startb/finishb表示第二个多项式的下标
{
 float coefficient;  //存储系数
 *startd=avail;    //相加的结果放在数组从下标0开始到下标finishd处
 while(starta<=finisha && startb<=finishb)  //处理两个可能存在相加的情况
 {
  switch(COMPARE(terms[starta].expon,terms[startb].expon))
  {
  case -1:
   attach(terms[startb].coef,terms[startb].expon);
   startb++;
   break;
  case 0:
   coefficient=terms[starta].coef+terms[startb].coef;
            if(coefficient)
    attach(coefficient,terms[starta].expon);
   starta++;
   startb++;
   break;
  case 1:
   attach(terms[starta].coef,terms[starta].expon);
   starta++;
   break;
  default:
   break;
  }
 }
 for(;starta<=finisha;starta++)  //单独处理第一个多项式
  attach(terms[starta].coef,terms[starta].expon);
 for(;startb<=finishb;startb++)  //单独处理第二个多项式
  attach(terms[startb].coef,terms[startb].expon);
 *finishd=avail-1;   //结果最终的位置
}

void main()
{
 int startd,finishd;
 int i;
 for(i=0;i<4;i++)    //输入所要计算的多项式值,按:coef空格expon换行  输入
 {
  scanf("%f %d",&terms[i].coef,&terms[i].expon);
 }
    padd(0,1,2,3,&startd,&finishd); 
 for(i=0;i<=finishd;i++)  //输出
 {
  printf("%f %d\n",terms[i].coef,terms[i].expon);
 }
 return;
}

编译运行程序,您会发现,所有的加法似乎都能进行,而且是正确的,

4*pow(x,3)+2*pow(x,2)

5*pow(x,3)+3*pow(x,2)

上面我们发现结果完全正确,就是9*pow(x,3)+5*pow(x,2)

可是,

不对不对,这程序是存在错误的,以前也许我就高兴的自以为编出多项式加法运算了,可是,请您调试下列数据:

4*pow(x,4)+4

3*pow(x,1)+1

求这两个多项式的和,您会发现会是如下结果:

这结果不对哦!!!不是4*pow(x,4)+3*pow(x,1)+5

为什么???

其实,只要你用调试器调试调试,就会发现

就是这个地方影响了这个程序的判断,所以导致结果的不对!呵呵,因为发现了这个,让我觉得程序调试真的很重要很重要,还有哦,《C语言通用案例开发经典》上面就是用这个,也许作者还没有发现这个问题哦!!希望能够尽快改正!!!

呵呵,欢迎拍砖!!!

转载于:https://blog.51cto.com/lingchuan/529037

关于调试,很大的感触,请看下面的c程序相关推荐

  1. fiddler启动文件_如何成为Fiddler大神,请看这里!

    原标题:如何成为Fiddler大神,请看这里! 什么是Fiddler? Fiddler是一个HTTP/HTTPS协议调试代理工具, 它能够记录客户端和服务器之间的所有 HTTP/请求,可以针对特定的H ...

  2. 个人能否有所发展,在很大程度上要看你是否重视贡献--读书笔记

    关于个人成长 1.年轻的知识工作者,应该趁早做自我检讨:"就我的能力来看,我在这个组织中担任这个工作,是不是最适合?" 2.个人能否有所发展,在很大程度上要看你是否重视贡献. 3. ...

  3. kms不是盗版,不了解kms的管理员请看下微软官方链接,解决”运行microsoft windows非核心版本的计算机上”的问题(kms不等于盗版)

    kms不是盗版,不了解kms的管理员请看下微软官方链接: https://docs.microsoft.com/zh-cn/windows/deployment/volume-activation/a ...

  4. 【空格】前后是非多,它能导致大故障,请看

    系统运维从来就是一个精细化的工作,除了规则与规范的约束之外,运维人员的严谨.谨慎也必不可少,有时候一个简单的错误就会导致一场灾难,小到一个字符,一个空格. 本文的案例就是因为一个空格导致的,Oracl ...

  5. 76 张图,剖析 Spring AOP 源码,小白居然也能看懂,大神,请收下我的膝盖!

    下面我会简单介绍一下 AOP 的基础知识,以及使用方法,然后直接对源码进行拆解. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 AOP ? AOP 的全称是 "Aspect Ori ...

  6. 大神们请看python日期是这样转换的

    tida=(2013,12,12,12,12,12) datetime.datetime(*tida).strftime("%Y-%m-%d %H:%M:%S %f")

  7. 第十一届泰迪杯数据挖掘挑战赛-产品订单数据分析B题(完整代码)--数据处理--第一部分(下一部分请看下一博客)

    需要解决的问题 1. 请对附件中的训练数据(order_train1.csv)进行深入地分析,可参照但不限于下述主题. (1) 产品的不同价格对需求量的影响: (2) 产品所在区域对需求量的影响,以及 ...

  8. 2021年django微信扫码支付流程--全攻略(阻止回调请看下一章)

    PC端,微信扫码支付, 我们产生支付二维码后,等用户支付, 用户扫码支付成功后,我们接收腾迅的回调数据 但是我们如果不阻止回调,则我们的服务器会被腾迅请求很多次在几个小时之内, 所以我们一定要阻止回调 ...

  9. farm 二维树桩数组数很大,数组存不下,怎么搞?区间更新

    链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 farm 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他 ...

最新文章

  1. 短视频+直播——直播系统开发新模式
  2. Winform中使用FastReport实现简单的自定义PDF导出
  3. 从 wiscKey 看 LSMtree 的不足
  4. DNN Experience
  5. mysql performance tuning_MySQL Performance tuning
  6. Docker安装Mysql 案例和Tomcat测试
  7. mysql-5.5.38_MySQL-5.5.38通用二进制安装
  8. docker(7):使用python 连接数据库,插入并查询数据--link
  9. 深度学习:词嵌入Embedding
  10. c#中Split用法总结
  11. myeclipse2015添加tomcat
  12. html使表格位于页面的右下方,在HTML表格的右下角显示一个数字以显示齐平
  13. c语言成绩管理系统1.0,c语言成绩管理系统完整附源码v1.0 免费版
  14. 【Python爬虫】花瓣网爬取美女图片
  15. 土地转移矩阵的计算步骤
  16. 基于多模态路标跟踪的紧耦合激光—视觉—惯导里程计(ICRA2021)
  17. abd串口工具使用教程_一体机电脑维修工具下载及使用教程
  18. 计算机主机配置一般有机箱主板cpu,电脑配置参数详解教程
  19. python简单温度转换,python编写的简单温度转换程序
  20. pythonsze_python学习笔记二 数据类型(基础篇)

热门文章

  1. ## normalize.css 中文版
  2. git “errno=Connection refused”
  3. 强者不能恒强,偏向虎山行
  4. 【CV】如何使用Tensorflow提供的Object Detection API--4--开始训练模型
  5. anaconda 创建,激活,退出,删除环境
  6. 洛谷 P1840 【Color the Axis_NOI导刊2011提高(05)】 题解
  7. docker 容器连接宿主机mysql问题
  8. 读SRE Google运维解密有感(一)
  9. php的zend引擎执行过程 一
  10. sqoop安装及使用