您的当前位置:首页正文

数据结构课程设计报告-多项式

2022-01-09 来源:易榕旅网


肇庆学院计算机科学学院

数据结构课程设计

题 目:一元多项式运算器

学生姓名:钟寒明 学 号:12332012012 专 业:计算机科学与技术 班 级:12级(2)班

指导教师姓名及职称:陈志梁 讲师 起止时间: 2014 年 3月—— 2014 年 4 月

1 需求分析

1.1 课题背景及意义

随着计算机网络技术的发展和因特网的广泛普及,各种的运算器的需求也逐渐增加,一元多项式运算器便是其中的一种。相信在往后的日子里,多项式会成为一种非常普遍的计算器。

《数据结构课程设计》是一门实践性的计算机课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。通过这次课程设计,要求掌握较大程序的设计方法,相应数据结构的选择应用、算法的设计及其实现和性能分析等方面中加深对课程基本内容的理解。同时,在设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 1.2 课题要求

A. 一元多项式的运算器

B. 实现多项式的相加,相减和相乘。

C. 选做内容:实现除法运算,求出运算时间等等。

1.3 设计目标

A.软件名称:一元多项式运算器

B.如何实现:利用数组来完成相应的多项式

C.未能实现:没能用链表来完成,而是用一个大的数组。数组的第几项就表示多项式的第几项,从而完成运算。

2 概要设计

2.1问题解决的思路概述

首先是确定结构化程序设计的流程图,利用已存在的数据结构来构造一个数组来完成多项式的运算设计,用数组的第几项来表示该多项式的第几项。从而实现一元多项式的加法,减法和乘法。然后再输出运算结果。总而言之,就是先用自顶向下、逐步细化的设计方法来分析并画出程序设计流程图;然后用自下而上、逐步积累的设计方法来写出程序。 2.2 主程序的流程基函数调用说明

- 1 -

(1)主程序的简要流程图

main() 选择运算方式(+,-,*) 输入第一个多项式 输入第二个多项式 回车键表示输出两个多项式运算的结果 输出的运算结果 结束 图1 主程序流程图

(2)实现多项式的主要思路:

3 详细设计

3.1 多项式的实现

本来是想按照老师的提示用链表来完成这个多项式运算器的基本框架,但是我觉得用数组来完成会更加的简单快捷,所以就利用了自己的一点小技巧来实现这个软件。就是利用一个比较大的数组来完成,先输入第一个多项式,数组的第一项就表示该多项式的第一项,然后再输入系数,然后再输入第二项,以此类推。完成第一个多项式的输入后再用同样的方式输入第二个多项式。最后输出结果。 3.2 该多项式的输入和输出界面

- 2 -

3.3各个算法的输入方法 加法的输入,如下图:

首先我们要输入“+”,然后输入第一个多项式,上图的第一组22111是表示第一个多项式有两项,第一项为2次方,系数为1。第二项为1次方,系数

- 3 -

为1。然后用同样的方法再输入第二个多项式。最后回车输出两多项式相加的结果。

3.4减法的输入

输入的方式跟加法一致,就不再加于说明。 3.5 乘法的输入

- 4 -

4 调试分析

表1 调试过程情况表 序号 时间 1 出现问题 解决方法 通过询问别人,发现用数组也可以来完成,最后就用了一个大数组来完成了多项式的代入,从而完成了这个一元多项式的运算器。 多次运行和观察后发现多输入了一个“*”,出现了错误。后面改正了,输入一个“*”,就完成了运算。 通过请教同学,发现了自己在运算符运用上出现了混乱。通过多次改正,终于把运算器完成,可以准确的运行。 2 3 2014-04-09 一开始尝试用链表来完成,但是因为个人的技术有限,在写代码的过程中出现了许多各种各样的小错误,一直未能完成。 2014-04-10 做乘法时由于输入了两个“*”,从而出现了输出结果一直为“0”的情况。如下图a 2014-04-13 一开始利用数组来实现这个运算器时,不能准确的讲每个项对准。输入第一个多项式时会出现错误。

- 5 -

5 用户使用说明

5.1 dos版本应用程序操作说明

(1)运行Polynomials.exe应用程序后会出现主界面; (2)选择所要做的运算,输入多项式;

(3)先输入第一个多项式,按回车; (4)再输入第二个多项式,回车输出结果。

6 测试结果

6.1 dos版本应用程序测试结果:

- 6 -

参考文献

[1]陈元春,王中华等.实用数据结构[M].北京:中国铁道出版社,2003.18-40.

附录:程序清单

程序代码如下: #include #include #include #include using namespace std; #define max 1000 double input[max + 1];

int main() {

char op;

int k,count;

- 7 -

int i,j,expo; double coef;

cout<<\"Input '+' to plus two polynomials\\nInput '-' to minus\\nInput '*' to

multiply\\nOtherwise

exit\\n--------------------------\\n--------------------------\"<cin>>op; if(op=='+') { }

else if(op=='-') {

cin>>k;

memset(input,0,sizeof(input)); for(i=0; icin>>expo>>coef; input[expo] += coef;

- 8 -

cin>>k;

memset(input,0,sizeof(input)); for(i=0; i>k;

for(i=0; icin>>expo>>coef; input[expo] += coef; cin>>expo>>coef; input[expo] += coef;

}

} cin>>k;

for(i=0; icin>>expo>>coef; input[expo] -= coef;

else if(op=='*') {

int k1;

int expo1[max + 1]; double coef1[max + 1]; int k2;

int expo2[max + 1]; double coef2[max + 1]; cin>>k1;

for(i=0; i>k2;

for(i=0; imemset(input,0,sizeof(input)); for(i=0;ifor(j=0;j- 9 -

cin>>expo1[i]>>coef1[i];

cin>>expo2[i]>>coef2[i];

}

}

{ }

input[expo1[i] + expo2[j]] += coef1[i] * coef2[j];

else { }

return 0;

count = 0;

for(i=1000; i>=0; i--) if(input[i] != 0) count++;

cout<for(i=1000; i>=0; i--) if(input[i] != 0.0) {

cout<system(\"pause\");

return 0; }

- 10 -

因篇幅问题不能全部显示,请点此查看更多更全内容