c语言/c++ : 一元多项式的表示及运算;加,减,乘计算都包括的程序,在线等高人解答

一定是加减乘有啊,我查了很多回答都没有包括乘法,还有尽量别用太高级的语句呀,我才大一,尽可能是我所了解过的吧,多谢了用单链表的形式写吧,代码尽可能详细,有注释啊,... 一定是加减乘有啊,我查了很多回答都没有包括乘法,还有尽量别用太高级的语句呀,我才大一,尽可能是我所了解过的吧,多谢了
用单链表的形式写吧,代码尽可能详细,有注释啊,
展开
 我来答
tbyang2011
2013-05-06 · TA获得超过681个赞
知道小有建树答主
回答量:778
采纳率:50%
帮助的人:386万
展开全部
#include <stdio.h>
#include <math.h>
#include <assert.h>

typedef struct POLYM{ // 多项式数据结构
int n; // n-1 次多项式 a0+a1x+...+a[n-1]x^(n-1)
double*a; // 必须在运算之前初始化
}*LPPOLYM;

void showPolym(POLYM*pf){ if(!pf) return;
printf("%d\n",pf->n);
for(int i=0; i<pf->n; i++) printf("%.1f\t",pf->a[i]);
printf("\n");
}

POLYM* poly_add(POLYM*pout, POLYM*f,POLYM*g){ if(!pout ||!f || !g) return 0L;
int n=f->n; if(n<g->n) n=g->n; pout->n=n;
double*p=f->a, *q=g->a, *r=pout->a;

for(int i=0; i<n; i++, r++) { *r=0;
if(i<=f->n) *r+=*p++;
if(i<=g->n) *r+=*q++;
}

return pout;
}

POLYM* poly_subtract(POLYM*pout, POLYM*f,POLYM*g){ if(!pout ||!f || !g) return 0L;
int n=f->n; if(n<g->n) n=g->n; pout->n=n;
double*p=f->a, *q=g->a, *r=pout->a;

for(int i=0; i<n; i++, r++) { *r=0;
if(i<=f->n) *r-=*p++;
if(i<=g->n) *r-=*q++;
}

return pout;
}

POLYM* poly_x(POLYM*pout, POLYM*f,POLYM*g){ if(!pout ||!f || !g) return 0L;
int m=f->n, n=g->n; assert(m>=0 && n>=0);
pout->n= m+n-1;

double*p=f->a, *q=g->a, *r=pout->a;
double c;

for(int i=0; i<m+n; i++, r++) {
c=0;
for(int j=0; j<m; j++) if( (i-j>=0) && (i-j<n) ) c+=f->a[j]*g->a[i-j];
*r=c;
}

return pout;
}

int main(int argc, char *argv[]){

int m=2, n=3;

double fa[]={1,2,}, ga[]={4,5,6}; // 初始化 f, g
POLYM f={m, fa}, g={n, ga};

POLYM r; r.a=new double[m+n+1]; // 初始化 r

showPolym(&f);
showPolym(&g);

// POLYM*q=poly_add(&r,&f,&g); showPolym(q);

POLYM*q=poly_x(&r,&f,&g); showPolym(q);

return 0;
}
更多追问追答
追问
你好,请问源代码就这么多吗,这里包括print输出表达式吗?可以进行多项式的加减乘或除吗?帮我解答吧
追答
可以进行多项式的加减乘 。
除法过于麻烦了。。
我爱酸牛奶7
2013-05-08 · TA获得超过173个赞
知道答主
回答量:107
采纳率:0%
帮助的人:82.5万
展开全部
一会回去给你实现吧 - -
就是数据结构里面的栈能看懂不?
STL里的stack呢?
更多追问追答
追问
看不懂呢,c语言学的不好。能把源代码全部给我吧可以编译没有错误呀,太谢谢你了
追答
中午给你发....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魔龙嗜血
2013-05-16 · TA获得超过1116个赞
知道小有建树答主
回答量:1033
采纳率:100%
帮助的人:553万
展开全部
#include <stdio.h>

int result=0,valuess=0,k,y=1,l;
char a,b[1],d[50],r;

int main (void)
{
while (1)
{
int j=0;
printf ("%d",result);
printf ("please input a char and number\n");
while ((a=getchar())!='\n')
{
b[ j ]=a;
}

while((r=getchar())!='\n')
{
d[j]=r;
j++;
}
for(k=0;k<j;k++)
{
for(l=0;l<k;l++)
y*=10;
valuess+=((int)d[k]-48)*y;
}
y=1;j=0;
if ((b[0]=='q')||(b[0]=='Q'))
{
break;
}
switch (b[0])
{
case '+':
{
result += valuess;
break;
}
case '-':
{
result -= valuess;
break;
}
case '*':
{
result *= valuess;
break;
}
case '/':
{
if (valuess==0)
printf ("wrong ,please input a number\n");
else
result /= valuess;
break;
}
default:
{
printf ("unknow the operator%c","a\n");
break;
}
}
valuess=0;
}
return (0);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式