程序運行結果如下:
- <span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></span>
- # include<stdlib.h>
- struct node
- {
- int exp;
- float coef;
- struct node *next;
- };
- typedef struct node ListNode;
- ListNode *createpoly()
- {
- ListNode *h=NULL,*p,*q=NULL;
- int e;
- float c;
- printf("請輸入係數和指數:");
- scanf("%f,%d",&c,&e);
- while(e!=0||c!=0)
- {
- p=(ListNode*)malloc(sizeof(ListNode));
- p->coef=c;
- p->exp=e;
- p->next=NULL;
- if(h==NULL)
- h=p;
- else
- q->next=p;
- q=p;
- printf("請輸入係數和指數:");
- scanf("%f,%d",&c,&e);
- }
- return h;
- }
- void disppoly(ListNode *h)
-
- {
- ListNode *p;
- p=h;
- while(p!=NULL)
- {
- if(p->exp==0)
- printf("%.2f",p->coef);
- else
- printf("%fx^%d",p->coef,p->exp);
- p=p->next;
- if(p!=NULL)
- printf("+");
- }
- printf("\n");
- }
- ListNode *addpoly(ListNode *h1,ListNode *h2)
-
- {
- ListNode *p,*r=NULL,*s1,*s2,*s=NULL;
- float c;
- int e;
- s1=h1;
- s2=h2;
- while(s1!=NULL&&s2!=NULL)
- {
- if(s1->exp==s2->exp)
- {
- c=s1->coef+s2->coef;
- e=s1->exp;
- s1=s1->next;
- s2=s2->next;
- }
- else if(s1->exp>s2->exp)
- {
- c=s1->coef;
- e=s1->exp;
- s1=s1->next;
- }
- else
- {c=s2->coef;
- e=s2->exp;
- s2=s2->next;
- }
- if(c!=0)
- {
- p=(ListNode*)malloc(sizeof(ListNode));
- p->coef=c;
- p->exp=e;p->next=NULL;
- if(s==NULL)
- s=p;
- else
- r->next=p;
- r=p;
- }
- }
- while(s1!=NULL)
- {
- c=s1->coef;
- e=s1->exp;
- s1=s1->next;
- if(c!=0)
- {
- p=(ListNode*)malloc(sizeof(ListNode));
- p->coef=c;
- p->exp=e;p->next=NULL;
- if(s==NULL)
- s=p;
- else
- r->next=p;
- r=p;
- }
- }
- while(s2!=NULL)
- {
- c=s2->coef;
- e=s2->exp;
- s2=s2->next;
- if(c!=0)
- {
- p=(ListNode*)malloc(sizeof(ListNode));
- p->coef=c;
- p->exp=e;p->next=NULL;
- if(s==NULL)
- s=p;
- else
- r->next=p;
- r=p;
- }
- }
- return s;
- }
- void deletepoly(ListNode *h)
-
- {
- ListNode *p,*r=h;
- while(r!=NULL)
- {
- p=r->next;
- free(r);
- r=p;
- }
- }
- int main()
- {
- ListNode *head1,*head2,*head;
- printf("創建第一個多項式:\n");
- head1=createpoly();
- printf("創建第二個多項式:\n");
- head2=createpoly();
- printf("將兩個多項式相加:\n");
- head=addpoly(head1,head2);
- disppoly(head);
- deletepoly(head);
- }
- </span>
# include<stdlib.h>
struct node
{
int exp;
float coef;
struct node *next; /*指向結構體指針*/
};
typedef struct node ListNode;
ListNode *createpoly() //創建多項式鏈表
{
ListNode *h=NULL,*p,*q=NULL;
int e;
float c;
printf("請輸入係數和指數:");
scanf("%f,%d",&c,&e);
while(e!=0||c!=0)
{
p=(ListNode*)malloc(sizeof(ListNode));
p->coef=c;
p->exp=e;
p->next=NULL;
if(h==NULL)
h=p;
else
q->next=p;
q=p;
printf("請輸入係數和指數:");
scanf("%f,%d",&c,&e);
}
return h;
}
void disppoly(ListNode *h)
/*輸出多項式*/
{
ListNode *p;
p=h;
while(p!=NULL)
{
if(p->exp==0)
printf("%.2f",p->coef);
else
printf("%fx^%d",p->coef,p->exp);
p=p->next;
if(p!=NULL)
printf("+");
}
printf("\n");
}
ListNode *addpoly(ListNode *h1,ListNode *h2)
/*將兩個多項式相加*/
{
ListNode *p,*r=NULL,*s1,*s2,*s=NULL;
float c;
int e;
s1=h1;
s2=h2;
while(s1!=NULL&&s2!=NULL)
{
if(s1->exp==s2->exp)
{
c=s1->coef+s2->coef;
e=s1->exp;
s1=s1->next;
s2=s2->next;
}
else if(s1->exp>s2->exp)
{
c=s1->coef;
e=s1->exp;
s1=s1->next;
}
else
{c=s2->coef;
e=s2->exp;
s2=s2->next;
}
if(c!=0)
{
p=(ListNode*)malloc(sizeof(ListNode));
p->coef=c;
p->exp=e;p->next=NULL;
if(s==NULL)
s=p;
else
r->next=p;
r=p;
}
}
while(s1!=NULL)
{
c=s1->coef;
e=s1->exp;
s1=s1->next;
if(c!=0)
{
p=(ListNode*)malloc(sizeof(ListNode));
p->coef=c;
p->exp=e;p->next=NULL;
if(s==NULL)
s=p;
else
r->next=p;
r=p;
}
}
while(s2!=NULL)
{
c=s2->coef;
e=s2->exp;
s2=s2->next;
if(c!=0)
{
p=(ListNode*)malloc(sizeof(ListNode));
p->coef=c;
p->exp=e;p->next=NULL;
if(s==NULL)
s=p;
else
r->next=p;
r=p;
}
}
return s;
}
void deletepoly(ListNode *h)
//釋放多項式所佔的內存單元
{
ListNode *p,*r=h;
while(r!=NULL)
{
p=r->next;
free(r);
r=p;
}
}
int main()
{
ListNode *head1,*head2,*head;
printf("創建第一個多項式:\n");
head1=createpoly();
printf("創建第二個多項式:\n");
head2=createpoly();
printf("將兩個多項式相加:\n");
head=addpoly(head1,head2);
disppoly(head);
deletepoly(head);
}
</span>