简单的整系数一元多项式计算系统(绝对高分)回答正确再加80分!(1)考虑下面多项式示例,实现输入函数,它读入并构造多项式的内部表示:3 x^5 + 2 x^2 + 4 100 x^20000 + 1 10 x^6 - 100 x^20 + 1 也可以自

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/28 02:26:52
简单的整系数一元多项式计算系统(绝对高分)回答正确再加80分!(1)考虑下面多项式示例,实现输入函数,它读入并构造多项式的内部表示:3x^5+2x^2+4100x^20000+110x^6-100x^

简单的整系数一元多项式计算系统(绝对高分)回答正确再加80分!(1)考虑下面多项式示例,实现输入函数,它读入并构造多项式的内部表示:3 x^5 + 2 x^2 + 4 100 x^20000 + 1 10 x^6 - 100 x^20 + 1 也可以自
简单的整系数一元多项式计算系统(绝对高分)
回答正确再加80分!
(1)考虑下面多项式示例,实现输入函数,它读入并构造多项式的内部表示:
3 x^5 + 2 x^2 + 4
100 x^20000 + 1
10 x^6 - 100 x^20 + 1
也可以自己设计某种更简单的多项式输入方式.如果采用自己的设计,请在报告中特别说明所用的形式,并给出至少6个自己的系统能接受的实例(按自己的多项式输入形式).
(2)为一元多项式设计一种内部表示方式(建议采用链接表).
(3)实现一元多项式的输出函数,从内部表示生成易读的输出.
(4)实现所需的几个计算函数.
(5)考虑计算中变量的处理,设计并实现一种保存变量名字与值的关联关系的结构.
(6)实现一个简单的交互处理界面.计算表达式可以采用后缀或中缀形式.

简单的整系数一元多项式计算系统(绝对高分)回答正确再加80分!(1)考虑下面多项式示例,实现输入函数,它读入并构造多项式的内部表示:3 x^5 + 2 x^2 + 4 100 x^20000 + 1 10 x^6 - 100 x^20 + 1 也可以自
#include
#include
typedef struct
{ float coef; //系数
int expn; //指数
}term;
typedef struct LNode
{ term data; //term多项式值
struct LNode *next;
}LNode,*LinkList;
typedef LinkList polynomail;
/*比较指数*/
int cmp(term a,term b)
{ if(a.expn>b.expn) return 1;
if(a.expn==b.expn) return 0;
if(a.expn else exit(-2);
}
/*又小到大排列*/
void arrange1(polynomail pa)
{ polynomail h=pa,p,q,r;
if(pa==NULL) exit(-2);
for(p=pa;p->next!=NULL;p=p->next); r=p;
for(h=pa;h->next!=r;)//大的沉底
{ for(p=h;p->next!=r&&p!=r;p=p->next)
if(cmp(p->next->data,p->next->next->data)==1)
{ q=p->next->next;
p->next->next=q->next;
q->next=p->next;
p->next=q;
}
r=p;//r指向参与比较的最后一个,不断向前移动
} }
/*由大到小排序*/
void arrange2(polynomail pa)
{ polynomail h=pa,p,q,r;
if(pa==NULL) exit(-2);
for(p=pa;p->next!=NULL;p=p->next); r=p;
for(h=pa;h->next!=r;)//小的沉底
{ for(p=h;p->next!=r&&p!=r;p=p->next)
if(cmp(p->next->next->data,p->next->data)==1)
{ q=p->next->next;
p->next->next=q->next;
q->next=p->next;
p->next=q;
}
r=p;//r指向参与比较的最后一个,不断向前移动
} }
/*打印多项式,求项数*/
int printpolyn(polynomail P)
{ int i;
polynomail q;
if(P==NULL) printf("无项!\n");
else if(P->next==NULL) printf("Y=0\n");
else
{ printf("该多项式为Y=");q=P->next;i=1;
if(q->data.coef!=0&&q->data.expn!=0)
{ printf("%.2fX^%d",q->data.coef,q->data.expn); i++; }
if(q->data.expn==0&&q->data.coef!=0)
printf("%.2f",q->data.coef);//打印第一项
q=q->next;
if(q==NULL)
{printf("\n");return 1;}
while(1)//while中,打印剩下项中系数非零的项,
{ if(q->data.coef!=0&&q->data.expn!=0)
{ if(q->data.coef>0) printf("+");
printf("%.2fX^%d",q->data.coef,q->data.expn); i++;
}
if(q->data.expn==0&&q->data.coef!=0)
{ if(q->data.coef>0) printf("+");
printf("%f",q->data.coef);
}
q=q->next;
if(q==NULL)
{ printf("\n"); break; }
}
}
return 1;
}
/*1、创建并初始化多项式链表*/
polynomail creatpolyn(polynomail P,int m)
{ polynomail r,q,p,s,Q;
int i;
P=(LNode*)malloc(sizeof(LNode));
r=P;
for(i=0;i { s=(LNode*)malloc(sizeof(LNode));
printf("请输入第%d项的系数和指数:",i+1);
scanf("%f%d",&s->data.coef,&s->data.expn);
r->next=s; r=s;
}
r->next=NULL;
if(P->next->next!=NULL)
{ for(q=P->next;q!=NULL/*&&q->next!=NULL*/;q=q->next)//合并同类项
for(p=q->next,r=q;p!=NULL;)
if(q->data.expn==p->data.expn)
{ q->data.coef=q->data.coef+p->data.coef;
r->next=p->next;
Q=p;p=p->next;
free(Q);
}
else
{ r=r->next;
p=p->next;
}
}
return P;
}
/*2、两多项式相加*/
polynomail addpolyn(polynomail pa,polynomail pb)
{ polynomail s,newp,q,p,r;int j;
p=pa->next;q=pb->next;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
while(p&&q)
{ s=(LNode*)malloc(sizeof(LNode));
switch(cmp(p->data,q->data))
{case -1: s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
break;
case 0: s->data.coef=p->data.coef+q->data.coef;
if(s->data.coef!=0.0)
{ s->data.expn=p->data.expn;
r->next=s;
r=s;
}
p=p->next;
q=q->next;
break;
case 1: s->data.coef=q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
break;
}//switch
}//while
while(p)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
}
while(q)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
}
r->next=NULL;
for(q=newp->next;q->next!=NULL;q=q->next)//合并同类项
for(p=q;p!=NULL&&p->next!=NULL;p=p->next)
if(q->data.expn==p->next->data.expn)
{ q->data.coef=q->data.coef+p->next->data.coef;
r=p->next;
p->next=p->next->next;
free(r);
}
printf("升序 1 , 降序 2\n");
printf("选择:");
scanf("%d",&j);
if(j==1) arrange1(newp);
else arrange2(newp);
return newp;
}
/*3、两多项式相减*/
polynomail subpolyn(polynomail pa,polynomail pb)
{ polynomail s,newp,q,p,r,Q; int j;
p=pa->next;q=pb->next;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
while(p&&q)
{ s=(LNode*)malloc(sizeof(LNode));
switch(cmp(p->data,q->data))
{case -1: s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
break;
case 0: s->data.coef=p->data.coef-q->data.coef;
if(s->data.coef!=0.0)
{ s->data.expn=p->data.expn;
r->next=s;
r=s;
}
p=p->next;
q=q->next;
break;
case 1: s->data.coef=-q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
break;
}//switch
}//while
while(p)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
}
while(q)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=-q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
}
r->next=NULL;
if(newp->next!=NULL&&newp->next->next!=NULL)//合并同类项
{ for(q=newp->next;q!=NULL;q=q->next)
for(p=q->next,r=q;p!=NULL;)
if(q->data.expn==p->data.expn)
{ q->data.coef=q->data.coef+p->data.coef;
r->next=p->next;
Q=p;p=p->next;
free(Q); }
else
{ r=r->next;
p=p->next; }
} printf("升序 1 , 降序 2\n");
printf("选择:");
scanf("%d",&j);
if(j==1) arrange1(newp);
else arrange2(newp);
return newp;}
/*4两多项式相乘*/
polynomail mulpolyn(polynomail pa,polynomail pb)
{ polynomail s,newp,q,p,r;
int i=20,j;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
for(p=pa->next;p!=NULL;p=p->next)
for(q=pb->next;q!=NULL;q=q->next)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=p->data.coef*q->data.coef;
s->data.expn=p->data.expn+q->data.expn;
r->next=s;
r=s;}
r->next=NULL;
printf("升序 1 , 降序 2\n");
printf("选择:");
scanf("%d",&j);
if(j==1) arrange1(newp);
else arrange2(newp);
for(;i!=0;i--)
{for(q=newp->next;q->next!=NULL;q=q->next)//合并同类项
for(p=q;p!=NULL&&p->next!=NULL;p=p->next)
if(q->data.expn==p->next->data.expn)
{ q->data.coef=q->data.coef+p->next->data.coef;
r=p->next;
p->next=p->next->next; free(r);
}
}
return newp;
}
/*5、销毁已建立的两个多项式*/
void delpolyn(polynomail pa,polynomail pb)
{ polynomail p,q;
p=pa;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
p=pb;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
printf("两个多项式已经销毁\n");
}
void main()
{ polynomail pa=NULL,pb=NULL;
polynomail p,q;
polynomail addp=NULL,subp=NULL,mulp=NULL;
int n,m;
int sign='y';
printf("1、创建两个一元多项式\n");
printf("2、两多项式相加得一新多项式\n");
printf("3、两多项式相减得一新多项式\n");
printf("4、两多项式相乘得一新多项式\n");
printf("5、销毁已建立的两个多项式\n");
printf("6、退出\n");
printf("\n");
while(sign!='n')
{ printf("请选择:");
scanf("%d",&n);
switch(n)
{case 1:
if(pa!=NULL)
{ printf("已建立两个一元多项式,请选择其他操作!");
break;
}
printf("请输入第一个多项式:\n");
printf("要输入几项:");
scanf("%d",&m);
while(m==0)
{ printf("m不能为0,请重新输入m:");
scanf("%d",&m);
}
pa=creatpolyn(pa,m);
printpolyn(pa);
printf("请输入第二个多项式:\n");
printf("要输入几项:");
scanf("%d",&m);
pb=creatpolyn(pb,m);
printpolyn(pb);
break;
case 2:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
addp=addpolyn(pa,pb);
printpolyn(addp);
break;
case 3:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
subp=subpolyn(pa,pb);
printpolyn(subp);
break;
case 4:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
mulp=mulpolyn(pa,pb);
printpolyn(mulp);
break;
case 5:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
delpolyn(pa,pb);
pa=pb=NULL;
break;
case 6:
if(addp!=NULL)
{ p=addp;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
}
if(subp!=NULL)
{ p=subp;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
}
exit(-2);
}//switch
}//while
}

“数据结构”上机实习项目(2)
注意事项:
1,课程项目要求每个同学独立完成,写出“实习报告”。
2,为了环保,程序和实习报告都采用电子文档形式(通过email附件)交辅导老师。(不要打印稿)
3,如果采用多个源文件的形式开发,发给老师前请把文件打包(用zip或者rar)。
4,注意:只上交所有源程序文件(不要交可执行程序),应保证程序能编译和执行。

全部展开

“数据结构”上机实习项目(2)
注意事项:
1,课程项目要求每个同学独立完成,写出“实习报告”。
2,为了环保,程序和实习报告都采用电子文档形式(通过email附件)交辅导老师。(不要打印稿)
3,如果采用多个源文件的形式开发,发给老师前请把文件打包(用zip或者rar)。
4,注意:只上交所有源程序文件(不要交可执行程序),应保证程序能编译和执行。
5,注明所用的程序开发环境,以便老师检查。
6,请注意保证自己上交的文档中没有病毒。

序号 布置日期 截止日期 作业内容
项目2 11月30日 12月28日 设计和实现一个简单的整系数一元多项式计算系统。要求:
1,系统能交互式地接受一系列多项式输入、计算和输出命令,完成相应的处理。
2,系统提供变量和赋值功能。变量名是一个字母(可用任何大写或小写字母),变量以多项式为值。
3,你实现的系统应提供下述命令(每个命令以一个字符作为标识,你可以假定每个命令的长度都不超过一行):
把输入的多项式赋给变量作为值:
??= [变量名] [多项式];
其中 [变量名] 是任一变量名(一个字母),[多项式] 是按下面说明的多项式输入形式给出的一个多项式。
对表达式(可以选用后缀或者中缀形式)计算,把结果赋给变量:
??? [变量名] [表达式];
输出变量的值(输出多项式):
??! [变量名];
结束:
??^;
4,多项式运算包括加法、乘法、求负(一元运算)和求导。下面是一个计算示例(采用的是后缀形式):
??? d a ' b + c - *;
表示对a(a的值是个多项式)求导,求导结果加上多项式b,再乘以多项式c求负的结果(a、b、c都应已有值),计算结果得到的多项式赋给变量d。
5,输出多项式时请采用如下易读形式(一元多项式,总变元为x):
??x^4 + -3 x^2 + 5
(如果能输出 x^4 - 3 x^2 + 5 当然更好)。
6,多项式的系数和指数直接用int类型,不考虑数值超范围的问题。
7,注意:计算表达式里的基本计算对象是变量代表的多项式。
下面工作步骤的说明供参考(这些建议有益于你顺利完成工作):
1,考虑下面多项式示例,实现输入函数,它读入并构造多项式的内部表示:
3 x^5 + 2 x^2 + 4
100 x^20000 + 1
10 x^6 - 100 x^20 + 1
你也可以自己设计某种更简单的多项式输入方式。如果采用自己的设计,请在报告中特别说明所用的形式,并给出至少6个你的系统能接受的实例(按你的多项式输入形式)。
2,为一元多项式设计一种内部表示方式(建议采用链接表)。
3,实现一元多项式的输出函数,从内部表示生成易读的输出。
4,实现所需的几个计算函数。
5,考虑计算中变量的处理,设计并实现一种保存变量名字与值的关联关系的结构。
6,实现一个简单的交互处理界面。计算表达式可以采用后缀或中缀形式。
请在实习报告中特别说明(除了教科书示例报告中考虑的问题外):
1,说明你实现的系统中使用的主要数据结构。
2,说明如何使用你的系统。
3,论述并分析所用数据结构的优点和缺点,说明为什么采用这种设计。
4,写“评价和进一步工作”一节,讨论系统改进和扩充的可能性。

收起

简单的整系数一元多项式计算系统(绝对高分)回答正确再加80分!(1)考虑下面多项式示例,实现输入函数,它读入并构造多项式的内部表示:3 x^5 + 2 x^2 + 4 100 x^20000 + 1 10 x^6 - 100 x^20 + 1 也可以自 高分悬赏,设计一个一元多项式简单的计算器(fortran语言)问题描述:设计一个一元多项式简单的计算器.基本要求:一元多项式简单计算器的基本功能为:(1) 输入并建立多项式;(2) 输 多项式的系数如何计算? 一元稀疏多项式简单的计算器 多项式计算要求:1主要功能:(1)输入并建立多项式;(2)输出多项式;(3)两个多项式相加,建立并输出和多项式;(4)两个多项式相减,建立并输出差多项式.2.要求:一元多项式简单计算器的基本 多项式计算要求:1主要功能:(1)输入并建立多项式;(2)输出多项式;(3)两个多项式相加,建立并输出和多项式;(4)两个多项式相减,建立并输出差多项式.2.要求:一元多项式简单计算器的基本 matlab计算多项式系数 多项式计算 C语言编程多项式计算1.设计要求:具备一元多项式加、减、乘的运算功能.(多项式系数的输入和输出均按次数从高到低排列形式安排系数.最右面的为零次项系数,从右向左依次增 一元多项式运算一.问题描述设计一个简单的一元稀疏多项式加法运算器.二.基本要求一元稀疏多项式简单计算器的基本功能包括:1.按照指数升序次序,输入并建立多项式A与B.2.计算多项 多项式的系数怎么计算或怎样表达? 一元多项式根与系数的关系高等代数里一元n次多项式根与系数的关系,具体内容是什么 一元多项式相乘问题,我现在有两个数组A和B大小确定,我有一个一次的多项式例如ax+b,数组A存了一个一元多项式的系数 a[0]对应幂指数为0的项,里面存储系数,以此类推,请问我要计算A数组与ax+b 一元n次多项式的求和与计算问题.用C语言实现,不用数据结构和函数.用“非零系数”、“指数”数组(不妨设定系数为整数)可以表示一个一元n次多项式.现给出Fn(x)、Gm(x)两个多项式, 整系数多项式的有理根 一元稀疏多项式计算器设计任务:设计一个一元稀疏多项式简单计算器.设计要求:一元稀疏多项式简单计算器的基本功能是:(1)输入并建立多项式——creatpolyn();(2)输出多项式,输出形式为 一元多项式的简单计算设计一个一元的简单计算器基本要求:1、输入并建立多项式2、输出多项式3、两个多箱式相加,建立并输出和多项式实现提示:可选择带头节点的单项循环链表或单链表 一元多项式的实现(C语言)求程序大神帮忙解决一下数据结构的练习.要求:1)一元多项式的输入,显示输出(1)提示输入多项式系数和指数,输入之后把多项式按照常用形式显示出来(2)计算结 设计一个一元多项式简单的计算器(数据结构C语言版)急要求:一元多项式计算器的基本功能定为 (1) 建立多项式 (2) 输出多项式 (3) 两个多项式相加,建立并输出和多项式 (4) 两个多项式相减