数据结构课程设计一元稀疏多项式计算器.docx
- 文档编号:7159062
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:5
- 大小:17.73KB
数据结构课程设计一元稀疏多项式计算器.docx
《数据结构课程设计一元稀疏多项式计算器.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计一元稀疏多项式计算器.docx(5页珍藏版)》请在冰豆网上搜索。
数据结构课程设计一元稀疏多项式计算器
实习报告:
题一元稀疏多项式计算器
实习报告题目:
设计一个一元稀疏多项式简单计算器班级:
计科一班姓名:
康宇学号:
10061014完成日期:
一、需求分析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处的值;
16〕求多项式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利用链表实现队列的构造。
每次输入一项的系数和指数,可以输出构造的一元多项式演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息〞之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据〔滤去输入中的非法字符〕建立的多项式以及多项式相加的运行结果在屏幕上显示。
、元素类型、结点类型和指针类型:
typedefstruct
LNode
{
floatxishu;intzhishu;
////
系数指数
struct
LNode*next;
}LNode,*Linklist;、建立两个全局链表指针,LinklistList1=NULL;LinklistList2=NULL;用来存放两个多项式,然后在main〔〕函数里调用输入函数。
、本程序包括7个模块〕主程序:
Voidmain(){While
(1){输出菜单;接受命令;处理命令;If〔命令==退出〕那么程序退出;}释放链表;}〕输入函数:
VoidInput(){调用插值函数In〔List1〕处理链表一;调用插值函数In〔List2〕处理链表二;}输出函数:
VoidOutput(){调用输值函数Out〔List1〕处理链表一;调用输值函数Out〔List2〕处理链表一;}4〕相加函数:
VoidAdd(){
if(List1节点指数>List2节点指数)输出List1节点;指针后移;elseif(List1节点指数 ) else输出两节点相加后的值;两链表指针都后移; if(链表1到头)输出链表2剩余的节点;else(即链表二到头)输出链表1剩余的节点;}〕相减函数: VoidSub(){if(List1节点指数>List2节点指数) 输出List1节点;指针后移;elseif(List1节点指数 ) Else两链表指针都后移;if(链表1到头)输出链表2剩余的节点;else(即链表二到头)输出链表1剩余的节点;}〕求值函数: voidCalc(){输入x的值;依次调用链表一的节点,求出单项式的值相加后输出;}7〕求导函数: voidDaohanshu(){输出多项式一的导函数;}三、详细设计#include 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)//按指数由大到小输出{%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){ %3dp1=p1->next; ",p1->xishu,p1->zhishu); }elseif(p1->zhishu { %3dp2=p2->next; ",p2->xishu,p2->zhishu); }else{ %3dp1=p1->next;p2=p2->next; ",p1->xishu+p2->xishu,p1->zhishu); }}if(p1==NULL){while(p2){ %3dp2=p2->next; ",p2->xishu,p2->zhishu); }}else{while(p1){ %3dp1=p1->next; ",p1->xishu,p1->zhishu); }}printf("\n"); }voidSub(){Linklistp1,p2;p1=List1->next;p2=List2->next;printf("相减后的多项式为: \n");while(p1&&p2){if(p1->zhishu>p2->zhishu){ %3dp1=p1->next; ",p1->xishu,p1->zhishu); }elseif(p1->zhishu { %3dp2=p2->next; ",-p2->xishu,p2->zhishu); }else{if(p1->xishu-p2->xishu! =0){%3d",p1->xishu-p2->xishu,p1->zhishu);}p1=p1->next;p2=p2->next;}}if(p1==NULL){while(p2){%3d",-p2->xishu,p2->zhishu);p2=p2->next;}}else{while(p1){ %3dp1=p1->next; ",p1->xishu,p1->zhishu); }}printf("\n"); }voidCalc(){intx;doublesum=0;Linklistp;printf("请输入x的值: ");scanf("%d",&x);p=List1->next;while(p){ sum+=p->xishu*pow(x,p->zhishu);p=p->next;}printf("多项式1在x处的值为: %0.1lf",sum);printf("\n");}voidDaohanshu(){Linklistp;p=List1->next;printf("多项式1的导函数为: \n");while(p){%3d",p->xishu*p->zhishu,p->zhishu-1);p=p->next;}printf("\n");}intmain(){intnum;while (1){printf("-----------------------------------------------\n");printf("1-------输入并建立多项式;\n");printf("2-------输出其指系数排列;\n");printf("3-------多项式相加;\n");printf("4-------多项式相减;\n");printf("5-------计算多项式在x处的值;\n");printf("6-------求多项式a的导函数a';\n");printf("0-------退出\n");printf("-----------------------------------------------\n");printf("请输入您要选择的功能: ");scanf("%d",&num);switch(num){case1: Input();break;//输入函数case2: Output();break;//输出函数case3: Add();break;//函数相加case4: Sub();break;//函数相减case5: Calc();break;//计算函数在x处的值case6: Daohanshu();break;//求函数的导函数 case0: exit (1);default: printf("输入错误,请重新输入! ! ! ");}}free(List1);free(List2);return0;}四、调试分析由于链表是设置成为全局变量,所以任意函数都可以修改它,存在一定风险性。 但这也为后来的函数方便了,所有的函数统一没有参数。 刚开始时曾忽略了一些变量的类型以及没有考虑到指针的返回问题,使调试程序浪费了一定的时间。 今后应重视确定参数的变量和赋值属性的区分和标识。 本程序模块简洁,在main()函数里得到充分表达;链表默认用户输入是按指数从小到大的顺序输入的,而默认输出时按指数从大到小;输入时,依次把节点插在链表的末端。 五、用户手册1.本程序运行环境为Windows操作系统,执行文件为: 进入演示程序后显示的界面: 六、测试结果 中南民族大学数据结构课程设计报告 姓 名: 康宇 年 级: 2021 学 号: 10061014 专 业: 计算机科学与技术 指导老师: 宋中山
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 一元 稀疏 多项式 计算器