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

一定是加减乘有啊,我查了很多回答都没有包括乘法,还有尽量别用太高级的语句呀,我才大一,尽可能是我所了解过的吧,多谢了
用单链表的形式写吧,代码尽可能详细,有注释啊,

#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输出表达式吗?可以进行多项式的加减乘或除吗?帮我解答吧

追答

可以进行多项式的加减乘 。
除法过于麻烦了。。

追问

请问你这是用什么方法编写的?有用单链表写的吗,题目是多项式的运算,要求在屏幕上显示所输入的表达式?

追答

不用链表:

showPolym(&f); // 显示多项式 f
showPolym(&g); // 显示多项式 g
// POLYM*q=poly_add(&r,&f,&g); showPolym(q); // 显示多项式 f +g
POLYM*q=poly_x(&r,&f,&g); showPolym(q); // 显示多项式 f *g

Win32 Console 工程直接编译执行就行了。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-08
一会回去给你实现吧 - -
就是数据结构里面的栈能看懂不?
STL里的stack呢?追问

看不懂呢,c语言学的不好。能把源代码全部给我吧可以编译没有错误呀,太谢谢你了

追答

中午给你发....

追问

怎么还没发给我呀,可以把你的企鹅号也给我吧,向你学习学习

追答

我只是个大一学生,帮不了你很多,网上大神很多,慢慢找吧 - -

第2个回答  2013-05-16
#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);
相似回答