本文主要是介绍一元多项式求和(c语言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
注意:要求输入的一元多项式必须已经合并同类项。
#include<stdio.h>
#include<stdlib.h>
typedef struct str {int coe,ind;struct str *next;
} list;
list *creatlist(int length);
list *sumlist(list *a,list *b);
void displaylist(list *a);
int main() {list *a=creatlist(4);list *b=creatlist(3);list *c=sumlist(a,b);displaylist(c);return 0;
}list *creatlist(int length) {int a[length];int b[length];printf("请输入表达式:\n");for(int i=0; i<length; i++) {scanf("%d %d",&a[i],&b[i]);}int k=0,t=0;for(int i=0; i<length; i++) {k=i;for(int j=i; j<length; j++) {if(b[j]<b[k]) {k=j;}}t=b[i];b[i]=b[k];b[k]=t;t=a[i];a[i]=a[k];a[k]=t;}list *head,*p,*q;p=(list*)malloc(sizeof(list));head=p;for(int i=0; i<length; i++) {q=(list*)malloc(sizeof(list));q->coe=a[i];q->ind=b[i];q->next=NULL;p->next=q;p=q;}return head;}
list *sumlist(list *a,list *b) {list *head=(list*)malloc(sizeof(list));list *p=head;a=a->next;b=b->next;for(; a!=NULL&&b!=NULL;) {if(a->ind<b->ind) {head->next=a;head=a;a=a->next;continue;}if(a->ind==b->ind) {int sum=a->coe+b->coe;if(sum!=0) {a->coe=sum;head->next=a;head=a;a=a->next;b=b->next;continue;} else if(sum==0) {a=a->next;b=b->next;continue;}}if(a->ind>b->ind) {head->next=b;head=b;b=b->next;continue;}}if(a==NULL) {head->next=b;}if(b==NULL) {head->next=a;}return p;
}
void displaylist(list *a) {a=a->next;if(a->ind!=0)printf("%dx*%d",a->coe,a->ind);else {printf("%d",a->coe);}a=a->next;while(a!=NULL) {if(a->coe>0&&a->ind!=0) {printf("+%dx*%d",a->coe,a->ind);a=a->next;}if(a->coe>0&&a->ind==0) {printf("+%d",a->coe);a=a->next;}if(a->coe<0&&a->ind!=0) {printf("-%dx*%d",a->coe,a->ind);a=a->next;}if(a->coe>0&&a->ind==0) {printf("-%d",a->coe);a=a->next;}}}
这篇关于一元多项式求和(c语言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!