| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1948 人关注过本帖
标题:一元稀疏多项式加减运算算法
只看楼主 加入收藏
王辉428
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-11-18
结帖率:0
收藏
 问题点数:0 回复次数:3 
一元稀疏多项式加减运算算法
//一元稀疏多项式加减运算算法
//一元稀疏多项式加减运算算法

#include
#include
#include
#include

typedef struct node
{
 int coef;          //定义系数
 int exp;           //定义指数
 struct node *next;
}node;

void interphase(void);
node *creat(void);
void display(node *);
node *add(void);
node *subtration(void);

void main()
{
 int choice=0;
 node *poly_a,*poly_c;
 
 while (1)
 {
  system("cls");
  interphase();

  printf("输入你的选择:");
  scanf("%d",&choice);

  switch(choice)
  {
  case 1:
   poly_a=creat();
   printf("输入");
   display(poly_a);
   break;
  case 2:                   //加法运算
   poly_c=add();
   printf("\n");
   printf("结果是");
   display(poly_c);
   break;
  case 3:                   //减法运算
   poly_c=subtration();
   printf("\n");
   printf("结果是");
   display(poly_c);
   break;
  case 0:
   exit(1);
   break;
  default:
   printf("输入错误!请重新选择");
   getch();
  }
 }
}

void interphase(void)                //显示目录
{
 printf("\t\t\t\t欢迎使用本程序\n\n\n\n");
 printf("\t\t\t1.输入一个一元稀疏多项式。\n\n");
 printf("\t\t\t2.进行两个多项式加法运算\n\n");
 printf("\t\t\t3.进行两个多项式减法运算\n\n");
 printf("\t\t\t0.退出程序\n\n");
}

node *creat(void)                    //建立一个多项式
{
 int m,n,i=0;
 node *head,*r,*s;

 head=(node *)malloc(sizeof(node));
 r=head;
 printf("\n输入系数(输入0退出):");
 scanf("%d",&n);
 printf("输入指数(按降序排列):");
 scanf("%d",&m);

 do
 {
  s=(node *)malloc(sizeof(node));
  s->exp=m;
  s->coef=n;
  r->next=s;
  s->next=NULL;
  r=s;

  printf("\n输入系数(输入0退出):");
  scanf("%d",&n);
     printf("输入指数(按降序排列):");
  scanf("%d",&m);

  i++;
 }while(n);

 head->coef=i;
 return head;
}

void display(node *head)              //显示多项式
{
 node *r;

 r=head->next;
 printf("一元稀疏方程式为:%-5d",head->coef);

 if (r != NULL)
 {
  printf("%dX^%d",r->coef,r->exp);
  r=r->next;
 }
 while (r != NULL)
 {
  printf("%+dX^%d",r->coef,r->exp);
  r=r->next;
 }

 getch();
}

node *add(void)                   //加法函数
{
 int sum,i=0;
 node *a,*b,*c,*s,*poly_a,*poly_b,*poly_c;

 printf("\n输入第一个多项式");
 poly_a=creat();
 display(poly_a);
 printf("\n\n输入第二个多项式");
 poly_b=creat();
 display(poly_b);
 printf("\n");

 a=poly_a->next;
 b=poly_b->next;

 poly_c=(node *)malloc(sizeof(node));
 c=poly_c;

 while (a != NULL && b != NULL)
 {
  if (a->exp == b->exp)
  {
   sum=a->coef+b->coef;
   if (sum)
   {
    s=(node *)malloc(sizeof(node));
    s->coef=sum;
    s->exp=a->exp;
    c->next=s;
    s->next=NULL;
    c=s;
    a=a->next;
    b=b->next;
    poly_a->coef--;
   }
   else
   {
    a=a->next;
    b=b->next;
   }
  }
  else if(a->exp > b->exp)
  {
   s=(node *)malloc(sizeof(node));
   s->coef=a->coef;
   s->exp=a->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   a=a->next;
  }
  else
  {
   s=(node *)malloc(sizeof(node));
   s->coef=b->coef;
   s->exp=b->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   b=b->next;
  }
 }
 
 if (b)
 {
  while (b != NULL)
  {
   s=(node *)malloc(sizeof(node));
   s->coef=b->coef;
   s->exp=b->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   b=b->next;
  }
 }
 else if (a)
 {
  while (a != NULL)
  {
   s=(node *)malloc(sizeof(node));
   s->coef=a->coef;
   s->exp=a->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   a=a->next;
  }
 }

 poly_c->coef=poly_a->coef+poly_b->coef;
 return poly_c;
}

node *subtration(void)           //减法函数
{
 int sum,i=0;
 node *a,*b,*c,*s,*poly_a,*poly_b,*poly_c;

 printf("\n输入第一个多项式");
 poly_a=creat();
 display(poly_a);
 printf("\n输入第二个多项式");
 poly_b=creat();
 display(poly_b);
 printf("\n");

 a=poly_a->next;
 b=poly_b->next;

 poly_c=(node *)malloc(sizeof(node));
 c=poly_c;

 while (a != NULL && b != NULL)
 {
  if (a->exp == b->exp)
  {
   sum=a->coef-b->coef;
   if (sum)
   {
    s=(node *)malloc(sizeof(node));
    s->coef=sum;
    s->exp=a->exp;
    c->next=s;
    s->next=NULL;
    c=s;
    a=a->next;
    b=b->next;
    poly_a->coef--;
   }
   else
   {
    a=a->next;
    b=b->next;
    poly_a->coef -= 2;
   }
  }
  else if(a->exp > b->exp)
  {
   s=(node *)malloc(sizeof(node));
   s->coef=a->coef;
   s->exp=a->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   a=a->next;
  }
  else
  {
   s=(node *)malloc(sizeof(node));
   s->coef=b->coef*(-1);
   s->exp=b->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   b=b->next;
  }
 }
 
 if (b)
 {
  while (b != NULL)
  {
   s=(node *)malloc(sizeof(node));
   s->coef=b->coef *(-1);
   s->exp=b->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   b=b->next;
  }
 }
 else if (a)
 {
  while (a != NULL)
  {
   s=(node *)malloc(sizeof(node));
   s->coef=a->coef;
   s->exp=a->exp;
   c->next=s;
   s->next=NULL;
   c=s;
   a=a->next;
  }
 }

 poly_c->coef=poly_a->coef+poly_b->coef;
 return poly_c;
}

 
搜索更多相关主题的帖子: cls display include system choice 
2011-08-12 09:34
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
又是代码轰炸...

                                         
===========深入<----------------->浅出============
2011-08-12 09:54
wanghui0901
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-8-12
收藏
得分:0 
  有用
2011-08-12 15:11
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:0 
我去,误人子弟啊。。。
图片附件: 游客没有浏览图片的权限,请 登录注册

A real warrior never quits.
2011-08-12 15:51
快速回复:一元稀疏多项式加减运算算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023805 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved