用C语言或C++ 设计一个多项式类,算出值。

用C语言或C++ 设计一个多项式类。写出测试程序,从键盘输入系数表、变元x的值,计算出多项式f(x)=1+2x+4.5x^5+2.3x^7的值。 希望高手帮忙,万分感谢! 要完整的答案,如果哪位高手用软件做好了发到我邮箱就更好了(273747789@qq.com),在这先谢了!就这么点分,都给了,只求一份完整的答案!!跪求!!!不是用软件做好的也行,只要是完整答案就可以了!高手帮帮吧!!!别有错误哈,我自己不会改,呵呵。
输入系数表 就是 多项式被分成三个域 系数域 指数域 和指针域

你看看这个吧
#include <iostream.h>
#include<string.h>
#include<malloc.h>
#define N 40
typedef struct node{
int x,z;
struct node *next;
}*pnode;
int isnum(char c)
{
if(c>='0'&&c<='9') return 1;
else return 0;
}
pnode create(char *c,int i,int j)
{
if(j<i) return NULL;
int a=0,b=0,flag=0;
//处理系数。
if(!isnum(c[i])) a=1;
else
while(isnum(c[i])&&i<=j)
{
a=a*10+c[i]-'0';
i++;
}
//跳过系数与指数间非数字字符。
while(!isnum(c[i])&&i<=j)
{
flag=1;
i++;
}
//处理指数。
if(i>j&&flag==1) b=1;
else
{
if(c[i-1]=='-'&&c[i-2]=='^') flag=2;//指数是负数情况记录。
while(isnum(c[i])&&i<=j)
{
b=b*10+c[i]-'0';
i++;
}
}
if(flag==2) b=-b;//指数是负数情况处理。
pnode p;
p=(pnode)malloc(sizeof(node));
p->x=a;
p->z=b;
return p;
}//创建一个结点,表示多项式的一项。把"12X^3"这样字符串转化成一个只有系数、指数、后继的结构体。
pnode create_duo(char *c,int m)
{
if(c[m]=='\0') return NULL;
int i,j;
pnode p,q;
i=m;
if(c[i]=='+'||c[i]=='-')i++;
j=i;
while(c[j]!='\0'&&c[j]!='+'&&(c[j]!='-'||c[j-1]=='^'))
{
j++;
}//移动到多项式字符串的从下标m起第一项末。
if(c[i]!='0')
{
p=create(c,i,j-1);
if(i>0&&c[i-1]=='-') p->x=-(p->x);
q=create_duo(c,j);
p->next=q;
return p;
}
else
return create_duo(c,j); //系数为0项,不建立,跳过。
}//把一元多项式的字符串用链式存储。
pnode plus(pnode p,pnode q)
{
pnode P,H,t,m,n;
m=p;
n=q;
H=P=(pnode)malloc(sizeof(node));
while(m!=NULL&&n!=NULL)
{
t=(pnode)malloc(sizeof(node));
if(m->z>n->z)
{
t->x=m->x;
t->z=m->z;
m=m->next;
}
else
if(m->z==n->z)
{
if(m->x==-(n->x))
{
m=m->next;
n=n->next;
continue;
}//指数相同,系数相反,情况处理。
t->x=m->x+n->x;
t->z=n->z;
m=m->next;
n=n->next;
}
else
{
t->x=n->x;
t->z=n->z;
n=n->next;
}
P->next=t;
P=P->next;
}
while(m!=NULL)
{
t=(pnode)malloc(sizeof(node));
t->x=m->x;
t->z=m->z;
m=m->next;
P->next=t;
P=P->next;
}
while(n!=NULL)
{
t=(pnode)malloc(sizeof(node));
t->x=n->x;
t->z=n->z;
n=n->next;
P->next=t;
P=P->next;
}
P->next=NULL;
P=H;
H=H->next;
free(P);
return H;
}//两个一元多项式的相加。
pnode minus(pnode p,pnode q)
{
if(q==NULL) return p;
pnode t,h,g,q1;
t=q;
h=(pnode)malloc(sizeof(node));
h->x=-(t->x);
h->z=t->z;
t=t->next;
q1=h;
g=h;
while(t!=NULL)
{
h=(pnode)malloc(sizeof(node));
h->x=-(t->x);
h->z=t->z;
g->next=h;
g=g->next;
t=t->next;
}
g->next=NULL;
if(p==NULL) return q1;
return (plus(p,q1));
}//两个一元多项式的差。
pnode chen(pnode p,pnode q)
{
pnode k,h,t,g;
k=p;
t=(pnode)malloc(sizeof(node));
h=t;
h->x=(k->x)*(q->x);
h->z=k->z+q->z;
k=k->next;
g=h;
while(k!=NULL)
{
h=(pnode)malloc(sizeof(node));
h->x=(k->x)*(q->x);
h->z=k->z+q->z;
g->next=h;
g=g->next;
k=k->next;
}
g->next=NULL;
return t;
}//多项式中的一项与另一个多项式的乘。
pnode chenduo(pnode p1,pnode p2)
{
void free_pnode(pnode p);//释放一个链表空间。
if(p1==NULL||p2==NULL) return NULL;
pnode m,n,t,g;
n=p2;
t=NULL;
while(n!=NULL)
{
m=chen(p1,n);
g=plus(t,m);
free_pnode(m);
free_pnode(t);
t=g;
n=n->next;
}
return t;
}//两个多项式的乘。
void print(pnode p)
{
if(p==NULL)
{
cout<<"0"<<endl;
return;
}
while(p!=NULL)
{
if(p->x==-1&&p->z!=0)cout<<"-";
else if(p->x!=1||p->z==0)
cout<<p->x;
if(p->z)
{
cout<<"X";
if(p->z!=1)
cout<<"^"<<p->z;
}
p=p->next;
if(p!=NULL&&p->x>0) cout<<"+";
}
cout<<endl;
}//输出链式存储多项式。
void main()
{
cout<<"****************************************************************************"<<endl;
cout<<"***********************一元多项式的计算(和差积)*****************************"<<endl;
cout<<"****************************************************************************"<<endl;
char ch1[N];//="30X^45-X-9";
char ch2[N];//="-4X^3-2X+1";
int n=1;
pnode p1,p2;
cout<<"输入第一个多项式(行式如.22X^31+X^22+X-1):\n";
cin>>ch1;
p1=create_duo(ch1,0);
cout<<"输入第二个多项式(行式如.22X^31+X^24+X-1):\n";
cin>>ch2;
p2=create_duo(ch2,0);
cout<<"多项式p1:";
print(p1);
cout<<"多项式p2:";
print(p2);
cout<<"******************************************"<<endl;
cout<<"********* 用 户 选 择 ************"<<endl;
cout<<"********* ************"<<endl;
cout<<"********* 1 . 两 多 项 式 和 ************"<<endl;
cout<<"********* ************"<<endl;
cout<<"********* 2 . 两 多 项 式 差 ************"<<endl;
cout<<"********* ************"<<endl;
cout<<"********* 3 . 两 多 项 式 积 ************"<<endl;
cout<<"********* ************"<<endl;
cout<<"********* 0 . 退 出 ************"<<endl;
cout<<"********* ************"<<endl;
cout<<"******************************************"<<endl;
while(n)
{ cout<<"请输入你的选择:";
cin>>n;
switch(n)
{
case 1:
cout<<"两多项式和(p1+p2)为:";
print(plus(p1,p2));
break;
case 2:
cout<<"两多项式差(p1-p2)为:";
print(minus(p1,p2));
break;
case 3:
cout<<"两多项式积(p1*p2)为:";
print(chenduo(p1,p2));
break;
default: cout<<" 错误选择! "<<endl;
}
}
}

void free_pnode(pnode p)
{
pnode t;
while(p!=NULL)
{
t=p;
p=p->next;
free(t);
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-14
输入系数表是什么意思啊 ,是只需输入X就好 还是要输入X的所有系数,或者是还要输入X的幂?,如果全是的话,那就要用栈了 比较麻烦点 了本回答被网友采纳

c语言计算并输出多项式的值
float sum = 1.0;float dex = 1.0;printf("输入一个数:");scanf("%d",&n);for (i = 2; i 0; --j){ dex*=j;} sum+=1\/dex;dex = 1.0;} printf("%.2f\\n",sum);return 0;}

c语言计算多项式的值?
思路:因为这是个加法的多项式,用变量s累加,s的最初值是0,第1次向上加1!,第2次加2!,...,第n磁加n! s+=jc;阶乘变量jc在循环中计算。每项用循环变量i控制,第1次循环取值1,第2次循环取值2,...,第20次循环取值20,这个变量就是要求的阶乘数,i的值每次加1 阶乘是个累乘的运算,...

c语言编程求解多项式ax^3+bx^2+c的值
以下是一个计算多项式ax^3+bx^2+c值的C语言代码:include <stdio.h> int main() { float a, b, c, x, result;printf("请输入多项式系数 a, b, c:");scanf("%f %f %f", &a, &b, &c);printf("请输入 x 的值:");scanf("%f", &x);result = a * x * x * x + b *...

用C语言如何写程序,计算并输出下列多项式值: Sn = 1 + 1\/1! + 1\/2...
void main(){ float sum=0,p=1,deno=1,t; \/*deno是分母的意思*\/ int n;scanf("%d",&n);while(p<=n){ deno=p*deno;t=1\/deno;sum+=t;p++;} 不懂的话,还可以问的啊 printf("sum=%f\\n",sum);}

如何用c语言编写一个多项式的输入与建立并输出
\/\/ 很简单,类里增加一个公开变量 DV public class BF_CheckUpdate { public DataGridView DV; 增加变量,用于引用控件 pubic BF_CheckUpdate(DataGridView dv){ this.DV=dv;} \/\/ 构造时传入datagridview控件 \/\/...private static void CheckUpdatetimer_Elapsed(object sender, System.Ti...

用c语言完成一个多项式的输入与输出
zhishu=(int*)malloc((n+1)*sizeof(int));printf("从高次到低次幂依次输入多项式的系数和指数:\\n");for (int i=0;i<=n;i++){ scanf("%f %d",&xishu[i],&zhishu[i]);} printf("该多项式为:%.2fx^%d",xishu[0],zhishu[0]);for (i=1;i<=n;i++){ if (i==n && ...

设计一个一元多项式计算器,输入输出,多项式相加(C语言)
int expn;\/\/指数 struct node *next;}node,*tie;define LEN sizeof(node)int main(){ int n,m;\/\/n表示第一个多项式的项的个数,m表示第二个多项式的项的个数 while((scanf("%d%d",&n,&m))!=EOF){ tie p1,p2,head,tou,t1,t2,h1;head=NULL;p1=(tie)malloc(LEN);p1->next=head...

C语言编程: 编写一个程序,根据下列公式,实现根据输入的x值,求出y的值...
这题就是定义一个独立函数,参数为n和x,根据n的值,判断并选择多项式中的一个式子来计算y的值。计算结果和x的值可直接在函数中打印,也可放数组做返回值返回,在主函数中接收并打印输出。下面代码是带返回值的写法:include <stdio.h> int* funP(int n,int x);int main(){ int *rn=NULL,...

如何用C语言实现设计和实现多项式运算?
对于A的多项式,其特征值为对应的特征多项式。线性代数包括行列式、矩阵、线性方程组、向量空间与线性变换、特征值和特征向量、矩阵的对角化,二次型及应用问题等内容。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 其他类似问题 2011-12-11 如何用C语言实现一元多项式简单计算器的设计 31 2014-12-03 用...

C语言中一维多项式求值
U(n-1)=a(n-1)U(k)=U(k+1)x+a(k); K=n-2,n-3...1,0;那当算到k=0时,得到的U(0)就是要求的值。下面是用C语言实现的:double plyv( double a[],double x,int n) \/\/a[]是多项式的系数,n是数组长度。{ double u;\/\/一直存放递归结果;Int i;for(i=n-2;i>=0;i-...

相似回答