一元稀疏多项式简单的计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.一元稀疏多项式简单的计算器(实验类型:综合型)
1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器
2)实验要求:
✧采用单链表存储结构一元稀疏多项式
✧输入并建立多项式
✧输出多项式
✧实现多项式加、减运算
3) 实现提示:以两个多项式相加为例
✧结果多项式另存
✧扫描两个相加多项式,若都未检测完:
⏹若当前被检测项指数相等,系数相加,若结果未变成0,
则将结果插入到结果多项式。
⏹若当前被检测项指数不等,则将指数较小者插入到结果
多项式。
若有一个多项式已检测完,则将另一个多项式剩余部分直接连接到结果多项式。
4.一元稀疏多项式简单的计算器(实验类型:综合型)
#include
#include
typedef struct
{
float coef;//系数int expn;//指数
} Term;
typedef struct ploynomial
{
Term term;ploynomial* next;
} ploynomial,*LinkList;
void InitList(LinkList&L)
{
//初始化链表
L= (ploynomial*)malloc(sizeof(ploynomial));//头结点L->term.coef=0.0;
L->term.expn=-1; L->next=NULL;
}
int cmp(Term a,Term b)
{
//比较结点的系数大小函数
if(a.expn>b.expn) return -1;
else if(a.expn==b.expn) return 0; else return 1;
}
void insertNode(LinkList&L,Term e)
{
//将结点插入多项式链表的适当位置,可以同时起到创建链表和多项式相加的功能
ploynomial* q=L;
while(q->next!=NULL)
{
if(cmp(q->next->term,e)<0)//如果当前结点q的下一个结点的指数大于要插入的结点的指数
q=q->next;//q指向下一个结点
else break;//此时,q.term.expn>e.expn>=q->next->term.expn }
if(q->next!=NULL&&cmp(q->next->term,e)==0) //指数相同,系数相加
{
q->next->term.coef+=e.coef;
}
else
{
ploynomial* node =(ploynomial*) malloc(sizeof(ploynomial));
node->term.coef=e.coef;
node->term.expn=e.expn;
if(q->next==NULL)
node->next=NULL; //如果q结点为尾结点,则node的
指针域设为NULL
else
node->next=q->next; //否则node的指针域指向q的下一个结点
q->next=node;//将node结点插入链表中
}
}
void CreatPolyn(LinkList&L,int m)
{
//输入m项的系数和指数,建立表示一元多项式的有序链表L Term e;
InitList(L);
for(int i=1; i<=m; i++)
{
printf("\n第%d项的系数和指数:",i);
scanf("%f%d",&e.coef,&e.expn);
insertNode(L,e);
}
}
void addPolyn(LinkList&L,LinkList L1,LinkList L2)
{
//用L返回L1+L2的结果
ploynomial* q;
for(q=L1->next; q!=NULL; q=q->next)
{
insertNode(L,q->term);//将L1的每一项插入到L中
}
for(q=L2->next; q!=NULL; q=q->next) //将L2的每一项插入到L 中
{
insertNode(L,q->term);
}
}
void SubtracatPolyn(LinkList&L,LinkList L1,LinkList L2)
{
//用L返回L1-L2的结果
ploynomial* q;
for(q=L1->next; q!=NULL; q=q->next)
{
insertNode(L,q->term);//将L1的每一项插入到L中
}
for(q=L2->next; q!=NULL; q=q->next)
{
q->term.coef = -(q->term.coef); //把系数变成相反数,再进行
相加操作,即为L1-L2
insertNode(L,q->term);//将L2的每一项插入到L中}
}
void multiplyPolyn(LinkList&L,LinkList L1,LinkList L2) {
//用L返回L1*L2的结果
ploynomial *p,*q;
Term term;
term.coef=0.0;
term.expn=0;
for(q=L1->next; q!=NULL; q=q->next)
{
for(p=L2->next; p!=NULL; p=p->next)
{
term.coef=(q->term.coef)*(p->term.coef);//系数相乘term.expn=(q->term.expn)+(p->term.expn);// 指数想加insertNode(L,term);
}
}
}
void derivativePolyn(LinkList&L,LinkList L1)