实验报告2一元稀疏多项式计算器.docx

上传人:b****5 文档编号:6138920 上传时间:2023-01-04 格式:DOCX 页数:12 大小:121.75KB
下载 相关 举报
实验报告2一元稀疏多项式计算器.docx_第1页
第1页 / 共12页
实验报告2一元稀疏多项式计算器.docx_第2页
第2页 / 共12页
实验报告2一元稀疏多项式计算器.docx_第3页
第3页 / 共12页
实验报告2一元稀疏多项式计算器.docx_第4页
第4页 / 共12页
实验报告2一元稀疏多项式计算器.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验报告2一元稀疏多项式计算器.docx

《实验报告2一元稀疏多项式计算器.docx》由会员分享,可在线阅读,更多相关《实验报告2一元稀疏多项式计算器.docx(12页珍藏版)》请在冰豆网上搜索。

实验报告2一元稀疏多项式计算器.docx

实验报告2一元稀疏多项式计算器

华北水利水电学院一元稀疏多项式计算器实验报告

2010~2011学年第一学期09级计算机科学与技术专业

班级:

2009119学号:

200911902姓名:

万婷婷

一、实验目的

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

熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用

二、实验要求

a)输入并建立多项式

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

n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。

序列按指数降序排列。

c)多项式a和b相加,建立多项式a+b,输出相加的多项式。

d)多项式a和b相减,建立多项式a-b,输出相减的多项式。

用带表头结点的单链表存储多项式。

测试数据:

(1)(2x+5x8-3.1x11)+(7-5x8+11x9)

(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)

(3)(1+x+x2+x3+x4+x5)+(-x3-x4)

(4)(x+x2+x3)+0

(5)(x+x3)-(-x-x-3)

(6)(x+x2+x3)+0

三、实验内容

主要算法设计

typedefstructNode

{

floatcoef;

intindex;

structNode*next;

}LinkList;

本程序涉及到多项式的建立、多项式的输出、两个多项式的相加减。

用带头结点的单链表存储多项式;

程序中共定义了5个函数:

voidInsert(LinkList*p,LinkList*h)//把节点p插入到链表h中

LinkList*Creat_L(LinkList*head,intm)//创建一个链表,项数为m

voidPrintf(LinkList*L)

LinkList*ADDlist(LinkList*head,LinkList*pb)

LinkList*MinusList(LinkList*head,LinkList*pb)

四、程序源代码

#include

#include

#include

#include

typedefstructNode

{

floatcoef;

intindex;

structNode*next;

}LinkList;

voidInsert(LinkList*p,LinkList*h)//把节点p插入到链表h中

{

LinkList*q1,*q2;

intflag=0;

q1=h;

if(p->coef==0)

free(p);

else

{

if(q1->next==NULL)

{

q1->next=p;

}

else

{

q2=q1->next;

while(flag==0)

{

if(p->indexindex)

{

if(q2->next==NULL)

{

q2->next=p;

flag=1;

}

else

{

q1=q2;

q2=q2->next;

}

}

else

if(p->index>q2->index)

{

p->next=q2;

q1->next=p;

flag=1;

}

else

{

q2->coef=p->coef+q2->coef;

if(q2->coef==0)

{

q1->next=q2->next;

free(q2);

}

flag=1;

free(p);

}

}

}

}

}

LinkList*Creat_L(LinkList*head,intm)//创建一个链表,项数为m

{

inti;

LinkList*q;

head=(LinkList*)malloc(sizeof(LinkList));

head->next=NULL;

for(i=1;i<=m;i++)

{

q=(LinkList*)malloc(sizeof(LinkList));

q->next=NULL;

printf("请输入第%d项的系数和指数:

",i);

scanf("%f,%d",&q->coef,&q->index);

Insert(q,head);

}

returnhead;

}

voidPrintf(LinkList*L)

{

LinkList*p,*q,*pa;

inti=0;

p=L->next;

q=L->next;

if(p==NULL)

{

printf("0\n");

return;

}

while(p)

{

p=p->next;

i++;

}

printf("%d,",i);

while(q)

{

printf("%g,",q->coef);

printf("%d,",q->index);

q=q->next;

}

}

LinkList*ADDlist(LinkList*head,LinkList*pb)

{

LinkList*pc;

intflag=0;

while(flag==0)

{

if(pb->next==NULL)

flag=1;

else

{

pb=pb->next;

pc=(LinkList*)malloc(sizeof(LinkList));

pc->coef=pb->coef;

pc->index=pb->index;

pc->next=NULL;

Insert(pc,head);

}

}

returnhead;

}

LinkList*MinusList(LinkList*head,LinkList*pb)

{

LinkList*pc;

intflag=0;

while(flag==0)

{

if(pb->next==NULL)

flag=1;

else

{

pb=pb->next;

pc=(LinkList*)malloc(sizeof(LinkList));

pc->coef=-pb->coef;

pc->index=pb->index;

pc->next=NULL;

Insert(pc,head);

}

}

returnhead;

}

voidmain()

{

inti,m,n;

LinkList*pa=0,*pb=0,*pc;

while

(1)

{

system("cls");

printf("................欢迎使用一元稀疏多项式计算器..............\n");

printf("请输入多项式a的项数:

");

scanf("%d",&m);

pa=Creat_L(pa,m);

printf("请输入多项式b的项数:

");

scanf("%d",&n);

pb=Creat_L(pb,n);

printf("................欢迎使用一元稀疏多项式计算器..............\n");

printf("0.退出系统\n");

printf("1.输出多项式a\n");

printf("2.输出多项式b\n");

printf("3.输出多项式a+b\n");

printf("4.输出多项式a-b\n");

while

(1)

{

printf("\n请选择操作:

");

scanf("%d",&i);

switch(i)

{

case0:

return;

case1:

{

printf("输出多项式a的整数序列为:

");

Printf(pa);

break;

}

case2:

{

printf("输出多项式b的整数序列为:

");

Printf(pb);

break;

}

case3:

{

pc=ADDlist(pa,pb);

printf("输出多项式a+b的整数序列为:

");

Printf(pc);

break;

}

case4:

{

pc=MinusList(pa,pb);

printf("输出多项式a-b的整数序列为:

");

Printf(pc);

break;

}

default:

printf("\n输入有误,请重新输入:

\n");

}

}

}

}

五、运行结果

六、小结(不少于100字)

虽然数据结构是一门公认的比较难的课程,自己学起来也觉得有些吃力,但在本次课程设计之前,我系统地把教科书复习了一遍,大大加深了对各种数据结构的理解,运用起来更加自如。

不断地翻阅各种参考书,以及在老师和同学的帮助下,基本上考虑到了所有的边界情况,反复测试各种类型的数据,强化程序的健壮性,最终顺利完成了本次课程设计。

虽然课程设计做的不够完善,但在设计的过程中受益匪浅,通过查资料等学到了很多以前不知道或不太会应用的知识,对单向链表的使用有了更深刻的了解和掌握,因为多项式的计算要求用单向链表来实现,所以在做课程设计之前通过网上找资料,查参考书及问辅导老师等对单向链表的使用比以前掌握的更加到位,并且能够灵活运用,通篇几乎用的都是单向链表,这是受益的一大重点。

 

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

当前位置:首页 > 求职职场 > 简历

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

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