数据结构课程设计(一元稀疏多项式计算器).doc
- 文档编号:1643467
- 上传时间:2022-10-23
- 格式:DOC
- 页数:11
- 大小:120KB
数据结构课程设计(一元稀疏多项式计算器).doc
《数据结构课程设计(一元稀疏多项式计算器).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计(一元稀疏多项式计算器).doc(11页珍藏版)》请在冰豆网上搜索。
实习报告:
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->zhishu { 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->zhishu { 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 一元 稀疏 多项式 计算器