C语言实现一元多项式加法运算
#include <stdio.h>
#include <stdlib.h>
// 定义一元多项式节点
typedef struct node {
int coef; // 系数
int exp; // 次数
struct node *next; // 下一个节点指针
} Node;
// 创建一元多项式
Node *create() {
Node *head, *p, *q;
int c, e;
head = (Node *)malloc(sizeof(Node)); // 头结点
head->next = NULL;
q = head;
printf("请输入系数和指数(以-1 -1结束):\n");
scanf("%d %d", &c, &e);
while (c != -1 && e != -1) {
p = (Node *)malloc(sizeof(Node)); // 创建新节点
p->coef = c;
p->exp = e;
q->next = p;
q = p;
scanf("%d %d", &c, &e);
}
q->next = NULL;
return head;
}
// 输出一元多项式
void print(Node *head) {
Node *p = head->next;
while (p != NULL) {
if (p->exp == 0) {
printf("%d", p->coef);
} else if (p->exp == 1) {
printf("%dx", p->coef);
} else {
printf("%dx^%d", p->coef, p->exp);
}
p = p->next;
if (p != NULL && p->coef > 0) {
printf("+");
}
}
printf("\n");
}
// 一元多项式相加
Node *add(Node *a, Node *b) {
Node *c, *pa, *pb, *pc;
c = (Node *)malloc(sizeof(Node)); // 结果多项式头结点
c->next = NULL;
pa = a->next;
pb = b->next;
pc = c;
while (pa != NULL && pb != NULL) {
if (pa->exp == pb->exp) {
int sum = pa->coef + pb->coef;
if (sum != 0) {
Node *p = (Node *)malloc(sizeof(Node)); // 新节点
p->coef = sum;
p->exp = pa->exp;
pc->next = p;
pc = p;
}
pa = pa->next;
pb = pb->next;
} else if (pa->exp > pb->exp) {
Node *p = (Node *)malloc(sizeof(Node)); // 新节点
p->coef = pa->coef;
p->exp = pa->exp;
pc->next = p;
pc = p;
pa = pa->next;
} else {
Node *p = (Node *)malloc(sizeof(Node)); // 新节点
p->coef = pb->coef;
p->exp = pb->exp;
pc->next = p;
pc = p;
pb = pb->next;
}
}
while (pa != NULL) {
Node *p = (Node *)malloc(sizeof(Node)); // 新节点
p->coef = pa->coef;
p->exp = pa->exp;
pc->next = p;
pc = p;
pa = pa->next;
}
while (pb != NULL) {
Node *p = (Node *)malloc(sizeof(Node)); // 新节点
p->coef = pb->coef;
p->exp = pb->exp;
pc->next = p;
pc = p;
pb = pb->next;
}
pc->next = NULL;
return c;
}
int main() {
Node *a, *b, *c;
printf("请输入第一个多项式:\n");
a = create();
printf("第一个多项式为: ");
print(a);
printf("请输入第二个多项式:\n");
b = create();
printf("第二个多项式为: ");
print(b);
c = add(a, b);
printf("两个多项式相加的结果为: ");
print(c);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/lRHp 著作权归作者所有。请勿转载和采集!