实验报告2一元稀疏多项式计算器.docx
- 文档编号:6195187
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:44.43KB
实验报告2一元稀疏多项式计算器.docx
《实验报告2一元稀疏多项式计算器.docx》由会员分享,可在线阅读,更多相关《实验报告2一元稀疏多项式计算器.docx(12页珍藏版)》请在冰豆网上搜索。
实验报告2一元稀疏多项式计算器
华北水利水电学院一元稀疏多项式计算器实验报告
2010〜2011学年第一学期09级计算机科学与技术专业
班级:
2009119学号:
200911902姓名:
万婷婷
一、实验目的
设计一个医院稀疏多项式简单计算器
熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用
二、实验要求
a)输入并建立多项式
b)输出多项式,输出形式为整数序列:
n,C1,e1,C2,e2cn,en,其中n是多
项式的项数,g,ei分别为第i项的系数和指数。
序列按指数降序排列。
c)多项式a和b相加,建立多项式a+b,输出相加的多项式。
d)多项式a和b相减,建立多项式a-b,输出相减的多项式。
用带表头结点的单链表存储多项式。
测试数据:
(1)(2x+5x8-3.1x、+(7-5x8+11x9)
(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)
2345、z34、
(3)(1+x+x+x+x+x)+(-x-x)
(4)(x+x2+x3)+0
(5)(x+x3)-(-x-x-3)
⑹(x+x2+x3)+0
三、实验内容
主要算法设计
typedefstructNode
{
floatcoef;
intindex;
structNode*next;
}LinkList;
本程序涉及到多项式的建立、多项式的输出、两个多项式的相加减。
用带头结点的单链表存储多项式;
程序中共定义了5个函数:
voidInsert(LinkList*p,LinkList*h)〃把节点p插入到链表h中
LinkList*Creat_L(LinkList*head,intm)//创建一个链表,项数为
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->index
{
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)//创建一个链表,项数为
{
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("请输入第%项的系数和指数:
",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)
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");
}
}
}
}
五、运行结果
俞入第3项的系数和
■'M
俞入第3项的系数丰
欢
0•退岀系绕
丄-麵出多项式’
2•输岀萎项孟b项式zb
4-输出多顶式vh
Hlrl斗冃土冃H
主冃主冃斗冃主
2,1
5,B-3.1,11
项式b的项数;37,0-5.8ffl-ltb疏多项式计算器
3
»■快I列歹序序1数2数弓整t(展lt4L2^^bm、」丄-TrJ二上M?
E--uMr.选项选项选现岀岀岀4-.冷丄#-W
3
nV为===*
2,1
7,
请输更入塾项更蠢製扌吐亟人第2项更薑癒吋备入第咗项的系数却1逼△鄴项翌謎I诰倉△第2项更舍魅吐亟人>项聶入第4项的系数稲
e.iStE缰遥鬆b3■轨岀參项式”h4-输岀多项式才h
6,-3-1,14.4,2施貓禽项数.4
—fc,_3
5-4,2
1,2
7.8,15
用一元稀疏多项式计算器
式n
7・;u\lrJ二上M7」二LSM
选项选项选项
岀出
输
鲁尊喩序列为:
4,-1.2,9,4.4,2.-1,1,6,-3,bg漕薮序列为;3,7.8,15,4-4,2,-6,-3,
-bffiffi数序列为I4,-7.«,15,-1-2,9,-1,1.12,
4
选择操作I丄黠器彎序列知新唧會序列为匸项矗整数序列为
1,5,1,4,1,3,1,2,1
-1,4,-1,3,
4丄弓丄2丄
4市」元--
&a
DnunuDQQ41nuD^l一工=工-J-J请籐欢充项顶聲
b3
234■
1i11-
■数数数数数数系系系系系系-£nJ&MJ&M项项项项项项
123456
第第第第第第
人人入人人入
砒多多多多垢出岀出岀MU」刖」刖心刖□RX4zoxax5—■V區■-1234
输岀
输岀
输出
ru|
俞入第玄项的系数和|巨
』入蔓丄项範泰鑒护扌
俞入第2项的系数*时欢迎
孔退出系统
1•输岀多项式换
氛揄出多项式“h
4•输岀多项式a-h
丁er・Q一制?
J二丄勺7」・1丄N选顶选项选项岀岀出■■-^T.■■■ils^mils!
4#+nr
请选择操作:
■:
穗疏艺映式计算器项式曲项数;2
1,1
1,100
项式h的项纵2
1,100
输岀多项[主「
输出畧顶请笑
S'*T亠
I
i
1,200
请给入第?
项的系数削…廿亠一
二•欢迎使用一元稀疏多项式计算器臥退岀系统
』•输出寻项J&^+b
4■输岀多项式社-h
请选扌羊操作;1j'p员我站僭数序列为:
2,1,100,1,1,盟肩麗落薮序JII为.2,1,200,1,100,输出姜顶蔻讪掘数序列为:
3,1,2«0.2,100,1,1,请选择操朮1
拥岀
输出
输岀富卿数序列知——
六、小结(不少于100字)
虽然数据结构是一门公认的比较难的课程,自己学起来也觉得有些吃力,
但在本次课程设计之前,我系统地把教科书复习了一遍,大大加深了对各种数据结构的理解,运用起来更加自如。
不断地翻阅各种参考书,以及在老师和同学的帮助下,基本上考虑到了所有的边界情况,反复测试各种类型的数据,强化程序的健壮性,最终顺利完成了本次课程设计。
虽然课程设计做的不够完善,但在设计的过程中受益匪浅,通过查资料等学到了很多以前不知道或不太会应用的知识,对单向链表的使用有了更深刻的了解和掌握,因为多项式的计算要求用单向链表来实现,所以在做课程设计之前通过网上找资料,查参考书及问辅导老师等对单向链表的使用比以前掌握的更加到位,并且能够灵活运用,通篇几乎用的都是单向链表,这是受益的一大重点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 一元 稀疏 多项式 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)