c语言案例加法运算表格输出,(C语言)加法运算实验报告.doc

(C语言)加法运算实验报告

一元多项式的加法运算

需求分析

程序的基本功能

按照指数升序次序,输入并建立多项式A与B。

计算多项式A与B的和,即建立多项式A+B。

按照指数升序次序,输出多项式A、B、A+B。

输入输出要求:

输入多项式;

确定多项式的项数,按照指数递增的顺序依次输入系数不为0的子项,当输入个数与预期相同时结束输入。

输出多项式:

当链表为空时,链表不为空且只有一个结点并且数据为0时,直接输出0;链表(至少有两个结点)不为空且第一个结点为0时,直接输出第二个结点;当结点存在时,输出结点。输出形式类似于数学表达式。

要求:

系数值为1的非零次项的输出形式中略去系数1;

指数为0的项输出形式中略去指数部分;

多项式的第一项的系数符号为正时,不输出“+”,其他项要输出“+”、“-”符号。

测试数据

①(x+x^3)+(-x-x^3)=0;

②(x+x^100)+(x^100+x^200)= x+x^100+x^200;

③(x+x^2+x^3)+0= x+x^2+x^3;

④(3x^-3-x+4.1x^2-1.2x^9)+(-3x^-3-5.1x^2+7.8x^12)=-x-x^2-1.2x^9+7.8x^12;

概要设计

抽象数据类型的定义:

对于一元n次多项式而言,每一项都由系数和指数两部分组成,因此可将多项式抽象成一个由“系数、指数”构成的线性表,其中多项式的每一个系数非零的子项作为线形表中的一个元素。因此,定义一个带头结点的单链表来表示一元多项式。

主模块的流程及各子模块的主要功能:

①主函数模块:

int main()

{

定义A、B两个链表指针;

链表初始化;

输入A、B;

输出A、B;

输出A+B;

}

②输入模块:

PolyLink input(PolyLink A)

{

按指数递增的顺序,依次输入多项式的各个子项,并插入到多项式链表中;

}

加法模块:

PolyLink add(PolyLink A,PolyLink B)

{

对于两个多项式中指数相同的子项,其系数相加,若系数非零,则构成“和多项式”中的一项;对于指数不同的项,直接构成“和多项式”中的一项;

}

结点输出模块:

void output(PolyNode *p)

{

按照系数为-1、1及其它与指数为0、1及其它分情况输出不同表达形式;

}

链表输出模块:

viod result(PolyLink A)

{

当链表为空时,输出0;链表不为空时,输出第一个结点,之后的结点输出时,在前面加上相应的正负号;

}

链表初始化:

{

对定义的链表申请空间进行初始化;

}

模块之间的层次关系:

详细设计

定义的相关数据类型:

typedef struct pnode

{

float data;

int exp;

struct pnode *next;

}PolyNode,*PolyLink;

函数的调用关系:

调试分析

调试中遇到的问题及对问题的解决方法:

⑴遇到的问题:

①运行加法时出现内存不足导致程序无法进行;

②当链表为空时无法正常输出结果0;

③当链表为0时,做加法时输出结果仍会出现0;

④某些情况下输出的结果不符合数学表达式。

⑵解决方法:

进行链表的初始化,使链表;

当链表为空时,输出0后然后结束程序。无法正常输出结果是因为指令不明确,p=p->next无法执行;

结点输出时分类不全面,增加分类即可;

算法的时间复杂度:

假设两个多项式分别有m项和n项,建立多项式时,时间复杂度为o(m+n),两个多项式相加的循环执行次数最多有m+n次,时间复杂度为o(m+n),因此,时间复杂度为o(m+n)。

使用说明及测试结果

使用说明:

输入第一个多项式的项数并按指数递增的顺序输入;

输入第二个多项式的项数并按指数递增的顺序输入;

程序运行界面如下:

测试结果:

①输入A=x+3x^6-8x^11

输入B=6-3x^6+21x^9

输出A+B=6+x+21x^9-8x^11

②输入A=x+x^3

输入B=-x-x^3

输出A+B=0

③输入A=x+x^100

输入B=x^100+x^200

输出A+B=x+2x^100+x^200

④输入A=x+x^2+x^3

输入B=0

输出A+B=x+x^2+x^3

源程序

#include

#include

typedef struct pnode

{

float data;

int exp;

struct pnode *next;

}PolyNode,*PolyLink;

PolyLink Ini_polynode() //链表的初始化;

{

Pol

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值