一元多项式求和:把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。
#源代码
#include<iostream>
#define MAXSIZE 50
using namespace std;
typedef struct LNode
{
float coef;
int exp;
struct LNode *next;
}LinkNode;
//初始化链表
//void InitList(LinkNode*& L)
//{
// L = (LinkNode*)malloc(sizeof(LinkNode));KC
// L->next = NULL;
//}
//多项式和
LinkNode* Add(LinkNode* p, LinkNode* q)
{
float sum;
LinkNode* L, * s, * r;
p = p->next;
q = q->next;
L= (LinkNode*)malloc(sizeof(LinkNode));
r = L;
while (p != NULL && q != NULL)
{
if (p->exp > q->exp)
{
s= (LinkNode*)malloc(sizeof(LinkNode));
s->coef = p->coef;
s->exp = p->exp;
r->next = s;
r = s;
p = p->next;//下次比较的时候p->exp就比以前的小
}
else if (p->exp == q->exp)
{
s= (LinkNode*)malloc(sizeof(LinkNode));
s->coef = p->coef + q->coef;
s->exp = p->exp;
if (s->coef == 0)free(s);
else
{
r->next = s;
r = s;//重置r位置
}
p = p->next;
q = q->next;//两个都往后移一位
}
else//p->exp<q->exp情况
{
s= (LinkNode*)malloc(sizeof(LinkNode));
s->coef = q->coef;
s->exp = q->exp;
r->next = s;
r = s;//让r指向下一位
q = q->next;
}
}
if (p != NULL)
r->next = p;//把p给r
else if (q != NULL)
r->next = q;//把q给r
else
r->next = NULL;
return L;
}
//创建链表
void CreateList(LinkNode*& L)
{
float c=1;
int e;
L = (LinkNode*)malloc(sizeof(LinkNode));
L->next = NULL;
LinkNode* s, * r;
r = L;
cout << "请输入多项式的系数和指数(按0结束输入)" << endl;
cin >> c >> e;
while (c)
{
s= (LinkNode*)malloc(sizeof(LinkNode));
s->coef = c;
s->exp = e;
r->next = s;
r = s;
cin >> c >> e; //尾插法
}
r->next = NULL;
}
//显示多项式
void Print(LinkNode* L)
{
while (L->next!=NULL)
{
L = L->next;
cout << L->coef << "X^" << L->exp;
if (L->next != NULL && L->next->coef > 0)//下一项有系数
cout << "+";
}
}
//bool ListEmpty(LinkNode* L)
//{
// if (L->next == NULL)
// return 0;
//}
void ListDelete(LinkNode*L)
{
LinkNode* p, * q;
p = L->next;
while (p)
{
q = p;
p = p->next;
delete q;
}
L->next = NULL;
}
void main()
{
int c;
int a = 1;
while (a)
{
cout << endl;
cout << "*********************菜单************************" << endl;
cout << "1.创建并显示一元多项式A和B,计算A和B的和并显示" << endl;
cout << "2.退出程序" << endl;
cout << "输入要执行的选项" << endl;
cin >> c;
switch (c)
{
case 1: {LinkNode* p, * q;
CreateList(p);
cout << "一元多项式A是:"<<endl;
Print(p);
CreateList(q);
cout << "一元多项式B是:"<<endl;
Print(q);
LinkNode* L = Add(p, q);
cout << "最后的多项式为:" << endl;
Print(L);
ListDelete(L);
}
break;
case 2:a = 0;
break;
}
}
system("pause");
}