请帮忙编一个多项式相加的程序(要用C++或者C语言)

请帮忙编一个多项式相加的c++或者C语言的程序~

一定要能运行,没有错误~

两个都有并且都能调试成功的话有加分~

谢谢啦~

第1个回答  推荐于2017-09-29
以前学习链表的时候写的, 你自己改改用吧。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int Status;
typedef struct lnode
{
int data;
struct lnode *next;
}LNode,*Linklist;

typedef struct polyn
{
int data1;
int data2;
struct polyn *next;
}POlyn,*node;

void about()
{
printf("单链表及多项式的操作(化羽制作)\n");
}

void Inimenu()
{
printf("----------欢迎使用------------\n");
printf("* 1.单链表的操作\n");
printf("* 2.多项式的操作\n");
printf("* 3.结束退出\n");
printf("请输入你要选择的功能:\n");
}

void Listmenu()
{
printf("---------链表的功能---------\n");
printf("* 1.输出单链表的全部数据\n");
printf("* 2.查找链表元素 \n");
printf("* 3.链表插入元素 \n");
printf("* 4.链表删除元素 \n");
printf("* 5.结束\n");
printf("请输入要选择的功能:\n");
}

void Promenu()
{
printf("--------多项式的功能---------\n");
printf("* 1.多项式的加法\n");
printf("* 2.多项式的减法\n");
printf("* 3.多项式的乘法\n");
printf("请输入要选择的功能:\n");
}

void print_list(Linklist L)
{
Linklist p;
printf("你输入的数据是:\n");
p=L->next;
while (p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}

void print_proy(node L)
{
node p;
printf("你输入的数据是:\n");
p=L->next;
while (p!=NULL)
{
printf("%dx^%d ",p->data1,p->data2);
p=p->next;
}
printf("\n");
}

void creat_list(Linklist &L,int n)
{
Linklist p,tail;
int i;
L=(LNode *)malloc(sizeof(LNode));
tail=L;
L->next=NULL;
printf("请逆序输入n个数,建立带头节点的链表:\n");
for (i=0;i<n ;i++)
{
p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(p->data));
tail->next=p;
tail=tail->next;
p->next=NULL;
}
}

void creat_proy(node &L,int n)
{
node p,tail;
int i;

L=(node)malloc(sizeof(POlyn));
tail=L;
L->next=NULL;
printf("请输入n个数,建立带头节点的链表:\n");
for (i=0;i<n ;i++)
{
p=(node)malloc(sizeof(POlyn));
scanf("%d%d",&(p->data1),&(p->data2));
tail->next=p;
tail=tail->next;
p->next=NULL;
}
}

Status Getelem(LNode *L,int i,int &e)
{
int j;
Linklist p;
p=L->next;
j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if (!p||j>i)
{
printf("没有这个数\n");
return 0;
}
e=p->data;
return 1;
}

Status ListInsert_L(Linklist L,int i,int e)
{
int j=0;
LNode *s,*p;
p=L;
s=(Linklist)malloc(sizeof(LNode));
if(s==NULL) return 0;
s->data=e;
while (p&&j<i-1)
{
p=p->next;
j++;
}
if (!p||j>i-1)
{
return 0;
}
s->next=p->next;
p->next=s;
return 1;
}

Status ListDelete_L(Linklist L, int i, int &e)
{
Linklist p,q;
int j;
p = L; j = 0;
while (p->next && j < i-1)
{ p = p->next; ++j; }
if (!(p->next) || j > i-1)
return 0;
q = p->next; p->next = q->next;
e = q->data; free(q);
return 1;
}

void addproy(node pa,node pb)
{
POlyn *p,*q,*temp,*pre;
int sum;
p=pa->next;
q=pb->next;
pre=pa;
while (p&&q)
{
if (p->data2<q->data2)
{
pre->next=p;
pre=pre->next;
p=p->next;
}
else if(p->data2==q->data2)
{
sum=p->data1+q->data1;
if (sum)
{
p->data1=sum;
pre->next=p;
pre=pre->next;
p=p->next;
temp=q;
q=q->next;
free(temp);
}
else
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
else
{
pre->next=q;
pre=pre->next;
q=q->next;
}
}
if (p)
pre->next=p;
else
pre->next=q;
}

void subproy(node pa,node pb)
{
int i;
node q;
q=pb->next;
while (q)
{
i=-(q->data1);
q->data1=i;
q=q->next;
}
addproy(pa,pb);
}

//实现多项式的乘法
void mulproy(node pa,node pb)
{
node p,q,s,h;
int i=0;
node pc,pd;
pc=(node)malloc(sizeof(POlyn));
pd=(node)malloc(sizeof(POlyn));
pc->next=NULL;
pd->next=NULL;
p=pa->next;
q=pb->next;
s=pc;
while (q)
{
p=pa->next;
if(i>=1)
s=pd;
while (p)
{
h=(node)malloc(sizeof(POlyn));
h->next=NULL;
h->data1=(p->data1)*(q->data1);
printf("%d ",h->data1);
h->data2=p->data2+q->data2;
s->next=h;
s=h;
p=p->next;
}
printf("第一步成功\n");
q=q->next;
i++;
if (i>=2)
{
addproy(pc,pd);
}
}
printf("多项式相乘的结果是:");
print_proy(pc);

}

void opera_list()
{
Linklist L;
int n,choice,i;
Status e;
printf("请输入要输入链表中元素的个数:");
scanf("%d",&n);
creat_list(L,n);
Listmenu();
scanf("%d",&choice);
while(choice!=5)
{
switch (choice)
{
case 1:print_list(L);
break;
case 2:printf("请输入你要查找的元素的位置:\n");
scanf("%d",&i);
if(!Getelem(L,i,e))
break;
printf("第%d个元素的值是%d\n",i,e);
break;
case 3:printf("请输入要插入元素的位置i:\n");
scanf("%d",&i);
printf("请输入要插入元素的值e:\n");
scanf("%d",&e);
ListInsert_L(L,i,e);
break;
case 4:printf("请输入你要删除元素的位置\n");
scanf("%d",&i);
ListDelete_L(L, i, e) ;
break;
default:
printf("输入错误\n");
}
printf("请输入功能号:\n");
scanf("%d",&choice);
}
}

void oper_proy()
{
node pa,pb,L;
int n1,n2,choice,i;
printf("请输入你要建立第一个多项式的系数个数:");
scanf("%d",&n1);
creat_proy(pa,n1);
printf("请输入你要建立第二个多项式的系数个数:");
scanf("%d",&n2);
creat_proy(pb,n2);
Promenu();
scanf("%d",&choice);
while(choice!=4)
{
switch (choice)
{
case 1:addproy(pa,pb);
printf("相加的结果是:");
print_proy(pa);
break;
case 2:subproy(pa,pb);
printf("相减的结果是:");
print_proy(pa);
break;
case 3:mulproy(pa,pb);
break;
default:
printf("输入错误\n");
break;
}
printf("按任意键将回到上一菜单重新选择!\n");
system("pause");
break;
}
}

int main()
{
node L;
node *pa,*pb;
int i,a,n;
about();
Inimenu();
scanf("%d",&a);
while (a!=3)
{
switch (a)
{
case 1:
opera_list();
break;
case 2:
oper_proy();
break;
default:
break;
}
Inimenu();
scanf("%d",&a);
}
}
第2个回答  2010-01-13
多项式相加,也就是合并同类项。
#include <iostream>
using namespace std;
struct list
{
int coef;//系数
int exp;//指数
list *next;
};
list *Creat()//创建带头结点的链表
{
list *h,*r,*s;//h是头结点,存放项的个数,指向第一项
r=h=new list;
h->next=NULL;
while(1)
{
s=new list;
cin>>s->coef>>s->exp;
if(s->coef==0)
break;
if(h->next==NULL)
{
r=s;//r=h->next
h->next=r;
}
else
{
r->next=s;
r=s;
}
}
r->next=NULL;
return h;
}
void Display(list *h)//输出链表
{
list *p;
p=h->next;
cout<<"f(x)=";
while(p)
{
if(p->next!=NULL)
cout<<p->coef<<"X^"<<p->exp<<"+";
else
cout<<p->coef<<"X^"<<p->exp;
p=p->next;
}
cout<<endl;
}
list *Huajian(list *h1)//合并同类项
{
list *p1,*q1,*q2;
for(p1=h1->next;p1;p1=p1->next)
for(q1=p1,q2=q1->next;q2;q1=q2,q2=q2->next)
if(p1->exp==q2->exp)
{
p1->coef+=q2->coef;
q1->next=q2->next;
delete q2;
q2=q1;//q2=q1->next;
}
return h1;
}
list *Multiply(list *h1,list *h2)//实现两个链表相乘
{
list *p1,*p2,*q1;
int c,e;
p1=h1->next;
p2=p1->next;
q1=h2->next;
do
{
c=p1->coef;
e=p1->exp;
while(q1)
{
p1->coef=c*q1->coef;
p1->exp=e+q1->exp;
if(q1->next!=NULL)
{
p1->next=new list;
p1=p1->next;
}
q1=q1->next;
}
q1=h2->next;
p1->next=p2;
p1=p2;
if(p2->next!=NULL)
p2=p2->next;
}while(p2);
h1=Huajian(h1);
return h1;
}
main()
{
list *h1,*h2;
h1=Creat();
Display(h1);
h2=Creat();
Display(h2);
h1=Multiply(h1,h2);
Display(h1);
return 0;
}本回答被提问者采纳

多项式相加求值怎样用C++代码实现
p1->coef=c*q1->coef;p1->exp=e+q1->exp;if(q1->next!=NULL){

c++多项式加法 链表
cout<<"\\n两个多项式相加为:\\n";Show(HCxishu,HCzhishu,HCn);system("pause");return 0;} void Input(int X[],int Z[],int *n){ int i,count=0;cout<<"请输入多项式的(系数 指数),(0 0)为结束:\\n";int xishu,zhishu;while(1){ cin>>xishu>>zhishu;if(zhishu==0 && xi...

用c\/c++写可以实现加减乘除的程序并且数值和运算字符由我自由赋予_百度...
public:int coef; \/\/多项式系数 int exp; \/\/多项式指数 \/\/初始化项的系数和指数 term( int c=0,int e=0):coef(c),exp(e){} };我有源代码,可以找我。

多项式计算器怎样编写?用C++
else printf("X^%d",q->expn);q = q->next;} } Compare(term *a, term *b) { \/*表示函数的返回值是一个指向整型数据的指针*\/ if (a->expn < b->expn) return -1;if (a->expn > b->expn) return 1;return 0;

多项式拟合C++程序
cout<<"1.一次多项式"<<endl;cout<<"2.二次多项式"<<endl;cout<<"3.次数大于2的多项式"<<endl;cout<<"根据描绘的离散的点选择你要构造的多项式的类型:(1-3):";cin>>w;}while(w!='1'&&w!='2'&&w!='3');switch(w){ case '1':p(n,2);tuxing1();break;case '2':p(n,...

C++ 输出多项式及多项式相乘
我这有一个实现加减乘除的多项式程序,自己写的,另外输入形式为:-2x^3 + 5x^2 + 3x + 4 即可。其中百度的现实问题,有一个@a什么的 应该是& COPYA, & COPYB去掉中间空格 include<stdio.h> include<stdlib.h> include<ctype.h> typedef struct _POLYNODE{ int coef;\/\/系数 int exp;\/\/...

数据结构课设:用链表实现多项式相加(c++) 500-800行左右
void add(float xs,float zs); \/\/n代表多项式的项数个数 xiang * operator+(const duoxiangshi & b); \/\/重载多项式的相加 xiang * operator-(const duoxiangshi & b);void print(xiang *athead); \/\/输出多项式相加结果 void printself(); \/\/看一下 };duoxiangshi::duoxiangshi...

[源码和文档分享]基于C++实现的多项式计算器系统
实验目的是通过C++语言实现一个多项式计算器系统,以提升编程技能和理解运算符重载与类设计。实验环境要求使用C++作为编程语言,并选择合适的开发工具,同时需遵循良好的程序设计风格。基本编码规范包括简洁性、可读性、可维护性,如使用有意义的变量名、合理的注释、避免代码冗余等。实验内容涉及设计并实现一个...

会C语言的朋友帮个忙啊 帮我编个小程序
会C语言的朋友帮个忙啊 帮我编个小程序 一、总体要求1、对实际问题进行分析、写出算法分析。2、设计程序结构3、给出设计的各模块。4、提交各应用程序的源程序清单。6、课程设计选择turboc二、课程设计的内容和具体要求主要包... 一、总体要求1、对实际问题进行分析、写出算法分析。2、设计程序结构3、给出设计...

帮忙用Microsoft Visual C++ 6.0编写一个程序,题目是:一元多项式...
void polyadd(node *ha, node *hb)\/\/一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除 { node *p,*q,*pre,*temp;int sum;p=ha->next;q=hb->next;pre=ha;while(p!=NULL&&q!=NULL){ if(p->expexp){ pre->next=p;pre=pre->next;p=p-...

相似回答