linux下c语言编程多项式求和,c语言实现多项式求和

一元多项式求和(c语言实现)

​ 把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。

#include

#include

typedef struct LNode

{

int coef; // 系数

int exp; // 指数

struct LNode* next;

} LinkNode;

void Create(LinkNode*& head) // 创建多项式

{

int n, coef, exp;

LinkNode* index, * node;

head = (LinkNode*)malloc(sizeof(LinkNode)); // 创建头节点

index = head; // 辅助指针,使 index 指向最后一个节点,没次新增加一个节点,index就后移

printf("请输入多项式的项数:");

scanf("%d", &n);

for (int i = 1; i <= n; i++)

{

printf("请输入第%d项的系数和指数", i);

scanf("%d %d", &coef, &exp);

node = (LinkNode*)malloc(sizeof(LinkNode)); // 创建新的节点

node->coef = coef;

node->exp = exp;

index->next = node; // 将新创建的加入到链表中

index = node; // index指向新的节点

}

index->next = NULL;

}

void Display(LinkNode* L) // 输出多项式

{

L = L->next; // 让 指向第一个节点

while (L != NULL) // 如果 p 不为空(链表不为空),则输出

{

printf("%dX^%d", L->coef, L->exp); // 输出系数 和 指数

if (L->next != NULL) // 如果 p 的下一个节点不为空,这就输出一个 + 号(防止多输出一个 + 号)

{

printf("+");

}

L = L->next;

}

printf("\n");

}

LinkNode* ListAdd(LinkNode* p, LinkNode* q) // 多项式相加

{

p = p->next;

q = q->next;

LinkNode* addL, * index, * node = NULL; // 用 addL存储相加后的二项式, index 为辅助指针,node为新节点

addL = (LinkNode*)malloc(sizeof(LinkNode));

index = addL;

while (p != NULL && q != NULL) // 目的是为了让两个多项式为空去比较

{

if (p->exp > q->exp) // 如果 p 的指数大于 q 的指数就把 p 的该项做为新节点,让后让 p 后移一位

{

node = (LinkNode*)malloc(sizeof(LinkNode));

node->coef = p->coef;

node->exp = p->exp;

index->next = node;

index = node;

p = p->next;

}

else if (p->exp == q->exp) // 如果 p 的指数等于 q 的指数,就把 p 和 q 的系数相加作为新节点,让后让 p 和 q 后移一位

{

node = (LinkNode*)malloc(sizeof(LinkNode));

node->coef = p->coef + q->coef;

node->exp = p->exp;

if (node->coef == 0)

{

free(node);

}

else

{

index->next = node;

index = node;

}

p = p->next;

q = q->next;

}

else // 如果 q 的指数大于 p 的指数就把 q 的该项做为新节点,让后让 q 后移一位

{

node = (LinkNode*)malloc(sizeof(LinkNode));

node->coef = q->coef;

node->exp = q->exp;

index->next = node;

index = node;

q = q->next;

}

}

if (p != NULL) // 如果 p 不为空,说明 q 为空了,就可以直接将 p 后面的节点给 node

{

node->next = p->next;

}

else if (q != NULL) // 如果 q 不为空,说明 p 为空了,就可以直接将 q 后面的节点给 node

{

node->next = q->next;

}

else // 如果执行这个则所民 p 和 q 都为空了,就让node指向的最后的节点指向空

{

node->next = NULL;

}

return addL;

}

int main(int argc, char const* argv[])

{

LinkNode* P, * Q;

printf("请输入第一个多项式");

Create(P);

Display(P);

printf("请输入第二个多项式");

Create(Q);

Display(Q);

LinkNode* List = ListAdd(P, Q);

printf("相加后的多项式为:");

Display(List);

return 0;

}

你可能感兴趣的:(linux下c语言编程多项式求和,c语言实现多项式求和)