
c语言/c++ : 一元多项式的表示及运算;加,减,乘计算都包括的程序,在线等高人解答
一定是加减乘有啊,我查了很多回答都没有包括乘法,还有尽量别用太高级的语句呀,我才大一,尽可能是我所了解过的吧,多谢了用单链表的形式写吧,代码尽可能详细,有注释啊,...
一定是加减乘有啊,我查了很多回答都没有包括乘法,还有尽量别用太高级的语句呀,我才大一,尽可能是我所了解过的吧,多谢了
用单链表的形式写吧,代码尽可能详细,有注释啊, 展开
用单链表的形式写吧,代码尽可能详细,有注释啊, 展开
3个回答
展开全部
#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;
}
#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输出表达式吗?可以进行多项式的加减乘或除吗?帮我解答吧
追答
可以进行多项式的加减乘 。
除法过于麻烦了。。
展开全部
一会回去给你实现吧 - -
就是数据结构里面的栈能看懂不?
STL里的stack呢?
就是数据结构里面的栈能看懂不?
STL里的stack呢?
更多追问追答
追问
看不懂呢,c语言学的不好。能把源代码全部给我吧可以编译没有错误呀,太谢谢你了
追答
中午给你发....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询