多项式相加

来源:互联网 发布:淘宝上的色情杂志 编辑:程序博客网 时间:2024/03/29 23:08

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct polyn
{
 int coef;
 int expn;
 struct polyn *next;
}POL;
/*建立有序多项式*/
POL *creatpolyn()
{
 POL *head,*cfront,*cnew,*clast;
 head=(POL *)malloc(sizeof(POL));
 head->next=NULL;
 cnew=(POL *)malloc(sizeof(POL));
 scanf("%d%d",&cnew->coef,&cnew->expn);
 while(cnew->coef)
 {
     clast=head->next;
     if(!head->next) {head->next=cnew;cnew->next=NULL;}
     else
  {
      while(clast->next&&(cnew->expn<clast->expn))
   {
       cfront=clast;
       clast=clast->next;
   }
   if(cnew->expn>clast->expn)
   {
    if(head->next==clast) head->next=cnew;
    else cfront->next=cnew;
    cnew->next=clast;
   }
   else
   {
    clast->next=cnew;
    cnew->next=NULL;
   }
  }
  cnew=(POL *)malloc(sizeof(POL));
  scanf("%d%d",&cnew->coef,&cnew->expn);
 }
 free(cnew);
 return head;
}
/*输出多项式*/
void printpolyn(POL *head)
{
 POL *ph;
 ph=head->next;
 while(ph)
 {
  printf("%dX^%d+",ph->coef,ph->expn);
  ph=ph->next;
 }
 printf("/n");
}
/*多项式相加*/
POL *addpolyn(POL *h1,POL *h2)
{
 POL *h3,*tp1,*tp2,*tp3;
 h3=(POL *)malloc(sizeof(POL));
 h3->next=NULL;
 tp1=h1->next;
 tp2=h2->next;
 tp3=h3;
 while(tp1&&tp2)
 {
  if(tp1->expn>tp2->expn)
  {
   tp3->next=tp1;
   tp1=tp1->next;
   tp3=tp3->next;
  }
  else
   if(tp1->expn<tp2->expn)
   {
    tp3->next=tp2;
    tp2=tp2->next;
    tp3=tp3->next;
   }
   else
   {
    if(tp1->coef+tp2->coef)
    {
     tp1->coef=tp1->coef+tp2->coef;
     tp3->next=tp1;
     tp1=tp1->next;
     tp2=tp2->next;
     tp3=tp3->next;
    }
    else
    {
     tp1=tp1->next;
     tp2=tp2->next;
    }
   }
 }
 if(!tp1) tp3->next=tp2;
 if(!tp2) tp3->next=tp1;
 return h3;
}
void apolyn()
{
 POL *mp1,*mp2,*mp3;
 printf("请输入第一个多项式系数与指数:/n");
 mp1=creatpolyn();
 printf("您以上输入的多项式是:/n");
 printpolyn(mp1);
 printf("请输入第二个多项式系数与指数:/n");
 mp2=creatpolyn();
 printf("您以上输入的多项式是:/n");
 printpolyn(mp2);
 mp3=addpolyn(mp1,mp2);
 printf("多项式的和是:/n");
 printpolyn(mp3);
}
/*菜单*/
void mmenu()
{
 printf("***——————主菜单——————***/n");
 printf("1.多项式相加/n");
 printf("0.退出该程序/n");
 printf("***———————————————***/n");
 printf("/n");
 printf("***——————请注意——————***/n");
 printf("1.本程序只能输入数字,按数字/"0/"来结束输入!/n");
 printf("2.严格按照所要求的格式操作!/n");
 printf("***———————————————***/n");
}
/*选择*/
void mchoice()
{
 int ch;
 printf("请键入主菜单中相应数字,选择相应操作:");
 scanf("%d",&ch);
 switch(ch)
 {
 case 1:apolyn();break;
 case 0:exit(0);
 default:printf("请键入相应数字进行选择!/n");
 }
}
void main()
{
 while(1)
 {
  system("cls");
  mmenu();
  mchoice();
  system("pause");
 }
}

原创粉丝点击