题目描述
输入二个多项式,输出二个多项式的和
代码实现
#include <stdio.h>
#include <stdlib.h>
#define MAX 6
typedef struct mylink{
int exp; // 指数
int coef; // 系数
struct mylink *next; // 指向多项式的下一项
} link;
int index = 1;
link *createduo(link *duo){
printf("开始创建第%d个多项式:\n", index++);
// 申请头结点的空间
duo = (link*)malloc(sizeof(link));
link *temp = duo; // 创造临时结点
printf("请输入指数为0的多项式系数:");
scanf("%d", &temp->coef);
for(int i = 1; i < MAX; i++){
printf("请输入指数为%d的多项式系数:", i);
// 创造新结点
link *newnode = (link*)malloc(sizeof(link));
scanf("%d", &newnode->coef);
newnode->exp = i;
newnode->next = NULL;
temp->next = newnode;
temp = newnode;
}
printf("\n");
return duo;
}
link *add(link *duo_1, link *duo_2, link *duo_3){
duo_3 = (link*)malloc(sizeof(link));
link *temp = duo_3;
link *p = duo_1;
link *q = duo_2;
temp->exp = 0;
temp->coef = p->coef + q->coef;
int i = 1;
while(p->next && q->next){ // 当工作指针都存在时进入循环
p = p->next, q = q->next;
link *node = (link*)malloc(sizeof(link));
node->exp = i++;
node->coef = p->coef + q->coef;
temp->next = node;
temp = node;
}
return duo_3;
}
void show(link *duo){
link *temp = duo;
while(temp){
printf("%d\t", temp->coef);
temp = temp->next;
}
}
int main(void){
link *head_1 = NULL;
link *head_2 = NULL;
link *head_3 = NULL;
head_1 = createduo(head_1);
head_2 = createduo(head_2);
head_3 = add(head_1, head_2, head_3);
printf("指数:\n");
printf("0\t1\t2\t3\t4\t5\n");
printf("系数:\n");
show(head_3);
return 0;
}