收藏 分销(赏)

一元稀疏多项式计算器.doc

上传人:天**** 文档编号:2159537 上传时间:2024-05-21 格式:DOC 页数:26 大小:287.50KB 下载积分:10 金币
下载 相关 举报
一元稀疏多项式计算器.doc_第1页
第1页 / 共26页
一元稀疏多项式计算器.doc_第2页
第2页 / 共26页


点击查看更多>>
资源描述
云南大学软件学院 数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助) 实验难度: A □ B □ C □ 序号 学号 姓名 成绩 1 20111120 2 20111120 指导教师: (签名) 学  期:  2012秋季学期 任课教师:    实验题目: 一元稀疏多项式计算器 小 组 长:      联系电话:   电子邮件:   完成提交时间:2012 年 11 月 10 日   云南大学软件学院2012学年 秋季 学期 《数据结构实验》成绩考核表 学号: 20111120 姓名: 本人承担角色: 算法设计 整体流程控制 评分项目 评分指标 分值 得分 实验构思(10%) 1. 实验目的明确 5 2. 实验内容理解透彻、对实验所涉及到的知识点分析到位 5 实验设计(15%) 1. 有对基本数据结构的抽象数据类型定义 5 2. 实验方案设计完整,数据结构、算法选择合理 5 3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图 5 实验实现(25%) 1. 代码编写规范、风格统一、注释清楚易读 5 2. 程序运行正常,测试结果正确 15 3. 界面友好、易于操作、有较强的容错性 5 实验报告撰写(10%) 1. 内容详实无缺漏,文字流畅、图表清楚 5 2. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考 5 个人工作量(30%) 1. 个人完成工作量 15 2. 个人技术水平 10 3. 团队合作精神 5 实验运作(10%) 1. 有一定用户群 5 2. 应用前景分析 5 综合得分: (满分100分) 指导教师: 年 月 日 云南大学软件学院2010学年 秋季 学期 《数据结构实验》成绩考核表 学号: 20111120 姓名: 本人承担角色: 函数实现 整体流程控制 评分项目 评分指标 分值 得分 实验构思(10%) 1. 实验目的明确 5 2. 实验内容理解透彻、对实验所涉及到的知识点分析到位 5 实验设计(15%) 1. 有对基本数据结构的抽象数据类型定义 5 2. 实验方案设计完整,数据结构、算法选择合理 5 3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图 5 实验实现(25%) 1. 代码编写规范、风格统一、注释清楚易读 5 2. 程序运行正常,测试结果正确 15 3. 界面友好、易于操作、有较强的容错性 5 实验报告撰写(10%) 1. 内容详实无缺漏,文字流畅、图表清楚 5 2. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考 5 个人工作量(30%) 1. 个人完成工作量 15 2. 个人技术水平 10 3. 团队合作精神 5 实验运作(10%) 1. 有一定用户群 5 2. 应用前景分析 5 综合得分: (满分100分) 指导教师: 年 月 日 (下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分) 一、【实验构思(Conceive)】(10%) 多项式计算器的呈现方式是用控制台程序呈现,;多项式的加减乘以及求导的函数中利用链表保存头结点以及循环结构保存和输出数据;还有利用一个简单的降序排列的函数,在输出时更加明了。 二、【实验设计(Design)】(20%) 在头文件中申明变量,源文件中创建指数和系数的指针的头结点,并为此申请空间。首先考虑指数为0,1和系数为0,1时的特殊情况的表示;然后利用SORT函数对输出时进行降序排列;其次就是加减乘以及求导函数的实现;最后是一个输出界面的设计。 三、【实现描述(Implement)】(30%) //--------函数原型说明-------- typedef struct Node { double xishu; int zhishu;//数据域 //int data; struct Node* pnext;//指针域 }Node,*pNode; pNode phead=(pNode)malloc(sizeof(Node));//创建头节点 pNode creat_list(void);创建链表 void traverse_list(pNode phead);//遍历链表 pNode sort(pNode phead);//对链表进行降序排列 pNode add(pNode phead1,pNode phead2);//两个多项式相加 pNode hebing(pNode phead)//合并同类项 pNode multi(pNode phead1,pNode phead2);//多项式相乘 pNode sub(pNode phead1,pNode phead2);//多项式相减 //多项式求导没有声明和定义函数,而是直接卸载程序里了 //------关键操作的实现------- 1.对链表的声明和定义和对创建函数的定义。 #include "stdafx.h" #include "cpxNum.h" typedef struct Node { double xishu; int zhishu;//数据域 //int data; struct Node* pnext;//指针域 }Node,*pNode; pNode creat_list(void) { int len; int i; //int val; int zhishu; double xishu; pNode phead=(pNode)malloc(sizeof(Node));//分配了一个不存在有效数据的头结点 pNode ptail=phead; ptail->pnext=NULL; if(phead==NULL) { cout<<"分配失败<<endl; exit(-1); } cout<<"请输入想输入多项式的项数"<<endl; cin>>len; for(i=0;i<len;i++) { cout<<"请?输º?入¨?第̨²"<<i+1<<"个?项?的Ì?系¦Ì数ºy的Ì?值¦Ì"<<endl; cin>>xishu; cout<<"请?输º?入¨?第̨²"<<i+1<<"个?项?的Ì?指?数ºy的Ì?值¦Ì"<<endl; cin>>zhishu; pNode pnew=(pNode)malloc(sizeof(Node)); if(pnew==NULL) { cout<<"分¤?配?失º¡ì败㨹"<<endl; exit(-1); } pnew->xishu=xishu; pnew->zhishu=zhishu; ptail->pnext=pnew; pnew->pnext=NULL; ptail=pnew; } phead->zhishu=len; return phead; } 2.对多项式遍历,排序,同类项合并的定义 1. 多项式的遍历 //将多项式分为第一项和其余项两部分考虑,另外考虑指数=0,指数=1,系数=1,系数=0等情况。 void traverse_list(pNode phead) { pNode p=phead->pnext; if(p->zhishu==0) cout<<p->xishu; else{ if(p->zhishu==1) cout<<"("<<p->xishu<<")"<<"x"; else{ if(p->xishu==1) cout<<"x"<<"^"<<p->zhishu; else {if(p->xishu==0) cout<<"0"; else cout<<"("<<p->xishu<<")"<<"x"<<"^"<<p->zhishu; } } } p=p->pnext; while(p) { if(p->zhishu==0) cout<<"+"<<p->xishu; else{ if(p->zhishu==1) cout<<"x+"<<"("<<p->xishu<<")"; else{ if(p->xishu==1) cout<<"+"<<"x"<<"^"<<p->zhishu; else {if(p->xishu==0) cout<<"+0"; else cout<<"+"<<"("<<p->xishu<<")"<<"x"<<"^"<<p->zhishu; } } } p=p->pnext; } cout<<endl; return; } 2. 排序操作。 //通过冒泡排序对多项式进行降序排列。 pNode sort(pNode phead) { int i,j; float xishu; int zhishu; pNode p,q,f; f=phead; int len=phead->zhishu; for(i=0,p=phead->pnext;i<len-1;i++,p=p->pnext) { for(j=i+1,q=p->pnext;j<len;j++,q=q->pnext) { if(p->zhishu<q->zhishu) { xishu=p->xishu; zhishu=p->zhishu ; p->xishu=q->xishu; p->zhishu=q->zhishu; q->xishu=xishu; q->zhishu=zhishu; } } } return f; } 3. 合并排序 //通过检查将同类型合并,在加法,减法和乘法函数中会用到 pNode hebing(pNode phead) { pNode r,q,p,Q; for(q=phead->pnext;q!=NULL;q=q->pnext)//合?并¡é同ª?类¤¨¤项? for(p=q->pnext,r=q;p!=NULL;) if(q->zhishu==p->zhishu)//指?数ºy相¨¤等̨¨ 系¦Ì数ºy相¨¤加¨® { q->xishu=q->xishu+p->xishu; r->pnext=p->pnext; Q=p;p=p->pnext; delete Q;//释º¨ª放¤?p } else { r=r->pnext; p=p->pnext; } return phead; } 3.多项式的加,减,乘,求导,x代入值的实现 1. 多项式的加法 //创建一个新链表存储新的多项式,开始对phead1和phead2进行扫描,指数相同就相加。 pNode add(pNode phead1,pNode phead2) { pNode p1,p2,pTail,pnew; pNode phead3=(pNode)malloc(sizeof(Node)); pTail=phead3; pTail->pnext=NULL; sort(phead1); sort(phead2); p1=phead1->pnext; p2=phead2->pnext; int i=0; while(p1&&p2) { if(p1->zhishu>=p2->zhishu) { if(p1->zhishu==p2->zhishu) { pnew=new Node; pnew->xishu=p1->xishu+p2->xishu; pnew ->zhishu=p1->zhishu; pTail->pnext=pnew; pnew->pnext=NULL; pTail=pnew; p1=p1->pnext; p2=p2->pnext; } else { pnew=new Node; pnew->xishu=p1->xishu; pnew ->zhishu=p1->zhishu; pTail->pnext=pnew; pnew->pnext=NULL; pTail=pnew; p1=p1->pnext; } } else { pnew=new Node; pnew->xishu=p2->xishu; pnew ->zhishu=p2->zhishu; pTail->pnext=pnew; pnew->pnext=NULL; pTail=pnew; p2=p2->pnext; } } if(p1==NULL) { pTail->pnext=p2; } if(p2==NULL) pTail->pnext=p1; return phead3; } 2. 多项式的减法 //道理与多项式加法相同,但是指数相同时,系数相减。 pNode sub(pNode phead1,pNode phead2)//减?法¤¡§函¡¥数ºy { pNode p1,p2,pTail,pnew; pNode phead3=(pNode)malloc(sizeof(Node)); pTail=phead3; pTail->pnext=NULL; sort(phead1); sort(phead2); p1=phead1->pnext; p2=phead2->pnext; while(p1&&p2) { if(p1->zhishu>=p2->zhishu) { if(p1->zhishu==p2->zhishu) { pnew=new Node; pnew->xishu=p1->xishu-p2->xishu; pnew ->zhishu=p1->zhishu; pTail->pnext=pnew; pnew->pnext=NULL; pTail=pnew; p1=p1->pnext; p2=p2->pnext; } else { pnew=new Node; pnew->xishu=p1->xishu; pnew ->zhishu=p1->zhishu; pTail->pnext=pnew; pnew->pnext=NULL; pTail=pnew; p1=p1->pnext; } } else { pnew=new Node; pnew->xishu=-(p2->xishu); pnew ->zhishu=p2->zhishu; pTail->pnext=pnew; pnew->pnext=NULL; pTail=pnew; p2=p2->pnext; } } if(p1==NULL) { pTail->pnext=p2; } if(p2==NULL) pTail->pnext=p1; return phead3; } 3. 多项式乘法 //相当于加法的多次操作。进行嵌套循环解决此问题 pNode multi(pNode phead1,pNode phead2)//乘?法¤¡§函¡¥数ºy { int i,j;//i,j分¤?别Àe保À¡ê存ä?了¢?两¢?个?链¢¡ä表À¨ª的Ì?长¡è度¨¨ pNode p1,p2,pTail; pNode phead3=(pNode)malloc(sizeof(Node)); pTail=phead3; pTail->pnext=NULL; p1=phead1->pnext; while(p1){ p2=phead2->pnext; while(p2){ pNode q=(pNode)malloc(sizeof(Node)); q->xishu=p1->xishu*p2->xishu; q->zhishu=p1->zhishu+p2->zhishu; q->pnext=phead3->pnext; phead3->pnext=q; phead3=q; p2=p2->pnext; } p1=p1->pnext; } return pTail; } 4. 多项式求导 //不停扫描多项式,对其进行求导运算,直至p=NULL phead=creat_list(); p=phead->pnext; while(p!=NULL) { p->xishu=p->xishu*p->zhishu; p->zhishu=p->zhishu-1; p=p->pnext; } 5. x赋值求结果。 p=phead1->pnext; cout<<"请?输º?入¨?x的Ì?值¦Ì"<<endl; cin>>x; sum=0.0; y=1.0; while(p) { for(;p->zhishu>0;p->zhishu--) { y=y*x; } sum=sum+y*(p->xishu); p=p->pnext; y=1.0; } cout<<"结¨¢果?值¦Ì为a"<<endl; cout<<sum; 四、【测试结果(Testing)】(10%) 加法测试: 正确 减法测试: 正确 乘法测试: 正确 求导测试: 正确 四、【实验总结】(10%) (本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得) 1. 实验时,一个小组的同学应该由一人操作,其他人一起来写程序,这样可以避免由于不同的同学的编程风格的差异而导致一些很难发现的错误,从而浪费很多不必要的时间 2. 实验之前一定要想好算法,不要盲目的直接就敲程序,这样不仅会使效率低下还会使程序极易出现难以察觉的逻辑错误,最好在敲程序之前画流程图将算法分析清楚,确保无误后再敲程序 3. 同学间的交流很重要,不同小组的同学也应该多交流,这样不仅可以大家之间互相取长补短,共同进步,还可以避免很多错误的出现 五、【项目运作描述(Operate)】(10%) (本部分应包括:项目的成本效益分析,应用效果等的分析。) 这个实验花时间比较长,在做实验的过程中我们也遇到了很多困难,为一个bug而纠结了很久,但是通过和同学的交流讨论,我们发现并解决了问题。在克服困难的过程中,我们学到了很多的东西,也积累了很多的经验,可以为以后的学习和实验中打下基础。我们的程序基本实现了实验指导上的要求,但是对于健壮性的考虑还不够,我们一定会在以后的实验中,好好努力,尽最大的努力将程序完善 六、【代码】(10%) (本部分应包括:完整的代码及充分的注释。 注意纸质的实验报告无需包括此部分。格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五) int main() { int choose; double x,sum,y; pNode phead1=NULL; pNode phead2=NULL; pNode p,p2,phead,phead3=NULL; //pNode creat_list(void); cout<<"********************************************************************************"<<endl; cout<<" 欢?迎®-使º1用®?我¨°们?的Ì?多¨¤项?式º?计?算?器¡Â "<<endl; cout<<" 请?选?择?你?想?要°a的Ì?操¨´作Á¡Â "<<endl; cout<<" 1.加¨®法¤¡§运?算? 2.减?法¤¡§运?算? "<<endl; cout<<" 3.乘?法¤¡§运?算? 4.求¨®导Ì?运?算? "<<endl; cin>>choose; switch(choose) { case 1: phead1=creat_list(); //phead2=creat_list(); sort(phead1); phead2=creat_list(); sort(phead2); cout<<"整?理¤¨ª后¨®的Ì?第̨²一°?个?多¨¤项?式º?:êo"<<endl; traverse_list(phead1); cout<<"整?理¤¨ª后¨®的Ì?第̨²二t个?多¨¤项?式º?:êo"<<endl; traverse_list(phead2); //add(phead1,phead2); phead1=add(phead1,phead2); //sort(phead1); phead1= hebing(phead1); cout<<"最Á?终?的Ì?结¨¢果?:êo"<<endl; traverse_list(phead1); break; case 2: phead1=creat_list(); //phead2=creat_list(); sort(phead1); phead2=creat_list(); sort(phead2); cout<<"整?理¤¨ª后¨®的Ì?第̨²一°?个?多¨¤项?式º?:êo"<<endl; traverse_list(phead1); cout<<"整?理¤¨ª后¨®的Ì?第̨²二t个?多¨¤项?式º?:êo"<<endl; traverse_list(phead2); phead1=sub(phead1,phead2); phead1= hebing(phead1); cout<<"最Á?终?的Ì?结¨¢果?:êo"<<endl; traverse_list(phead1); break; case 3: phead1=creat_list(); //phead2=creat_list(); sort(phead1); phead2=creat_list(); sort(phead2); cout<<"整?理¤¨ª后¨®的Ì?第̨²一°?个?多¨¤项?式º?:êo"<<endl; traverse_list(phead1); cout<<"整?理¤¨ª后¨®的Ì?第̨²二t个?多¨¤项?式º?:êo"<<endl; traverse_list(phead2); phead1=multi(phead1,phead2); phead1= hebing(phead1); cout<<"最Á?终?的Ì?结¨¢果?:êo"<<endl; traverse_list(phead1); break; case 4: phead1=creat_list(); p=phead1->pnext; cout<<"您¨²输º?入¨?的Ì?是º?:êo"<<endl; traverse_list(phead1); while(p!=NULL) { p->xishu=p->xishu*p->zhishu; p->zhishu=p->zhishu-1; p=p->pnext; } cout<<"最Á?终?的Ì?结¨¢果?:êo"<<endl; traverse_list(phead1); break; default: cout<<"输º?入¨?错䨪误¨®!ê?"<<endl; break; } p=phead1->pnext; cout<<"请?输º?入¨?x的Ì?值¦Ì"<<endl; cin>>x; sum=0.0; y=1.0; while(p) { for(;p->zhishu>0;p->zhishu--) { y=y*x; } sum=sum+y*(p->xishu); p=p->pnext; y=1.0; } cout<<"结¨¢果?值¦Ì为a"<<endl; cout<<sum; return 0; } 目 录 第一章 项目的意义和必要性 1 1.1 项目名称及承办单位 1 1.2 项目编制的依据 1 1.3 肺宁系列产品的国内外现状 2 1.4产业关联度分析 3 1.5项目的市场分析 4 第二章 项目前期的技术基础 8 2.1成果来源及知识产权情况,已完成的研发工作 8 2.3产品临床试验的安全性和有效性 8 第三章 建设方案 23 3.1建设规模 23 3.2 建设内容 23 3.3产品工艺技术 23 3.5产品质量标准 29 3.6 土建工程 37 3.7 主要技术经济指标 39 第四章 建设内容、地点 41 4.1 建设内容及建设规模 41 4.2 建设地点 41 4.3外部配套情况 44 第五章 环境保护、消防、节能 46 5.1 环境保护 46 5.2消防 49 5.3节能 50 第六章 原材料供应及外部配套条件落实情况 52 6.1主要原辅材料、燃料、动力消耗指标 52 6.2 公用工程 54 第七章 建设工期和进度安排 56 7.1建设工期和进度安排 56 7.2建设期管理 56 第八章 项目承担单位或项目法人所有制性质及概况 57 8.1 项目承担单位概况 57 8.2 企业财务经济状况 58 8.3 项目负责人基本情况 59 第九章 投资估算与资金筹措 62 9.1 项目计算期 62 9.2 投资估算的编制依据及参数 62 9.3 投资估算 62 9.4 资金筹措 64 9.5 贷款偿还 64 第十章 财务评价 65 10.1财务评价依据 65 10.2销售收入和销售税金及附加估算 65 10.3利润总额及分配 66 10.4盈利能力分析 66 10.5不确定分析 66 10.6财务评价结论 68 第十一章 项目风险分析,效益分析 69 11.1 风险分析 69 11.2 效益分析 70
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服