一元多项式的建立及加减
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
?int x;
?int y;
?struct *next;
}node;
void create1(node **phead,int i,int n)??????????????????????? 一元多項式的建立
? {
?int a,b;
??? node *p1, *p2, *q;
??? p2 = *phead;
??? p1 = NULL;
??? while (p2!= NULL) {
????? p1 = p2;
????? p2 = p2->next;
??? }
??? q= (node *)malloc(sizeof(node));
??? printf("輸入第%d項的系數,指數:? ",i);
??? scanf("%d%d",&a,&b);
??? q->x=a;
??? q->y=b;
??? q->next = p2;
??? if (p1 == NULL)
?{
????? *phead= q;
??? }
?else
?{
????? p1->next = q;
??? }
?}
void sort(node *phead)???????????????????????????? 對多項式進行排序
{
?node *p,*q;
?int t;
?p=q=phead;
?for(p=phead;p->next!=NULL;p=p->next)
?{
??for(q=p;q!=NULL;q=q->next)
??{
???if(p->y>q->y)
???{
????t=p->y;
????p->y=q->y;
????q->y=t;
????t=p->x;
????p->x=q->x;
????q->x=t;
???}
??}
?}
}
void print(node *head)
{
?node *p;
?p=head;
?while(p->next!=NULL)
?{
??printf("%dX^%d",p->x,p->y);
??p=p->next;
??if(p->x>0)
???printf("+");
?}
?printf("%dX^%d",p->x,p->y);
}
void plus(node *phead1,node *phead2,int n)??????????? 多項式的相加
{
?node *p,*q,*p1,*p2;
?node a[100];
?int i=0;
?p=phead1;
?q=phead2;
?while(p!=NULL&&q!=NULL)
?{?
??if(p->y==q->y)
??{
???a[i].x=p->x+q->x;
???a[i].y=p->y;
???i++;
???n--;
???p=p->next;
???q=q->next;
??}
??else if(p->y>q->y)
??{
???a[i].x=q->x;
???a[i].y=q->y;
???i++;
???q=q->next;
??}
??else
??{
???a[i].x=p->x;
???a[i].y=p->y;
???i++;
???p=p->next;
??}
?}
?while(p!=NULL)
?{
??a[i].x=p->x;
??a[i].y=p->y;
??i++;
??p=p->next;
?}
?while(q!=NULL)
?{
??a[i].x=q->x;
??a[i].y=q->y;
??i++;
??q=q->next;
?}
?printf("\n");
?printf("多項式的和為:? ");
?for(i=0;i<n;i++)
?{
??printf("%dX^%d",a[i].x,a[i].y);
??if(a[i+1].x>0)
???printf("+");
?}
?printf("\n");
}
void minus(node *phead1,node *phead2,int n)??????????? ?多項式的相減
{
?node *p,*q;
?node a[100];
?int i=0;
?p=phead1;
?q=phead2;
?while(p!=NULL&&q!=NULL)
?{?
??if(p->y==q->y)
??{
???a[i].x=p->x-q->x;
???a[i].y=p->y;
???i++;
???n--;
???p=p->next;
???q=q->next;
??}
??else if(p->y>q->y)
??{
???a[i].x=-(q->x);
???a[i].y=q->y;
???i++;
???q=q->next;
??}
??else
??{
???a[i].x=p->x;
???a[i].y=p->y;
???i++;
???p=p->next;
??}
?}
?while(p!=NULL)
?{
??a[i].x=p->x;
??a[i].y=p->y;
??i++;
??p=p->next;
?}
?while(q!=NULL)
?{
??a[i].x=-(q->x);
??a[i].y=q->y;
??i++;
??q=q->next;
?}
?printf("\n");
?printf("多項式的差為:? ");
?for(i=0;i<n;i++)
?{
??printf("%dX^%d",a[i].x,a[i].y);
??if(a[i+1].x>0)
???printf("+");
?}
?printf("\n");
}
int main(void)
{
?int i,n1,n2,t;
?node *head1,*head2;
?printf("輸入第一個式子項的數目:");
?scanf("%d",&n1);
?for (i = 1,head1 = NULL;i <= n1;i++)
??create1(&head1, i, n1);
?sort(head1);
?printf("第一個多項式為:? ");
?print(head1);
?printf("\n輸入第二個式子項的數目:");
?scanf("%d",&n2);
?for (i = 1,head2 = NULL;i <= n2;i++)
??create1(&head2, i, n2);
?sort(head2);
?printf("第二個多項式為:? ");
?print(head2);
?plus(head1,head2,n1+n2);
?minus(head1,head2,n1+n2);
}
?
總結
以上是生活随笔為你收集整理的一元多项式的建立及加减的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hanlp中自定义词典的配置、引用以及问
- 下一篇: Leetcode--714. 买卖股票的