1、 云南大学软件学院 数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助) 实验难度: A □ B □ C □ 序号 学号 姓名 成绩 1 20111120 2 20111120 指导教师: (签名) 学 期: 2012秋季学期 任课教师: 实验题目: 一元稀疏多项式计算器 小 组 长:
2、 联系电话: 电子邮件: 完成提交时间:2012 年 11 月 10 日 云南大学软件学院2012学年 秋季 学期 《数据结构实验》成绩考核表 学号: 20111120 姓名: 本人承担角色: 算法设计 整体流程控制 评分项目 评分指标 分值 得分 实验构思(10%) 1. 实验目的明确 5 2. 实验内容理解透彻、对实验所涉及到的知识点分析到位 5 实验设计(15%) 1. 有对基本数据结构的抽象数据类型定义 5
3、 2. 实验方案设计完整,数据结构、算法选择合理 5 3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图 5 实验实现(25%) 1. 代码编写规范、风格统一、注释清楚易读 5 2. 程序运行正常,测试结果正确 15 3. 界面友好、易于操作、有较强的容错性 5 实验报告撰写(10%) 1. 内容详实无缺漏,文字流畅、图表清楚 5 2. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考 5 个人工作量(30%) 1. 个人完成工作量 15 2. 个人技术水平 10 3.
4、团队合作精神 5 实验运作(10%) 1. 有一定用户群 5 2. 应用前景分析 5 综合得分: (满分100分) 指导教师: 年 月 日 云南大学软件学院2010学年 秋季 学期 《数据结构实验》成绩考核表 学号: 20111120 姓名: 本人承担角色: 函数实现 整体流程控制 评分项目 评分指标 分值 得分 实验构思(10%) 1. 实验目的明确 5 2. 实验内容理解透彻、对实验所涉及到
5、的知识点分析到位 5 实验设计(15%) 1. 有对基本数据结构的抽象数据类型定义 5 2. 实验方案设计完整,数据结构、算法选择合理 5 3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图 5 实验实现(25%) 1. 代码编写规范、风格统一、注释清楚易读 5 2. 程序运行正常,测试结果正确 15 3. 界面友好、易于操作、有较强的容错性 5 实验报告撰写(10%) 1. 内容详实无缺漏,文字流畅、图表清楚 5 2. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考 5
6、 个人工作量(30%) 1. 个人完成工作量 15 2. 个人技术水平 10 3. 团队合作精神 5 实验运作(10%) 1. 有一定用户群 5 2. 应用前景分析 5 综合得分: (满分100分) 指导教师: 年 月 日 (下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分) 一、【实验构思(Conceive)】(10%)
7、 多项式计算器的呈现方式是用控制台程序呈现,;多项式的加减乘以及求导的函数中利用链表保存头结点以及循环结构保存和输出数据;还有利用一个简单的降序排列的函数,在输出时更加明了。 二、【实验设计(Design)】(20%) 在头文件中申明变量,源文件中创建指数和系数的指针的头结点,并为此申请空间。首先考虑指数为0,1和系数为0,1时的特殊情况的表示;然后利用SORT函数对输出时进行降序排列;其次就是加减乘以及求导函数的实现;最后是一个输出界面的设计。 三、【实现描述(Implement)】(30%) //--------函数原型说明-------- typedef struct Node
8、 { 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);//两个多项式相加
9、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
10、//数据域
//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<<"分配失败< 11、
exit(-1);
}
cout<<"请输入想输入多项式的项数"< 12、
cout<<"分¤?配?失º¡ì败㨹"< 13、raverse_list(pNode phead)
{
pNode p=phead->pnext;
if(p->zhishu==0)
cout< 14、 else
cout<<"("< 15、>zhishu;
else
{if(p->xishu==0)
cout<<"+0";
else
cout<<"+"<<"("< 16、 int zhishu;
pNode p,q,f;
f=phead;
int len=phead->zhishu;
for(i=0,p=phead->pnext;i 17、 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 18、相¨¤加¨®
{
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进行扫描,指数相同就相加。
pNod 19、e 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->zhis 20、hu)
{
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
21、 {
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=p 22、2->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 23、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->zhis 24、hu==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 25、>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 26、
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
{
27、 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->xish 28、u*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- 29、>xishu=p->xishu*p->zhishu;
p->zhishu=p->zhishu-1;
p=p->pnext;
}
5. x赋值求结果。
p=phead1->pnext;
cout<<"请?输º?入¨?x的Ì?值¦Ì"< 30、
cout<<"结¨¢果?值¦Ì为a"< 31、盲目的直接就敲程序,这样不仅会使效率低下还会使程序极易出现难以察觉的逻辑错误,最好在敲程序之前画流程图将算法分析清楚,确保无误后再敲程序
3. 同学间的交流很重要,不同小组的同学也应该多交流,这样不仅可以大家之间互相取长补短,共同进步,还可以避免很多错误的出现
五、【项目运作描述(Operate)】(10%)
(本部分应包括:项目的成本效益分析,应用效果等的分析。)
这个实验花时间比较长,在做实验的过程中我们也遇到了很多困难,为一个bug而纠结了很久,但是通过和同学的交流讨论,我们发现并解决了问题。在克服困难的过程中,我们学到了很多的东西,也积累了很多的经验,可以为以后的学习和实验中打 32、下基础。我们的程序基本实现了实验指导上的要求,但是对于健壮性的考虑还不够,我们一定会在以后的实验中,好好努力,尽最大的努力将程序完善
六、【代码】(10%)
(本部分应包括:完整的代码及充分的注释。 注意纸质的实验报告无需包括此部分。格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)
int main()
{
int choose;
double x,sum,y;
pNode phead1=NULL;
pNode phead2=NULL;
pNode p,p2,phead,phead3=NULL;
//pNode 33、 creat_list(void);
cout<<"********************************************************************************"< 34、 "< 35、d2=creat_list();
sort(phead1);
phead2=creat_list();
sort(phead2);
cout<<"整?理¤¨ª后¨®的Ì?第̨²一°?个?多¨¤项?式º?:êo"< 36、phead2);
//sort(phead1);
phead1= hebing(phead1);
cout<<"最Á?终?的Ì?结¨¢果?:êo"< 37、¨²一°?个?多¨¤项?式º?:êo"< 38、reat_list();
//phead2=creat_list();
sort(phead1);
phead2=creat_list();
sort(phead2);
cout<<"整?理¤¨ª后¨®的Ì?第̨²一°?个?多¨¤项?式º?:êo"< 39、2);
phead1= hebing(phead1);
cout<<"最Á?终?的Ì?结¨¢果?:êo"< 40、>xishu=p->xishu*p->zhishu;
p->zhishu=p->zhishu-1;
p=p->pnext;
}
cout<<"最Á?终?的Ì?结¨¢果?:êo"< 41、um=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"< 42、
第二章 项目前期的技术基础 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
第六章 原材料供应及外部配套条件落实情况 43、 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






