数据结构课程设计(一元稀疏多项式计算器).doc

上传人:b****2 文档编号:1643467 上传时间:2022-10-23 格式:DOC 页数:11 大小:120KB
下载 相关 举报
数据结构课程设计(一元稀疏多项式计算器).doc_第1页
第1页 / 共11页
数据结构课程设计(一元稀疏多项式计算器).doc_第2页
第2页 / 共11页
数据结构课程设计(一元稀疏多项式计算器).doc_第3页
第3页 / 共11页
数据结构课程设计(一元稀疏多项式计算器).doc_第4页
第4页 / 共11页
数据结构课程设计(一元稀疏多项式计算器).doc_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构课程设计(一元稀疏多项式计算器).doc

《数据结构课程设计(一元稀疏多项式计算器).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计(一元稀疏多项式计算器).doc(11页珍藏版)》请在冰豆网上搜索。

数据结构课程设计(一元稀疏多项式计算器).doc

实习报告:

1.5题一元稀疏多项式计算器

实习报告

题目:

设计一个一元稀疏多项式简单计算器

班级:

计科一班姓名:

康宇学号:

10061014完成日期:

2013.4.15

一、需求分析

1、一元稀疏多项式简单计算器的功能是:

1)输入并建立多项式;

2)输出多项式,输出形式为整数序列:

n,c1,e1,c2,e2,………cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;

3)多项式a和b相加,建立多项式a+b;

4)多项式a和b相减,建立多项式a-b。

5)计算多项式在x处的值;

6)求多项式a、b的导函数;

2、测试数据:

1、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7);

2、(6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15)

=(-7.8x^15-1.2x^9+12x^-3-x);

3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5);

4、(x+x^3)+(-x-x^3)=0;

5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200);

6、(x+x^2+x^3)+0=x+x^2+x^3.

二、概要设计

为实现上述程序功能,应以有序链表来表示多项式的系数和指数。

定义线性表的动态分配顺序存储结构;建立多项式存储结构,定义指针*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()

{

if(List1节点指数>List2节点指数)

输出List1节点;

指针后移;

elseif(List1节点指数

输出List2节点;(系数要取负再输出)

指针后移;

Else

两链表指针都后移;

if(链表1到头)

输出链表2剩余的节点;

else(即链表二到头)

输出链表1剩余的节点;

}

6)求值函数:

voidCalc()

{

输入x的值;

依次调用链表一的节点,求出单项式的值相加后输出;

}

7)求导函数:

voidDaohanshu()

{

输出多项式一的导函数;

}

三、详细设计

#include

#include

#include

typedefstructLNode//元素类型

{

floatxishu;

intzhishu;

structLNode*next;

}LNode,*Linklist;

LinklistList1=NULL;

LinklistList2=NULL;

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)++;

//printf("%3d\n",L->zhishu);

Linklistq=(Linklist)malloc(sizeof(LNode));

q->xishu=a;

q->zhishu=b;

if(p->next==NULL)

{

p->next=q;

q->next=NULL;

p=head;

}

else

{

if(p->next->zhishu<=q->zhishu)

{

q->next=p->next;

p->next=q;

p=head;

}

else

{

p=p->next;

}

}

}

printf("您已成功输入一个多项式!

\n");

returnL;

}

voidInput()

{

List1=In(List1);

List2=In(List2);

}

voidOut(LinklistL)

{

Linklistp;

p=L->next;

printf("此多项式有%3d项",L->zhishu);

while(p!

=NULL)//按指数由大到小输出

{

printf("%0.1f%3d",p->xishu,p->zhishu);

p=p->next;

}

printf("\n");

}

voidOutput()

{

printf("第一个多项式为:

\n");

Out(List1);

printf("第二个多项式为:

\n");

Out(List2);

}

voidAdd()

{

Linklistp1,p2;

p1=List1->next;

p2=List2->next;

printf("相加后的多项式为:

\n");

while(p1&&p2)

{

if(p1->zhishu>p2->zhishu)

{

printf("%0.1f%3d",p1->xishu,p1->zhishu);

p1=p1->next;

}

elseif(p1->zhishuzhishu)

{

printf("%0.1f%3d",p2->xishu,p2->zhishu);

p2=p2->next;

}

else

{

printf("%0.1f%3d",p1->xishu+p2->xishu,p1->zhishu);

p1=p1->next;

p2=p2->next;

}

}

if(p1==NULL)

{

while(p2)

{

printf("%0.1f%3d",p2->xishu,p2->zhishu);

p2=p2->next;

}

}

else

{

while(p1)

{

printf("%0.1f%3d",p1->xishu,p1->zhishu);

p1=p1->next;

}

}

printf("\n");

}

voidSub()

{

Linklistp1,p2;

p1=List1->next;

p2=List2->next;

printf("相减后的多项式为:

\n");

while(p1&&p2)

{

if(p1->zhishu>p2->zhishu)

{

printf("%0.1f%3d",p1->xishu,p1->zhishu);

p1=p1->next;

}

elseif(p1->zhishuzhishu)

{

printf("%0.1f%3d",-p2->xishu,p2->zhishu);

p2=p2->next;

}

else

{

if(p1->xishu-p2->xishu!

=0)

{

printf("%0.1f%3d",p1->xishu-p2->xishu,p1->zhishu);

}

p1=p1->next;

p2=p2->next;

}

}

if(p1==NULL)

{

while(p2)

{

printf("%0.1f%3d",-p2->xishu,p2->zhishu);

p2=p2->next;

}

}

else

{

while(p1)

{

printf("%0.1f%3d",p1->xishu,p1->zhishu);

p1=p1->next;

}

}

printf("\n");

}

voidCalc()

{

intx;

doublesum=0;

Linklistp;

printf("请输入x的值:

");

scanf("%d",&x);

p=List1->next;

while(p)

{

sum+=p->xi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1