C语言实现多项式的相加
本文实例为大家分享了C语言多项式相加的具体代码,供大家参考,具体内容如下
包含带头节点的链表的初始化,输出:
#define_CRT_SECURE_NO_WARNINGS #include#include typedefstructPol { intcoe;//系数 intindex;//指数 structPol*next; }Pol; intmain(intargc,char*argv[]) { Pol*head1=NULL;//第一个多项式 Pol*head2=NULL;//第二个多项式 Pol*Initiate(Pol*head1);//声明初始化函数 voidOutput(Pol*head);//声明输出函数 voidPolAdd(Pol*head1,Pol*head2);//声明相加函数 intcoe,index; charsign; Pol*p; intn=0; //初始化第一个多项式 head1=Initiate(head1); p=head1; while(1) { scanf("%dx%d%c",&coe,&index,&sign); p->next=(Pol*)malloc(sizeof(Pol)); p=p->next; p->coe=coe; p->index=index; p->next=NULL; if(sign=='\n') break; } printf("第一多项式输入完毕。\n"); //初始化第二个多项式 head2=Initiate(head2); p=head2; while(1) { scanf("%dx%d%c",&coe,&index,&sign); p->next=(Pol*)malloc(sizeof(Pol)); p=p->next; p->coe=coe; p->index=index; p->next=NULL; if(sign=='\n') break; } printf("第二多项式输入完毕。\n"); //调用相加函数和输出函数 PolAdd(head1,head2); Output(head1); system("PAUSE"); return0; } //初始化链表函数 Pol*Initiate(Pol*head) { head=(Pol*)malloc(sizeof(Pol)); head->next=NULL; returnhead; } //初始化相加函数 voidPolAdd(Pol*head1,Pol*head2) { Pol*p=head1->next; Pol*q=head2->next; Pol*pre=head1; Pol*temp=NULL; intsum; while((p!=NULL)&&(q!=NULL)) { if(p->index index) { pre->next=p; pre=pre->next; p=p->next; } elseif(p->index==q->index) { sum=p->coe+q->coe; if(sum!=0) { p->coe=sum; pre->next=p; pre=pre->next; p=p->next; //删除节点 temp=q; q=q->next; free(temp); } else { temp=p; p=p->next; free(temp); temp=q; q=q->next; free(temp); } } else { pre->next=q; pre=pre->next; q=q->next; } } //两串长度不相等时,把尾部一次加入 if(p!=NULL) pre->next=p; else pre->next=q; } //输出函数 voidOutput(Pol*head) { Pol*p=head; p=p->next; inti=0; while(p) { if(p->coe>0&&i!=0) { printf("+%dX^%d",p->coe,p->index); p=p->next; } else { printf("%dX^%d",p->coe,p->index); p=p->next; } i++; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。