3条回答 默认 最新
- 青云不语 2017-03-20 10:56关注
#include
#include
#include
#include
#include
#include
#include
#include//链表实现多项式
typedef struct node
{
int coef; //系数
int expn; //指数
struct node *next; //指针域
}Nodetype,*LNode; //定义结点类型LNode CreatePolyn(void);
void PrintPolyn(LNode Head);
LNode AddPolyn(LNode H1,LNode H2); //表达式相加
LNode SubstractPolyn(LNode H1,LNode H2); //相减(让系数变负,然后代入加法函数)
void DerivativePolyn(LNode Head);
int expnPolyn(int x,int y);
void eqPolyn(LNode Head);void main()
{
LNode Head,H1,H2;
int choice,sign;
while(1)
{
system("cls");
cout << "\n\n\n\n";
cout<<"\t\t 1.创建多项式 "< cout cout cout cout cout cout cout cout cin>>choice;
cout< system("cls");
switch(choice)
{
case 1:
Head = CreatePolyn();
system("pause");
break;
case 2:
PrintPolyn(Head);
system("pause");
break;
case 3:
printf("开始创建第一个多项式:\n");
H1 = CreatePolyn();
printf("开始创建第二个多项式:\n");
H2 = CreatePolyn();
Head = AddPolyn(H1,H2);
printf("相加的结果为:\n");
PrintPolyn(Head);
system("pause");
break;
case 4:
printf("开始创建第一个多项式:\n");
H1 = CreatePolyn();
printf("开始创建第二个多项式:\n");
H2 = CreatePolyn();
Head = SubstractPolyn(H1,H2);
printf("相减的结果为:\n");
PrintPolyn(Head);
system("pause");
break;
case 5:
DerivativePolyn(Head);
system("pause");
break;
case 6:
eqPolyn(Head);
system("pause");
break;
case 0:
exit(0);
}
}
}
//创建多项式
LNode CreatePolyn(void)
{
LNode Head,p,pre,pree;
int x,z;
Head = (LNode)malloc(sizeof(Nodetype));
Head->next = NULL;
printf("当你输入的系数为0时,输入结束。\n");
printf("请输入第一项系数:");
scanf("%d",&x);
if (x==0)
{
p=(LNode)malloc(sizeof(LNode));
p->coef=0;
p->expn=0;
Head->next=p;
p->next=NULL;
}
while(x!=0)
{
printf("请输入指数:");
scanf("%d",&z);
p=(LNode)malloc(sizeof(Nodetype));
p->coef=x;
p->expn=z;
pre=Head;
while(pre->next&&pre->next->expn>=z) //原有项指数大于插入项
{
pree=pre;
pre=pre->next;
}
p->next=pre->next; //插入项
pre->next=p;
if(pre->expn==p->expn) //原有项指数等于插入项
{
pre->coef+=p->coef;
pre->next=p->next;
free(p);
}
if(pre->coef==0) //系数为0
{
pree->next=pre->next;
free(pre);
}
printf("请输入系数:");
scanf("%d",&x);
}
if(Head->next == NULL) //多项式空
{
pre=(LNode)malloc(sizeof(LNode));
pre->coef=0;
pre->expn=0;
pre->next=Head->next;
Head->next=pre;
}
return Head;
}//显示多项式
void PrintPolyn(LNode Head)
{
LNode pre;
pre=Head->next;
if(pre->expn==0) //指数为0
printf("%d",pre->coef);
else
{
if(pre->expn == 1)
printf("%d*X",pre->coef,pre->expn);
else
printf("%d*X^%d",pre->coef,pre->expn);
}
pre=pre->next;
while(pre) //系数不为0
{
if(pre->expn==0) //指数为0
{
if(pre->coef>0)
printf("+%d",pre->coef);
else if (pre->coef printf("%d",pre->coef);
}
else //指数不为0
{
if(pre->coef>0)
{
if(pre->expn == 1)
printf("+%d*X",pre->coef,pre->expn);
else
printf("+%d*X^%d",pre->coef,pre->expn);
}
else if (pre->coef {
if(pre->expn == 1)
printf("%d*X",pre->coef,pre->expn);
else
printf("%d*X^%d",pre->coef,pre->expn);
}
}
pre=pre->next;
}
printf("\n");
}LNode AddPolyn(LNode H1,LNode H2) //表达式相加
{
LNode H3,p1,p2,p3,pre; //p1为第一个多项式的项,pre为p的前一项
H3=(LNode)malloc(sizeof(LNode));
H3->next=NULL;
p1=H1->next;
p2=H2->next;
pre=H3;
while(p1&&p2)
{
if(p1->expn>p2->expn) //第一个多项式的项的指数大于第二个的项的指数
{
p3=(LNode)malloc(sizeof(LNode));
p3->expn=p1->expn;
p3->coef=p1->coef;
p3->next=pre->next;
pre->next=p3;
pre=p3;
p1=p1->next;
}
else if(p1->expnexpn) //第一个多项式的项的指数小于第二个的项的指数
{
p3=(LNode)malloc(sizeof(LNode));
p3->expn=p2->expn;
p3->coef=p2->coef;
p3->next=pre->next;
pre->next=p3;
pre=p3;
p2=p2->next;
}
else if(p1->coef+p2->coef!=0) //相加不为0,指数相同系数相加
{
p3=(LNode)malloc(sizeof(LNode));
p3->expn=p1->expn;
p3->coef=p1->coef+p2->coef;
p3->next=pre->next;
pre->next=p3;
pre=p3;
p1=p1->next;
p2=p2->next;
}
else //相加为0
{
p1=p1->next;
p2=p2->next;
}
}while(p2) { p3=(LNode)malloc(sizeof(LNode)); p3->expn=p2->expn; p3->coef=p2->coef; p3->next=pre->next; pre->next=p3; pre=p3; p2=p2->next; } while(p1) { p3=(LNode)malloc(sizeof(LNode)); p3->expn=p1->expn; p3->coef=p1->coef; p3->next=pre->next; pre->next=p3; pre=p3; p1=p1->next; } return H3;
}
LNode SubstractPolyn(LNode H1,LNode H2) //相减(让系数变负,然后代入加法函数)
{
LNode H3,pre;
pre=H2->next;
while(pre)
{
pre->coef=-pre->coef;
pre=pre->next;
}
H3=AddPolyn(H1,H2);
pre=H2->next;
while(pre)
{
pre->coef=-pre->coef;
pre=pre->next;
}
return H3;
}void DerivativePolyn(LNode Head)
{
LNode pre;
pre=Head->next;
if(pre->expn==0)//指数为0
{
}
else
{
if(pre->expn == 1)
printf("%d",pre->coef);
else
{
if(pre->expn == 2)
printf("%d*X",pre->coef*pre->expn);
else
printf("%d*X^%d",pre->coef*pre->expn,(pre->expn)-1);
}
}
pre=pre->next;
while(pre) //系数不为0
{
if(pre->expn==0) //指数为0
{
}
else //指数不为0
{
if(pre->coef>0)
{
if(pre->expn == 1)
printf("+%d",pre->coef);
else
{
if(pre->expn == 2)
printf("+%d*X",pre->coef*pre->expn);
else
printf("+%d*X^%d",pre->coef*pre->expn,(pre->expn)-1);
}
}
else if (pre->coef {
if(pre->expn == 1)
printf("%d",pre->coef);
else
{
if(pre->expn == 2)
printf("%d*X",pre->coef*pre->expn);
else
printf("%d*X^%d",pre->coef*pre->expn,(pre->expn)-1);
}
}
}
pre=pre->next; //遍历每一项
}
printf("\n");
}int expnPolyn(int x,int y)
{
int k=1;
int i;
if (y == 0)
return 1;
else if (y == 1)
return x;
else
{
for (i=1;i<=y;i++)
k *= x;
return k;
}}
void eqPolyn(LNode Head)
{
LNode pre;
long n=0;
int x;
pre=Head->next;
printf("请输入x的值:");
scanf("%d",&x);
while(pre) //系数不为0
{
n+= pre->coef*expnPolyn(x,pre->expn);
pre=pre->next; //遍历每一项
}
printf("%d",n);
printf("\n");
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报