多项式求和,源代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else if(p->zhishu==1&&p->xishu==1)
printf("+ X");
else if (p->zhishu!=1&&p->xishu==1)
printf ("+ X^%d",p->zhishu);
else
printf("+ %.2fX^%d ",p->xishu,p->zhishu);
{
pb->next=p->next;
p->next=pb;
return pa;
}
else
p=p->next;
}
return NULL;
}
/*函数功能:将多项式p,q相加
函数参数:p,q的头结点指针head1,head2(保证head1的最高指数>head2的最高指数)
函数返回值:相加所得的多项式链表头结点指针
else
printf("%.2fX^%d ",p->xishu,p->zhishu);
p=p->next;
while (p!=NULL)
{
if (p->zhishu==0)
printf("+ %.2f ",p->xishu);
else if(p->zhishu==1&&p->xishu!=1)
printf("+ %.2fX ",p->xishu);
return head1;
}
int main ()
{
int n,m;//多项式p,q的项数
printf("请输入多项式p(x)的项数:\n");
scanf("%d",&n);
polyn *head1=creatpolyn(n);//建立表示一元多项式的链表p,返回头节点指针head
printf("P(x)=");
//多项式的表示和相加
#include<stdio.h>
#include<malloc.h>
# define NULL 0
struct polyn
{
float xishu;
int zhishu;
struct polyn *next;
};
typedef struct polyn polyn;
/*函数功能:建立一个表示一元多项式的有序链表P
p=p->next;
}
}
}
/*函数功能:删除链表中的特定节点
函数参数:链表头结点指针head,所要删除的节点指针pa
函数返回值:删除元素的前一位置
*/
polyn *delnode(polyn *head,polyn *pa)
{
polyn *p=head->next,*q;
if (p->next==NULL)
函数参数:多项式的项数N
函数返回值:头节点指针head
*/
polyn * creatpolyn(int n)
{
polyn * head=NULL,*p,*pr;
int i=0;
head=(polyn*)malloc(sizeof(polyn)); //指向头结点的指针
head->next=NULL;
函数参数:链表头节点指针head,将插入的节点pb,和要插入的位置节点pa
函数返回值:插入位置pa
*/
polyn *insertnode(polyn *head,polyn *pa,polyn *pb)
{
polyn *p=head;
while((p->next)!=NULL)
{
if (p->next==pa)//将节点pb插入到pa之前
else if(p->zhishu==1&&p->xishu!=1)
printf("%.2fX ",p->xishu);
else if(p->zhishu==1&&p->xishu==1)
printf("X");
else if (p->zhishu!=1&&p->xishu==1)
p源自文库intf ("x^%d",p->zhishu);
print(head1);
printf("\n请输入多项式q(x)的项数:\n");
scanf("%d",&m);
polyn *head2=creatpolyn(m);//建立表示一元多项式的链表p,返回头节点指针head
printf("Q(x)=");
print(head2);
polyn *head=addpolyn(head1,head2);//将p(x),q(x)相加
printf("\nP(x)+Q(x)=");
print(head);
return 0;
}
qa=qa->next;
if(qa->zhishu==qb->zhishu)
{
sum=qa->xishu+qb->xishu;
if (sum!=0)
{
qa->xishu=qa->xishu+qb->xishu;
qa=qa->next;
qb=qb->next;
}
else//相加和为0,则删除该项
{
qa=delnode(head1,qa);//qa指向删除项的前一节点
{
head->next=NULL;
return head;
}
while (p&&p->next)
{
if (p->next==pa)
{
q=p->next;
p->next=q->next;
free(q);
return p;
}
else
p=p->next;
}
return NULL;
}
/*函数功能:将节点pb插入链表中pa节点的前面
qa=qa->next;
qb=qb->next;
}
}
else//若qb指数低,则将该项插入链表head1中qa之前
{
qa=insertnode(head1,qa,qb);//qa指向插入项之后的节点
qb=qb->next;
}
}
if (qb!=NULL)//链接q(x)中剩余节点
qa->next=qb;
pr=head;
printf("请依次输入多项式的系数和指数:\n");
for (i=1;i<=n;i++)
{
p=(polyn*)malloc(sizeof(polyn));//生成新节点
scanf("%f,%d",&p->xishu,&p->zhishu);
pr->next=p;
pr=p;
}
pr->next=NULL;
*/
polyn *addpolyn(polyn *head1,polyn *head2)
{
float sum=0;//系数和
polyn *qa=head1->next;
polyn *qb=head2->next;
while (qa&&qb)//均非空
{
if(qa->zhishu<qb->zhishu)
return head;
}
/*函数功能:输出多项式
函数参数:头结点指针head
函数返回值:无
*/
void print(polyn *head)
{
if(head->next==NULL)
printf("0");
else
{
polyn *p=head->next;
if (p->zhishu==0)
printf("%.2f ",p->xishu);
相关文档
最新文档