数据结构课程设计一元稀疏多项式计算器Word格式.docx
《数据结构课程设计一元稀疏多项式计算器Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计一元稀疏多项式计算器Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
定义线性表的动态分配顺序存储结构;
建立多项式存储结构,定义指针*next利用链表实现队列的构造。
每次输入一项的系数和指数,可以输出构造的一元多项式
演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;
最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。
1、元素类型、结点类型和指针类型:
typedefstructLNode
{
floatxishu;
//系数
intzhishu;
//指数
structLNode*next;
}LNode,*Linklist;
2、建立两个全局链表指针,
LinklistList1=NULL;
LinklistList2=NULL;
用来存放两个多项式,然后在main()函数里调用输入函数。
3、本程序包括7个模块
1)主程序:
Voidmain()
While
(1)
输出菜单;
接受命令;
处理命令;
If(命令==退出)
则程序退出;
}
释放链表;
2)输入函数:
VoidInput()
调用插值函数In(List1)处理链表一;
调用插值函数In(List2)处理链表二;
3)输出函数:
VoidOutput()
调用输值函数Out(List1)处理链表一;
调用输值函数Out(List2)处理链表一;
4)相加函数:
VoidAdd()
if(List1节点指数>
List2节点指数)
输出List1节点;
指针后移;
elseif(List1节点指数<
输出List2节点;
else
输出两节点相加后的值;
两链表指针都后移;
if(链表1到头)
输出链表2剩余的节点;
else(即链表二到头)
输出链表1剩余的节点;
5)相减函数:
VoidSub()
(系数要取负再输出)
Else
6)求值函数:
voidCalc()
{
输入x的值;
依次调用链表一的节点,求出单项式的值相加后输出;
}
7)求导函数:
voidDaohanshu()
输出多项式一的导函数;
三、详细设计
#include<
stdio.h>
stdlib.h>
math.h>
typedefstructLNode//元素类型
}LNode,*Linklist;
LinklistIn(LinklistL)//依次往链尾插
Linklistp;
floata;
intb;
Linklisthead=(Linklist)malloc(sizeof(LNode));
L=head;
head->
zhishu=0;
//head->
zhishu头结点放的是多项式的项数
p=head;
p->
next=NULL;
printf("
请输入一个多项式:
\n"
);
while(scanf("
%f%d"
&
a,&
b)&
&
(a||b))//默认多项式是按指数由小到大输入
//printf("
%f%d\n"
a,b);
(head->
zhishu)++;
%3d\n"
L->
zhishu);
Linklistq=(Linklist)malloc(sizeof(LNode));
q->
xishu=a;
zhishu=b;
if(p->
next==NULL)
{
p->
next=q;
q->
p=head;
}
else
if(p->
next->
zhishu<
=q->
zhishu)
{
q->
next=p->
next;
p->
p=head;
}
else
p=p->
您已成功输入一个多项式!
!
returnL;
voidInput()
List1=In(List1);
List2=In(List2);
voidOut(LinklistL)
p=L->
此多项式有%3d项"
while(p!
=NULL)//按指数由大到小输出
printf("
%0.1f%3d"
p->
xishu,p->
p=p->
voidOutput()
第一个多项式为:
Out(List1);
第二个多项式为:
Out(List2);
voidAdd()
Linklistp1,p2;
p1=List1->
p2=List2->
相加后的多项式为:
while(p1&
p2)
if(p1->
zhishu>
p2->
printf("
p1->
xishu,p1->
p1=p1->
elseif(p1->
p2->
xishu,p2->
p2=p2->
xishu+p2->
if(p1==NULL)
while(p2)
else
while(p1)
voidSub()
相减后的多项式为:
-p2->
if(p1->
xishu-p2->
xishu!
=0)
printf("
voidCalc()
intx;
doublesum=0;
请输入x的值:
"
scanf("
%d"
x);
p=List1->
while(p)
sum+=p->
xishu*pow(x,p->
多项式1在x处的值为:
%0.1lf"
sum);
voidDaohanshu()
多项式1的导函数为:
xishu*p->
zhishu,p->
zhishu-1);
intmain()
intnum;
while
(1)
-----------------------------------------------\n"
1-------输入并建立多项式;
2-------输出其指系数排列;
3-------多项式相加;
4-------多项式相减;
5-------计算多项式在x处的值;
6-------求多项式a的导函数a'
;
0-------退出\n"
请输入您要选择的功能:
scanf("
num);
switch(num)
case1:
Input();
break;
//输入函数
case2:
Output();
//输出函数
case3:
Add();
//函数相加
case4:
Sub();
//函数相减
case5:
Calc();
//计算函数在x处的值
case6:
Daohanshu();
//求函数的导函数
case0:
exit
(1);
default:
printf("
输入错误,请重新输入!
free(List1);
free(List2);
return0;
四、调试分析
1.由于链表是设置成为全局变量,所以任意函数都可以修改它,存在一定风险性。
但这也为后来的函数方便了,所有的函数统一没有参数。
2.刚开始时曾忽略了一些变量的类型以及没有考虑到指针的返回问题,使调试程序浪费了一定的时间。
今后应重视确定参数的变量和赋值属性的区分和标识。
3.本程序模块简洁,在main()函数里得到充分体现;
4.链表默认用户输入是按指数从小到大的顺序输入的,而默认输出时按指数从大到小;
输入时,依次把节点插在链表的末端。
五、用户手册
1.本程序运行环境为Windows操作系统,执行文件为:
std.exe
2.进入演示程序后显示的界面:
六、测试结果
中南民族大学
数据结构课程设计报告
姓名:
康宇
年级:
2010
学号:
10061014
专业:
计算机科学与技术
指导老师:
宋中山
2013年4月15日
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求