云南大学软件学院数据结构实验二实验报告多项式计算器Word格式文档下载.docx
- 文档编号:16617435
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:16
- 大小:63.05KB
云南大学软件学院数据结构实验二实验报告多项式计算器Word格式文档下载.docx
《云南大学软件学院数据结构实验二实验报告多项式计算器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《云南大学软件学院数据结构实验二实验报告多项式计算器Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
运用了高等数学中多项式的求导积分的知识。
二、【实验设计(Design)】
(15%)
本程序定义了抽象数据结构listnode,用于存储多项式的系数和指数并存储指向下一个listnode的指针来构成链表。
本程序包含如下*个函数:
Main函数:
调用input函数—>
调用bubble_sort函数—>
调用operplus函数—>
调用oper_minus函数—>
调用oper_mul函数—>
调用oper_dy函数—>
调用oper_jifen函数。
Oper_plus函数:
将两个链表的相应项系数相加,指数不同项不操作,存入新链表,再调用排序算法,使之为降序排列。
Oper_minus函数:
将两个链表的相应项系数相减,指数不同项不操作,存入新链表,再调用排序算法,使之为降序排列。
Oper_mul函数:
将两个链表的相应项系数相乘,指数指数相加,存入新链表,再调用排序算法,使之为降序排列。
Oper_dy函数:
将链表的相应项系数乘以指数,指数减一,存入新链表,再调用排序算法,使之为降序排列。
Oper_jifen函数:
将链表的相应项系数除以指数+1,指数加一,存入新链表,再调用排序算法,使之为降序排列。
Bubble_sort函数:
使用冒泡排序的算法使链表的各个元素成降序排列,并合并同类项,返回链表头指针。
Myprintf函数:
用于格式化输出多项式的每一项,消除为1的系数以及为1的指数,使之看上去与人类写法差不多。
三、【实现描述(Implement)】
(25%)
(本部分应包括:
抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。
)
Listnode包含3个成员变量:
系数、指数、指向下一个的指针。
关键算法:
bubble_sort函数,时间复杂度:
n^2。
四、【测试结果(Testing)】
(20%)
测试数据如图:
实验结果:
四、【实验总结】
这是第一次用链表编写多项式运算器,感到使用抽象数的类型的线性表的方便之处,以后还会多多使用的。
本次试验在很多地方使用了代码的重用。
极大的减少了代码的行数。
五、【项目运作描述(Operate)】
能减轻多项式运算大部分的压力,方便同学们日常使用,加法、减法、乘法、求导、积分这些看似简单的运算常常会占用我们大量的时间,使这软件有一定的实用价值。
六、【代码】
//定义控制台应用程序的入口点。
//
#include"
stdafx.h"
stdlib.h"
typedefstructnode
{
floatcon;
intexp;
structnode*next;
}listnode;
listnode*head;
listnode*p;
listnode*q;
listnode*r;
listnode*head1;
listnode*head2;
inthead_num=0;
listnode*point[2];
voidinput()
intj=0;
floatcon;
head=(listnode*)malloc(sizeof(listnode));
head->
next=NULL;
start:
scanf("
%f%d"
&
con,&
exp);
if(exp==0&
&
con==0)
gotonext;
p=(listnode*)malloc(sizeof(listnode));
j++;
p->
con=con;
exp=exp;
next=head->
next;
next=p;
gotostart;
next:
head->
exp=j;
point[head_num]=head;
head_num++;
}
intbubble_sort(listnode*myhead)
inti,j;
listnode*swap;
listnode*real_myhead;
real_myhead=myhead;
intnum=myhead->
exp;
//myhead=myhead->
next;
if(num==1&
num==0)
gotonext;
for(i=0;
i<
num-1;
i++)
{
myhead=real_myhead;
for(j=0;
j<
j++)
{
if((myhead->
next->
exp)<
(myhead->
next->
exp))
{
swap=(listnode*)malloc(sizeof(listnode));
swap->
exp=myhead->
con=myhead->
con;
myhead->
exp=(myhead->
next)->
exp;
con=(myhead->
con;
exp=swap->
con=swap->
free(swap);
}
myhead=myhead->
}
}
myhead=real_myhead;
if(myhead->
exp==0)
return0;
p=myhead->
for(;
p->
next!
=NULL;
p=p->
next)
if((p->
exp)==(p->
exp)&
(p->
=NULL))
p->
con=p->
con+p->
next->
swap=(listnode*)malloc(sizeof(listnode));
swap=p->
next=p->
free(swap);
real_myhead->
exp-=1;
//p=p->
next==NULL))
next=NULL;
//free(swap);
//gotonext;
return0;
return0;
voidmyprintf(listnode*node)
listnode*mynode;
mynode=(listnode*)malloc(sizeof(listnode));
mynode->
con=node->
exp=node->
if((mynode->
con==1)&
(mynode->
exp==1))
printf("
x"
);
elseif((mynode->
con==1)&
exp!
=1)&
=0))
x^%d"
mynode->
exp);
con==0))
;
con!
%.2fx"
con);
=0)&
exp==0))
%.2f"
//elseif(mynode->
//printf("
%f"
mynode->
con);
else
%.2fx^%d"
con,mynode->
free(mynode);
voidoperplus()
head1=point[0];
head2=point[1];
head=(listnode*)malloc(sizeof(listnode));
exp=head1->
exp+head2->
if(head1->
gotofirst_over;
p=head1->
r=(listnode*)malloc(sizeof(listnode));
r->
exp=p->
next=head->
next=r;
r=(listnode*)malloc(sizeof(listnode));
r->
first_over:
if(head->
gotosecond_over;
p=head2->
second_over:
bubble_sort(head);
voidoperminus()
con=-(p->
con);
intopermul()
exp=(head1->
exp)*(head2->
for(p=head1->
=NULL;
p=p->
for(q=head2->
q->
q=q->
r=(listnode*)malloc(sizeof(listnode));
r->
con=(q->
con)*(p->
exp=(q->
exp)+(p->
head->
next=r;
r=(listnode*)malloc(sizeof(listnode));
intoutput(listnode*output_head)
if(output_head->
0\n"
p=output_head->
if(p->
con>
0)
myprintf(p);
p=p->
for(;
p=p->
if(p->
printf("
+"
//elseif(p->
con<
//printf("
-"
printf("
//elseif(p->
myprintf(p);
\n"
return0;
listnode*operdy(listnode*p)
listnode*operdy_head;
operdy_head=(listnode*)malloc(sizeof(listnode));
operdy_head->
exp=0;
returnoperdy_head;
for(p=p->
=NULL;
con=(p->
con)*(p->
exp=((p->
exp)-1);
next=operdy_head->
operdy_head->
exp++;
bubble_sort(operdy_head);
returnoperdy_head;
listnode*operjifen(listnode*p)
con)/(p->
exp+1);
exp)+1);
exp+1);
int_tmain(intargc,_TCHAR*argv[])
请依次输入第1个多项式的各个元素:
(例:
-9x^3应该输入-93)\n"
input();
请依次输入第2个多项式的各个元素:
bubble_sort(point[0]);
bubble_sort(point[1]);
//整理顺序
第1个多项式为:
output(point[0]);
第2个多项式为:
output(point[1]);
多项式1+多项式2=:
operplus();
output(head);
多项式1-多项式2=:
operminus();
多项式1*多项式2=:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 云南大学 软件 学院 数据结构 实验 报告 多项式 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)