关于调试,很大的感触,请看下面的c程序
最近写了不少的程序,发现效果很好,一些复杂的程序以前看懂的,但是写不出来的也能够很快写出来了,一切得益于调试,以前总不认为调试能起多大作用,真是大错特错!!!
今天感触颇深,自调试程序以来,我写程序连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程序相关推荐
- fiddler启动文件_如何成为Fiddler大神,请看这里!
原标题:如何成为Fiddler大神,请看这里! 什么是Fiddler? Fiddler是一个HTTP/HTTPS协议调试代理工具, 它能够记录客户端和服务器之间的所有 HTTP/请求,可以针对特定的H ...
- 个人能否有所发展,在很大程度上要看你是否重视贡献--读书笔记
关于个人成长 1.年轻的知识工作者,应该趁早做自我检讨:"就我的能力来看,我在这个组织中担任这个工作,是不是最适合?" 2.个人能否有所发展,在很大程度上要看你是否重视贡献. 3. ...
- kms不是盗版,不了解kms的管理员请看下微软官方链接,解决”运行microsoft windows非核心版本的计算机上”的问题(kms不等于盗版)
kms不是盗版,不了解kms的管理员请看下微软官方链接: https://docs.microsoft.com/zh-cn/windows/deployment/volume-activation/a ...
- 【空格】前后是非多,它能导致大故障,请看
系统运维从来就是一个精细化的工作,除了规则与规范的约束之外,运维人员的严谨.谨慎也必不可少,有时候一个简单的错误就会导致一场灾难,小到一个字符,一个空格. 本文的案例就是因为一个空格导致的,Oracl ...
- 76 张图,剖析 Spring AOP 源码,小白居然也能看懂,大神,请收下我的膝盖!
下面我会简单介绍一下 AOP 的基础知识,以及使用方法,然后直接对源码进行拆解. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 AOP ? AOP 的全称是 "Aspect Ori ...
- 大神们请看python日期是这样转换的
tida=(2013,12,12,12,12,12) datetime.datetime(*tida).strftime("%Y-%m-%d %H:%M:%S %f")
- 第十一届泰迪杯数据挖掘挑战赛-产品订单数据分析B题(完整代码)--数据处理--第一部分(下一部分请看下一博客)
需要解决的问题 1. 请对附件中的训练数据(order_train1.csv)进行深入地分析,可参照但不限于下述主题. (1) 产品的不同价格对需求量的影响: (2) 产品所在区域对需求量的影响,以及 ...
- 2021年django微信扫码支付流程--全攻略(阻止回调请看下一章)
PC端,微信扫码支付, 我们产生支付二维码后,等用户支付, 用户扫码支付成功后,我们接收腾迅的回调数据 但是我们如果不阻止回调,则我们的服务器会被腾迅请求很多次在几个小时之内, 所以我们一定要阻止回调 ...
- farm 二维树桩数组数很大,数组存不下,怎么搞?区间更新
链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 farm 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他 ...
最新文章
- 短视频+直播——直播系统开发新模式
- Winform中使用FastReport实现简单的自定义PDF导出
- 从 wiscKey 看 LSMtree 的不足
- DNN Experience
- mysql performance tuning_MySQL Performance tuning
- Docker安装Mysql 案例和Tomcat测试
- mysql-5.5.38_MySQL-5.5.38通用二进制安装
- docker(7):使用python 连接数据库,插入并查询数据--link
- 深度学习:词嵌入Embedding
- c#中Split用法总结
- myeclipse2015添加tomcat
- html使表格位于页面的右下方,在HTML表格的右下角显示一个数字以显示齐平
- c语言成绩管理系统1.0,c语言成绩管理系统完整附源码v1.0 免费版
- 【Python爬虫】花瓣网爬取美女图片
- 土地转移矩阵的计算步骤
- 基于多模态路标跟踪的紧耦合激光—视觉—惯导里程计(ICRA2021)
- abd串口工具使用教程_一体机电脑维修工具下载及使用教程
- 计算机主机配置一般有机箱主板cpu,电脑配置参数详解教程
- python简单温度转换,python编写的简单温度转换程序
- pythonsze_python学习笔记二 数据类型(基础篇)
热门文章
- ## normalize.css 中文版
- git “errno=Connection refused”
- 强者不能恒强,偏向虎山行
- 【CV】如何使用Tensorflow提供的Object Detection API--4--开始训练模型
- anaconda 创建,激活,退出,删除环境
- 洛谷 P1840 【Color the Axis_NOI导刊2011提高(05)】 题解
- docker 容器连接宿主机mysql问题
- 读SRE Google运维解密有感(一)
- php的zend引擎执行过程 一
- sqoop安装及使用