1.1[问题描述]
能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;
1.2[实现提示]
以链式存储结构实现多项式。
代码
#include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct PNode
{
float coef;
int expn;
struct PNode *next;
}PNode,*Polynomial;
void CreatePolyn(Polynomial &p1,Polynomial &p2){
printf("请输入多项式的项数:\n");
int n;
Polynomial s1,pre1,q1,s2,pre2,q2;
scanf("%d",&n);
p1=new PNode;
p2=new PNode;
p1->next=NULL;
p2->next=NULL;
for(int i=1;i<=n;i++){
s1=new PNode;
s2=new PNode;
cin>>s1->coef>>s1->expn;
s2->coef=s1->coef;s2->expn=s1->expn;
pre1=p1;
pre2=p2;
q1=p1->next;
q2=p2->next;
while(q1&&q1->expn>s1->expn){
pre1=q1;
q1=q1->next;
}
s1->next=q1;
pre1->next=s1;
while(q2&&q2->expn>s2->expn){
pre2=q2;
q2=q2->next;
}
s2->next=q2;
pre2->next=s2;
}
}
void Build(Polynomial &pa,Polynomial &pb,Polynomial &pc,Polynomial &pd){
CreatePolyn(pa,pc);
CreatePolyn(pb,pd);
printf("建立成功!\n\n");
system("Pause");
system("cls");
}
void Addpolyn(Polynomial pa,Polynomial pb){
Polynomial p1,p2,p3,i;
p1=pa->next;p2=pb->next;p3=pa;
while(p1&&p2){
if(p1->expn==p2->expn){
Polynomial r;
int sum=p1->coef+p2->coef;
if(sum!=0){
p1->coef=sum;
p3->next=p1;
p3=p1;
p1=p1->next;
r=p2;p2=p2->next;
delete r;
}
else{
r=p1;p1=p1->next;delete r;
r=p2;p2=p2->next;delete r;
}
}
else if(p1->expn<p2->expn){
p3->next=p2;
p3=p2;
p2=p2->next;
}
else{
p3->next=p1;
p3=p1;
p1=p1->next;
}
}
p3->next=p1?p1:p2;
printf("相加后的多项式为:\n");
i=pa->next;
while(i!=NULL){
printf("%.1fx%d ",i->coef,i->expn);
i=i->next;
}
printf("\n");
system("Pause");
system("cls");
}
void Subpolyn(Polynomial pc,Polynomial pd){
Polynomial p1,p2,p3,i,j;
p1=pc->next;p2=pd->next;p3=pc;
j=pd->next;
while(j!=NULL){
j->coef=-(j->coef);
j=j->next;
}
while(p1&&p2){
if(p1->expn==p2->expn){
Polynomial r;
int sum=p1->coef+p2->coef;
if(sum!=0){
p1->coef=sum;
p3->next=p1;
p3=p1;
p1=p1->next;
r=p2;p2=p2->next;
delete r;
}
else{
r=p1;p1=p1->next;delete r;
r=p2;p2=p2->next;delete r;
}
}
else if(p1->expn<p2->expn){
p3->next=p2;
p3=p2;
p2=p2->next;
}
else{
p3->next=p1;
p3=p1;
p1=p1->next;
}
}
p3->next=p1?p1:p2;
printf("相减后的多项式为:\n");
i=pc->next;
while(i!=NULL){
printf("%.1fx%d ",i->coef,i->expn);
i=i->next;
}
printf("\n");
system("Pause");
system("cls");
}
void Display(Polynomial pa,Polynomial pb){
Polynomial i,j;
printf("以下是按指数降序建立的多项式:\n");
printf("多项式一:\n");
i=pa->next;
while(i!=NULL){
printf("%.1fx%d ",i->coef,i->expn);
i=i->next;
}
printf("\n");
printf("多项式二:\n");
j=pb->next;
while(j!=NULL){
printf("%.1fx%d ",j->coef,j->expn);
j=j->next;
}
printf("\n");
system("Pause");
system("cls");
}
int main()
{
Polynomial pa,pb,pc,pd;
while(1){
printf("----------多项式运算----------\n\n");
printf(" 1.建立多项式.\n");
printf(" 2.输出多项式.\n");
printf(" 3.多项式加法.\n");
printf(" 4.多项式减法.\n");
printf(" 5.退出.\n");
printf("------------------------------\n\n");
printf("请输入您的选择:\n");
int a;
scanf("%d",&a);
if(a==5){
printf("-----------\n");
printf("谢谢使用!\n");
printf("-----------\n");
break;
}
if(a!=1&&a!=2&&a!=3&&a!=4&&a!=5){
printf("您输入的不符合要求,请重新输入!\n");
continue;
}
switch(a){
case 1:Build(pa,pb,pc,pd);break;
case 2:Display(pa,pb);break;
case 3:Addpolyn(pa,pb);break;
case 4:Subpolyn(pc,pd);break;
}
}
return 0;
}
/*
4
1 1
-4.4 2
6 4
-5 3
5
2 1
3.4 4
-5 3
7 5
-3 2
*/