数据结构 多项式求和.docx
- 文档编号:6643286
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:10
- 大小:153.31KB
数据结构 多项式求和.docx
《数据结构 多项式求和.docx》由会员分享,可在线阅读,更多相关《数据结构 多项式求和.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构多项式求和
数据结构
多元化考核作业
题目:
多项式求和
姓名
专业班级:
物联网工程B1501班
学号:
一:
概念
(1)几个单项式的和叫做多项式。
在多项式中,每个单项式叫做多项式的项,其中不含字母的项叫做常数项。
一个多项式有几项就叫做几项式。
多项式中的符号,看作各项的性质符号。
(2)单项式的次数:
单项式中,次数最高的项的次数,就是这个多项式的次数。
(3)多项式的排列:
1.把一个多项式按某一个字母的指数从大到小的顺序排列起来,叫做把多项式按这个字母降幂排列。
2.把一个多项式按某一个字母的指数从小到大的顺序排列起来,叫做把多项式按这个字母升幂排列。
由于多项式是几个单项式的和,所以可以用加法的运算定律,来交换各项的位置,而保持原多项式的值不变。
为了便于多项式的计算,通常总是把一个多项式,按照一定的顺序,整理成整洁简单的形式,这就是多项式的排列。
在做多项式的排列的题时注意:
(1)由于单项式的项,包括它前面的性质符号,因此在排列时,仍需把每一项的性质符号看作是这一项的一部分,一起移动。
(2)有两个或两个以上字母的多项式,排列时,要注意:
a.先确认按照哪个字母的指数来排列。
b.确定按这个字母向里排列,还是生里排列。
(3)整式:
二:
目的
1)掌握线性表的顺序存储结构和链式存储结构
2)掌握线性表插入、删除等基本运算
3)掌握线性表的典型应用——多项式求和。
三:
内容
顺序存储结构的实现。
f(x)=8x^6+5x^5-10x^4+32x^2-x+10,g(x)=7x^5+10x^4-20x^3-10x^2+x,
求和结果f(x)+g(x)=8x^6+12x^5-20x^3+22x^2+10。
顺序表类型定义如下
#defineMAXLEN100
typedefstruct
{intdata[MAXLEN];
intlast;
}SeqList;
四:
过程
(1)步骤
首先分析实验内容要实现多项式求和必须创建三个函数一个是创建多项式的函数一
个是显示多项式的函数最后面一个是两个多项式求和的函数。
然后在主函数中两次调用函数最
后调用求和函数实现求和功能。
⑵源代码
#include
#defineMAXLEN100
typedefstruct
{intdata[MAXLEN];
intlast;
}SeqList;
//显示多项式
voidshow_list(SeqListh)
{
for(inti=h.last;i>=1;i--)
if(h.data[i])
printf("\(%dx^%d\)+",h.data[i],i);
printf("\(%dx^%d\)\n",h.data[0],0);
}
//创建的多项式
voidcreate_list(SeqList*D)
{intn,i;
printf("请输入多项式X的最高次数");
scanf("%d",&n);
for(intk=99;k>=0;k--)
D->data[k]=0;
printf("请按多项式X的次数由大到小输入系数缺少项用0补齐\n");
for(i=n;i>=0;i--)
{printf("输入X^%d项的系数:
",i);
scanf("%d",&D->data[i]);
}
D->last=n;
}
//两个多项式求和
voidadd_List(SeqListf,SeqListg,SeqList*h)
{inti;
h->last=f.last>g.last?
f.last:
g.last;
for(i=0;i<=h->last;i++)
h->data[i]=f.data[i]+g.data[i];
}
voidmain()
{SeqListf,g,h;
printf("创建的多项式f(x):
\n");
printf("\n");
create_list(&f);
printf("f(x)=");
show_list(f);
printf("创建的多项式g(x):
\n");
printf("\n");
create_list(&g);
printf("g(x)=");
show_list(g);
printf("多项式f(x)和g(x)的和");
add_List(f,g,&h);
printf("h(x)=");
show_list(h);
}
(3)结果
#include
#include
#include
#defineNULL0
typedefstructNODE{
floatcoef;//系数
intexpn;//指数
structNODE*next;
}NODE;
NODE*Creat(intn);
voidprint(NODE*head);
NODE*AddPolyn(NODE*head1,NODE*head2);
NODE*Delfirst(NODE*head,NODE*q);
voidInsertBefore(NODE*p1,NODE*p2);
intcompare(inta,intb);
main()
{
NODE*head1,*head2,*head3;
intn1,n2;
printf("请输入你需要的多项数的数目n1:
");
scanf("%d",&n1);
head1=Creat(n1);
printf("第一个多项式的显示:
\n");
print(head1);
printf("\n请输入你需要的多项数的数目n2:
");
scanf("%d",&n2);
head2=Creat(n2);
printf("\n第二个多项式的显示:
\n");
print(head2);
head3=AddPolyn(head1,head2);
printf("\n合并后的多项式的显示:
\n");
print(head3);
printf("\n");
}
/*创建链表*/
NODE*Creat(intn)
{
NODE*current,*previous,*head;
inti;
head=(NODE*)malloc(sizeof(NODE));/*创建头结点*/
previous=head;
for(i=0;i { current=(NODE*)malloc(sizeof(NODE)); printf("请输入系数和指数: "); scanf("%f%d",¤t->coef,¤t->expn); previous->next=current; previous=current; } previous->next=NULL; returnhead; } /*一元多项式的想加,总体考虑,可分qa的指数比qb小,或等于pb(如果系数相加等于0和不等于0),或大于pb 里面由InsertBefore和Delfirst两个小模块组成一部分*/ NODE*AddPolyn(NODE*head1,NODE*head2) { NODE*ha,*hb,*qa,*qb; inta,b; floatsum; ha=head1;/*ha和hb指向头结点*/ hb=head2; qa=ha->next;/*qa和qb指向头结点的下一个结点*/ qb=hb->next; while(qa&&qb)/*qa和qb均非空*/ { a=qa->expn; b=qb->expn; switch(compare(a,b)){ case-1: /*qa->expn ha=qa; qa=qa->next; break; case0: sum=qa->coef+qb->coef;/*系数的和*/ if(sum! =0.0){/*如果不是0.0*/ qa->coef=sum;/*改变系数*/ ha=qa; }else{ free(Delfirst(ha,qa)); } free(Delfirst(hb,qb)); qa=ha->next; qb=hb->next;/*qb释放后要重新赋值*/ break; case1: /*如果qa->expn>qb->expn*/ Delfirst(hb,qb); InsertBefore(ha,qb);/*把qb插入到ha下一个结点之前*/ qb=hb->next; ha=ha->next; break; } } if(qb) ha->next=qb;/*插入剩余的pb*/ free(head2); returnhead1; } /*比较*/ intcompare(inta,intb) { if(a return-1; elseif(a>b) return1; else return0; } /*删除结点q*/ NODE*Delfirst(NODE*p1,NODE*q) { p1->next=q->next; return(q); } /*插入结点,引入结点p,可以让p插入到p2和p1之间*/ voidInsertBefore(NODE*p1,NODE*p2) { NODE*p; p=p1->next; p1->next=p2; p2->next=p; } /*打印,为了美观程序分开打印*/ voidprint(NODE*head) { NODE*current; current=head->next; while(current->next! =NULL) { printf("%0.f*x^%d+",current->coef,current->expn); current=current->next; } printf("%0.f*x^%d",current->coef,current->expn); } 结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 多项式求和 多项式 求和