一元多项式运算器的实现(+.-)
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int a;//多项式系数
int n;//多项式指数
}datalist;
typedef struct list
{
datalist data;
struct list *next;
}lnode;
struct list *creat();//创建头结点
struct list *adddata(struct list *head);//数据的输入
void prt();//显示界面
void output(struct list *head);//打印链表
struct list *add(struct list *la,struct list *lb,struct list *lc);//多项式相加
struct list *sub(struct list *la,struct list *lb,struct list *lc);//多项式相减
struct list *creat()
{
struct list *head;
head=(struct list *)malloc(sizeof(struct list));
head->next=NULL;
return head;
}
struct list *adddata(struct list *head)
{
struct list *l,*p;
int i,j;
l=(struct list *)malloc(sizeof(struct list));
l=head;
printf("请输入多项式的项数:");
scanf("%d",&i);
for(j=1;j<=i;j++){
p=(struct list *)malloc(sizeof(struct list));
printf("请输入第%d项的系数和指数",j);
scanf("%d %d",&p->data.a,&p->data.n);
p->next=NULL;
l->next=p;
l=p;
}
return head;
}
void prt()
{
printf("----------欢迎来到多项式的计算器----------\n");
printf("---------------1.多项式相加---------------\n");
printf("---------------2.多项式相减---------------\n");
}
void output(struct list *head)
{
struct list *f;
f=(struct list *)malloc(sizeof(struct list));
f=head->next;
while(f){
printf("%dX%d ",f->data.a,f->data.n);
f=f->next;
}
}
struct list *add(struct list *la,struct list *lb,struct list *lc)
{
struct list *pa,*pb,*pc;
pa=(struct list*)malloc(sizeof(struct list));
pb=(struct list*)malloc(sizeof(struct list));
pc=(struct list*)malloc(sizeof(struct list));
pa=la->next;
pb=lb->next;
pc=lc;
while(pa&&pb){
if(pa->data.n<pb->data.n){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else if(pa->data.n>pb->data.n){
pc->next=pb;
pc=pb;
pb=pb->next;
}
else{
pa->data.a+=pb->data.a;
pc->next=pa;
pc=pa;
pa=pa->next;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
return lc;
}
struct list *sub(struct list *la,struct list *lb,struct list *lc)
{
struct list *pa,*pb,*pc;
pa=(struct list*)malloc(sizeof(struct list));
pb=(struct list*)malloc(sizeof(struct list));
pc=(struct list*)malloc(sizeof(struct list));
pa=la->next;
pb=lb->next;
pc=lc;
while(pa&&pb){
if(pa->data.n<pb->data.n){
pc->next=pa;
pc=pa;
pa=pa->next;
}
if(pa->data.n>pb->data.n){
pc->next=pb;
pc=pb;
pb=pb->next;
}
if(pa->data.n==pb->data.n){
if(pa->data.a!=pb->data.a){
pa->data.a-=pb->data.a;
pc->next=pa;
pc=pa;
pa=pa->next;
pb=pb->next;
}
else{
pa=pa->next;
pb=pb->next;
}
}
}
pc->next=pa?pa:pb;
return lc;
}
int main()
{
int g;
struct list *la,*lb,*lc;
printf("请输入多项式!\n");
la=creat();
la=adddata(la);
printf("请输入下一个多项式!\n");
lb=creat();
lb=adddata(lb);
lc=creat();
printf("输入完成!\n");
prt();
printf("请输入想要选择的数字:");
scanf("%d",&g);
switch(g){
case 1:
add(la,lb,lc);
break;
case 2:
sub(la,lb,lc);
break;
default:
printf("输入错误!\n");
break;
}
printf("计算结果为:\n");
output(lc);
return 0;
}
运算结果: