两个多项式相加的程序为啥不对(~_~;)
#include<stdio.h>
#include<stdlib.h>
//#define flag 0;
typedef struct
{
float coef;
int expn;
}DataType;
typedef struct Node
{
DataType data;
struct Node *next;
}LNode,*LinkList;
void CreatLinkList2(LinkList L)
{
LinkList r,s;
DataType x;
printf("Please input coef and expn:");
scanf("%f%d",&x.coef,&x.expn);
r=L;
while(x.coef)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x.coef);
}
r->next=NULL;
}
LinkList Add_L(LinkList P,LinkList Q)
{
LNode *p,*q;
LNode *r,*s;
float sum;
p=p->next;
q=Q->next;
r=p;
while(p&&q)
{
if((p->data).expn<(q->data).expn)
{ r->next=p;
r=r->next;
p=p->next;
}
else if((p->data).expn>(q->data).expn)
{ r->next=q;
r=r->next;
q=q->next;
}
else
{ sum=(p->data).coef+(q->data).coef;
if(sum!=0)
{(p->data).coef=sum;
r->next=p;
r=r->next;
p=p->next;
s=q;
q=q->next;
free(s);
}
else
{s=p;
p=p->next;
free(s);
}
}
}
if(p)
r->next=p;
else
r->next=q;
free(Q);
return P;
}
void PrintLinkList(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{printf("%2f*X^%d",p->data.coef,p->data.expn);
p=p->next;
if(p&&p->data.coef>0)
printf("+");
}
printf("\n");
}
int main()
{
LinkList L,P,Q;
P=(LinkList)malloc(sizeof(LNode));
P->next=NULL;
printf("Creat p:\n");
CreatLinkList2(P);
printf("Output LinkListp:\n");
PrintLinkList(Q);
L=Add_L(P,Q);
printf("Output LinkList L:\n");
PrintLinkList(L);
return 0;
}
...全文
相关推荐
两个一元多项式相加的程序
两个一元多项式相加的程序——/定义结点 /创建链表 /递增排序 /两个多项式相加 /显示多项式 /主函数
c语言 两个一元多项式相加。
用线性表的存储形式实现两个一元多项式相加。
C++ 链表实现两个一元多项式相加
c++,算法链表实现一元多项式相加,通过链表实现,非常好的一个程序
数据结构_两个链表的合并一元多项式相加
数据结构_两个链表的合并,一元多项式相加
实验报告1.4两个一元多项式相加实验
实验报告1.4两个一元多项式相加实验 首先考虑存储结构,多项式中的每一项包括“系数”和“指数”两项,且相加运算可能会改变系数和指数,故应采用链式存储结构。在一个单链表结点中,存储多项式一项的系数和指数。其次,考虑多项式的运算规则:对于两个一元大学生中所有指数相同的项,对应系数相加,若和不为0,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不同的项,则分别复抄到“和多项式”中去。


