数据结构课程设计 - 一元多项式加法器

合集下载

数据结构-多项式相加

数据结构-多项式相加

数据结构课程设计2012年12月班级:XXX学号:XXX姓名: XXX指导教师:XXX一元稀疏多项式计算器【问题描述】设计一个一元稀疏多项式简单计算器【基本要求】一元多项式简单计算器的基本功能是:1,输入并建立多项式;2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;3,多项式a和b相加,建立多项式a+b;4,多项式a和b相减,建立多项式a-b.【算法设计思想】①一般情况下的一元n次多项式可写成pn(x)=p1xe1+p2xe2+……+pmxem其中,p1是指数为ei的项的非零系数,且满足0≦e1<e2<……<em=n ,若用一个长度为m且每个元素有两个数据项(系数项和指数项)的线性表((p1,e1),(p2,e2),……,(pm,em))便可惟一确定多项式pn(x)。

②用两个带表头结点的单链表分别存储两个多项式③根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;④只需要将第二个多项式的系数改为其相反数,然后根据一元多项式相加的运算规则便可以得到其相应的“差多项式”【【实现提示】用带表头结点的单链表存储多项式。

【程序代码】#include <stdio.h>#include <malloc.h>typedef struct node{float coef;int expn;struct node *next;}Lnode, *polynmial;void create(polynmial &L); //输入并建立多项式Lvoid display(polynmial L); //显示,输出多项式Lvoid sort(polynmial &L); //多项式L按指数排序void reverse(polynmial &L); //逆置void select(); //用户选择加减操作void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ldvoid create(polynmial &L) //输入并建立多项式L{int i, n;static struct node *p;scanf("%d", &n);L = (struct node *)malloc (sizeof(struct node));L->next = NULL;for(i = 0; i < n; i++){p = (struct node *)malloc(sizeof(struct node));scanf("%f %d", &p->coef, &p->expn);p->next = L->next;L->next = p;}}void display(polynmial L)//显示,输出多项式L{struct node *p, *q;int flag = 0;int k = 0;q = L->next;while(q)if(q->coef != 0)k++;q = q->next;}printf("%d, ", k);p = L->next;if(p->coef != 0){printf("%.1f,%d, ", p->coef, p->expn);flag++;}for(p = p->next; p; p = p->next){if(p->coef != 0){printf("%.1f,%d, ", p->coef, p->expn);flag++;}}if(flag == 0)printf("%d\n", flag);elseprintf("\n");}void sort(polynmial &L)//多项式L按指数排序{polynmial p, q, r, u;p = L->next;L->next = NULL;while(p != NULL){r = L;q = L->next;while((q != NULL) && (q->expn <= p->expn)) {r = q;q = q->next;}u = p->next;r->next = p;p->next = q;p = u;}void reverse(polynmial &L)//逆置{polynmial H;static struct node *p, *q, *s;H = (struct node*)malloc(sizeof(struct node));H->next = NULL;p = (struct node*)malloc(sizeof(struct node));s = L->next;p->coef = s->coef;p->expn = s->expn;p->next = s->next;while(s){p->coef = s->coef;p->expn = s->expn;p->next = s->next;q = H->next;H->next = p;p->next = q;p = (struct node*)malloc(sizeof(struct node));s = s->next;}p = H->next;q = L->next;while(p){q->coef = p->coef;q->expn = p->expn;q = q->next;p = p->next;}}void select() //用户选择加减操作{printf("请选择加减操作\n");printf("1.两个一元多项式相加\n");printf("2.两个一元多项式相减\n");}void add(polynmial La, polynmial Lb, polynmial &Lc)//多项式La,Lb相加{struct node *pa, *pb;static struct node *pc;Lc = (struct node*)malloc(sizeof(struct node));pa = La->next;pb = Lb->next;Lc->next = NULL;while(pa && pb){pc = (struct node*)malloc(sizeof(struct node)); if(pa->expn < pb->expn){pc->next = Lc->next;Lc->next = pc;pc->coef = pa->coef;pc->expn = pa->expn;pa = pa->next;}elseif(pa->expn == pb->expn){pc->next = Lc->next;Lc->next = pc;pc->expn = pa->expn;pc->coef = pa->coef + pb->coef;pa = pa->next;pb = pb->next;}else{pc->next = Lc->next;Lc->next = pc;pc->coef = pb->coef;pc->expn = pb->expn;pb = pb->next;}}while(pa){pc = (struct node*)malloc(sizeof(struct node)); pc->next = Lc->next;Lc->next = pc;pc->coef = pa->coef;pc->expn = pa->expn;pa = pa->next;}while(pb){pc = (struct node*)malloc(sizeof(struct node));pc->next = Lc->next;Lc->next = pc;pc->coef = pb->coef;pc->expn = pb->expn;pb = pb->next;}}void subtract(polynmial La, polynmial Lb, polynmial &Ld)//多项式La减去Lb,结果给Ld{struct node *pa, *pb;static struct node *pd;Ld = (struct node*)malloc(sizeof(struct node));pa = La->next;pb = Lb->next;Ld->next = NULL;while(pa && pb){pd = (struct node*)malloc(sizeof(struct node));if(pa->expn < pb->expn){pd->next = Ld->next;Ld->next = pd;pd->coef = pa->coef;pd->expn = pa->expn;pa = pa->next;}elseif(pa->expn == pb->expn){pd->next = Ld->next;Ld->next = pd;pd->expn = pa->expn;pd->coef = pa->coef - pb->coef;pa = pa->next;pb = pb->next;}else{pd->next = Ld->next;Ld->next = pd;pd->coef = pb->coef;pd->expn = pb->expn;pb = pb->next;}}while(pa){pd = (struct node*)malloc(sizeof(struct node)); pd->next = Ld->next;Ld->next = pd;pd->coef = pa->coef;pd->expn = pa->expn;pa = pa->next;}while(pb){pd = (struct node*)malloc(sizeof(struct node)); pd->next = Ld->next;Ld->next = pd;pd->coef = -pb->coef;pd->expn = pb->expn;pb = pb->next;}}int main(){int sign;polynmial La, Lb, Lc, Ld;printf("请输入第一个多项式:\n");create(La);sort(La);printf("请输入第二个多项式:\n");create(Lb);sort(Lb);select();scanf("%d", &sign);switch(sign){case 1:printf("多项式之和为:\n");add(La, Lb, Lc);sort(Lc);reverse(Lc);display(Lc);break;default:printf("多项式之差为:\n"); subtract(La, Lb, Ld); sort(Ld);reverse(Ld);display(Ld);break;}return 0;}【程序运行截图】。

一元稀疏多项式计算器(数据结构)

一元稀疏多项式计算器(数据结构)

院系:计算机科学学院专业:软件工程年级: 2013级课程名称:数据结构姓名:韦宜(201321092034)指导教师:宋中山2015年 12 月 15日题目:设计一个一元稀疏多项式简单计算器班级:软件工程1301 姓名:韦宜学号:201321092034 完成日期:12月15日一、需求分析问题描述:设计一个一元多项式加法器基本要求:输入并建立多项式;(2)两个多项式相加;(3)输出多项式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列。

(4)计算多项式在x处的值;(5)求多项式的导函数。

软件环境:Windows,UNIX,Linux等不同平台下的Visual C++ 6.0硬件环境: 512MB内存,80Gb硬盘,Pentium4 CPU,CRT显示器。

概要分析本程序有五个函数:PolyNode *Input()(输入函数);PolyNode *Deri(PolyNode *head)(求导函数);PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数);void Output(PolyNode*head)(输出函数);int main()(主函数)本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。

适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。

其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。

一元多项式相加 数据结构c++语言版

一元多项式相加 数据结构c++语言版

一元多项式相加数据结构c++语言版以下是一个使用C++ 语言实现的一元多项式相加的示例代码:c复制代码#include<iostream>#include<vector>using namespace std;// 定义多项式结构体struct Polynomial {vector<int> coefficients; // 系数数组int degree; // 最高次数};// 初始化多项式void initPolynomial(Polynomial &p, int degree) {p.degree = degree;p.coefficients.resize(degree + 1);}// 多项式相加Polynomial addPolynomial(const Polynomial &p1, const Polynomial &p2) {Polynomial result;result.degree = max(p1.degree, p2.degree); // 最高次数取两个多项式的最大值result.coefficients.resize(result.degree + 1);for (int i = 0; i <= result.degree; i++) {result.coefficients[i] = p1.coefficients[i] + p2.coefficients[i]; // 系数相加}return result;}// 输出多项式void printPolynomial(const Polynomial &p) {for (int i = p.degree; i >= 0; i--) { // 从最高次到最低次输出系数和对应的次数if (p.coefficients[i] != 0) { // 如果系数不为0,则输出该次数的系数和次数cout << p.coefficients[i] << "x^" << i << " ";}}cout << endl;}int main() {Polynomial p1, p2, p3; // 定义三个多项式对象initPolynomial(p1, 3); // 初始化 p1 为最高次数为3的多项式,系数全为0initPolynomial(p2, 2); // 初始化 p2 为最高次数为2的多项式,系数全为0 p1.coefficients[3] = 2; // 设置 p1 的最高次项系数为2p1.coefficients[2] = -3; // 设置 p1 的次高次项系数为-3p2.coefficients[2] = 4; // 设置 p2 的次高次项系数为4p2.coefficients[1] = -5; // 设置 p2 的最低次项系数为-5 initPolynomial(p3, 5); // 初始化 p3 为最高次数为5的多项式,系数全为0 p3 = addPolynomial(p1, p2); // 将 p1 和 p2 相加,结果存储在 p3 中printPolynomial(p3); // 输出相加后的结果多项式return0;}。

数据结构课程设计报告一元多项式的计算

数据结构课程设计报告一元多项式的计算

数据结构课程设计报告一元多项式的计算目录一、内容综述 (2)1.1 项目背景 (2)1.2 项目目标 (3)1.3 项目内容概述 (4)二、一元多项式的基本概念 (5)2.1 一元多项式的定义 (6)2.2 一元多项式的表示方法 (6)2.3 一元多项式的基本运算 (8)三、数据结构的选择与设计 (8)3.1 数据结构的选择 (9)3.2 数据结构的设计 (10)3.2.1 节点结构设计 (10)3.2.2 多项式结构设计 (11)四、一元多项式的计算实现 (11)4.1 多项式相加 (12)4.1.1 算法描述 (12)4.1.2 代码实现 (13)4.2 多项式相乘 (13)4.2.1 算法描述 (14)4.2.2 代码实现 (15)4.3 多项式除法 (16)4.3.1 算法描述 (16)4.3.2 代码实现 (17)五、实验与测试 (17)5.1 实验环境 (19)5.2 测试用例 (19)5.3 测试结果分析 (20)六、性能分析 (21)七、结论 (22)7.1 项目总结 (23)7.2 项目不足与展望 (24)一、内容综述本课程设计报告主要围绕一元多项式的计算展开,旨在深入探讨一元多项式的定义、表示方法及其在计算机中的存储与操作。

报告首先对一元多项式的概念进行了详细的阐述,包括其基本性质和常见类型。

随后,介绍了多种一元多项式的表示方法,如系数表示法、点值表示法等,并分析了各自优缺点。

在此基础上,针对一元多项式的基本运算,如加法、减法、乘法和除法等,详细介绍了算法实现过程,并分析了算法的时间复杂度和空间复杂度。

此外,本报告还涉及一元多项式的应用领域,如数值计算、符号计算等,并探讨了如何利用一元多项式解决实际问题。

通过本次课程设计,旨在培养学生的数据结构应用能力和编程实践能力,提高学生在计算机科学领域的综合素质。

1.1 项目背景随着计算机技术的飞速发展,数据结构作为计算机科学中的基础课程,其重要性日益凸显。

数据结构课程设计报告(顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。)

数据结构课程设计报告(顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。)

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一二年一月十日课程设计任务书及成绩评定课题名称顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

Ⅰ、题目的目的和要求:1. 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2.设计题目要求:1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果M(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况;Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一二年一月十日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计 (4)第五章运行与测试 (17)第六章总结与心得 (19)参考文献 (20)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

数据结构课程设计之一元多项式加减乘

数据结构课程设计之一元多项式加减乘

##大学数据结构课程设计报告题目:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2011.06.20-06.30指导教师:2010—2011年度第 2 学期一、需求分析1、顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

可以分为几个模块:输入模块、输出模块(升幂降幂)、数据处理模块(多项式的加减乘)、主程序模块。

2、在程序过程中加入汉字提示符,让读者清楚明白的操作该程序。

运行程序时看起来简洁有序,操作简单明了3、程序执行时的命令:①选择创建两个一元多项式②输入第一个一元多项式的项数③依次输入一元多项式的系数和指数④以相同方式输入第二个一元多项式⑤选择操作方式⑥选择降幂或升幂排序⑦输出结果⑧是否退出。

4、测试数据。

输入的一元多项式系数指数分别为7 0,3 1,9 8,5 17和8 1,22 7,-9 8。

加法结果为;升幂降幂减法结果为:升幂降幂乘法结果为:升幂降幂二、概要设计1、设计思路:在该程序中分别分为顺序存储和链式存储结构。

2、数据结构设计:一元多项式抽象数据类型的定义:ADT Polynomial{数据对象:D={ai|ai∈TermSet,i=1,2…,m,m>=0TermSet中的每一个元素包含一个表示系数的实数和表示指数的整数}数据关系:R1={<ai-1,ai>|ai-1,ai∈D, 且ai-1中的指数值<ai中的指数值,i=2,…,n} 基本操作:CreatPolyn(&P,m)操作结果:输入m项的系数和指数,建立一元多项式P.DesteoyPolyn(&P)初始条件:一元多项式P已存在。

操作结果:销毁一元多项式P。

PrintfPolyn(P)初始条件:一元多项式P已存在。

操作结果:打印输出一元多项式P。

PolynLength(P)初始条件:一元多项式P已存在。

数据结构课程设计报告一元多项式加减乘除(精)

数据结构课程设计报告一元多项式加减乘除(精)多项式想加减与乘与升降序学院计算机科学与技术专业信息安全学号 201312070 学生姓名陶宝中辅导教师姓名2014年12月22 日一、设计目的与内容了解数据结构的与算法的设计方法,独立分析和设计一元多项式加减与乘除的程序编码,通过程序编写掌握软件开发过程的问题分析,系统设计,程序编码,测试等基本方法和技能,提高综合运用所学理论知识和方法独立分析和解决问题的能力,通过这次实践将实验问题中的所涉及的对象在计算机中表示出来并对他们进行处理,掌握线除。

任务与分析本课题主要的目的是分别采用顺序和动态存储结构实现一元多项式的加法、减法和乘法。

并将操作结果分别按升序和降序输出程序的主要功能一元多项式创建建立一元多项式的顺序表和链式表,按程序提示输入每个项数据结束创建。

借助元素在存储器中的相对位置来表示数据元素之间的关系,顺序表中第i个位置表示一元多项式的第i项的系数为第i个位置存放的内容,指数为i-1。

创建一个一元多项式顺序表,对一元多项式的运算中会出现的各种情况进行分析,实现一元多项式的相加、相减、相乘操作。

用链表来表示只存储多项式中系数非零的项。

链表中的每一个结点存放多项式的一个term项结构和指向下一个节点的指针域,term又包括系数和指数两个域分别存放该项的系数、。

创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减、相乘操作。

一元多项式的加法对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到和多项式中去。

一元多项式的减法对于两个一元多项式中所有指数相同的项,对应系数相减,若其差不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,将其按减法规则复抄到差多项式中去。

一元多项式的乘法将乘法运算分解为一系列的加法运算利用两个一元多项式相加的算法实现。

一元多项式的加法.减法.乘法的实现

一元多项式的加法.减法.乘法的实现数学与计算机学院课程设计说明书课程名称: 数据结构-课程设计课程代码: 8404181题目一元多项式的加法、减法、乘法的实现年级/专业/班: 2019/软件工程/4 学生姓名: 学号:开始时间: 2019 年 6 月 20 日完成时间: 2019 年 6 月 29 日课程设计成绩:指导教师签名:年月日数据结构课程设计任务书学院名称:数学与计算机学院课程代码: 8404181 专业:软件工程年级:2019级一、设计题目一元多项式的加法、减法、乘法的实现。

二、主要内容设有一元多项式A m (x)和B n (x). Am (x)=A0+A1x +A2x +A3x +… +Am x Bn (x)=B0+B1x +B2x +B3x +… +Bn x请实现求M(x)= Am (x)+Bn (x)、M(x)= Am (x)-Bn (x)和M(x)= Am (x)×B n (x)。

要求: 1) 首先判定多项式是否稀疏 2) 采用动态存储结构实现;3) 结果M(x)中无重复阶项和无零系数项; 4) 要求输出结果的升幂和降幂两种排列情况123n123m三、具体要求及应提交的材料1.每个同学以自己的学号和姓名建一个文件夹,如:“[**************]张三”。

里面应包括:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。

2.打印的课程设计说明书(注意:在封面后夹入打印的“任务书”以后再装订)。

四、主要技术路线提示为把多个小功能结合成一个完整的小软件,需使用“菜单设计”技术(可以是控制台方式下的命令行形式,若能做成图形方式则更好)。

五、进度安排共计两周时间,建议进度安排如下:选题,应该在上机实验之前完成需求分析、概要设计可分配4学时完成详细设计可分配4学时调试和分析可分配10学时。

2学时的机动,可用于答辩及按教师要求修改课程设计说明书。

数据结构一元多项式计算器

长沙学院课程设计说明书题目一元多项式计算问题系(部) 计算机科学与技术系专业(班级) 09计科二班姓名陈显玲学号2009021217指导教师何文德起止日期2010.12.13-2010.12.24课程设计任务书课程名称:数据结构与算法设计题目:一元多项式计算问题已知技术参数和设计要求:问题描述:设计一个稀疏多项式简单计算器基本要求:(1)输入并分别建立多项式A和B(2)输入输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……,其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列(3)完成两个多项式的相加、相减,并将结果输出;测试数据:(1) A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2(2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7(3) A+B A=x3+x1B=-x3-x1(4) A+B A=0 B=x7+x5+x3+x1(5) A-B A=100x100+50x50+20x20+x B=10x100+10x50+10x20+x选作内容:(1).多项式在x=1时的运算结果(2)求多项式A和B的乘积设计工作量:40课时工作计划:见课表指导教师签名:日期:教研室主任签名:日期:系主任签名:日期:长沙学院课程设计鉴定表姓名陈显玲学号2009021217 专业计算机科学与技术系班级09计科二班设计题目一元多项式计算问题指导教师何文德指导教师意见:评定等级:教师签名:日期:答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名:日期:系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;摘要本报告参照长沙学院计算机科学与技术系2010-2011学年数据结构课程设计要求编写,设计一个一元多项式计算器程序。

程序的总体数据结构为线性表,用带头结点的单循环链表存储表示多项式,对线性表元素进行插入、删除与排序等操作完成两个多项式的加、减、乘、除以及输出、定值运算等操作。

一元多项式的加法.减法.乘法的实现

一元多项式的加法. 减法 . 乘法的实现数学与计算机学院课程设计说明书课程名称:数据结构-课程设计课程代码: 8404181题目一元多项式的加法、减法、乘法的实现年级/专业/班: 2019/软件工程/4学生姓名:学号:开始时间:2019年6月20日完成时间:2019年6月29日课程设计成绩:指导教师签名:年月日数据结构课程设计任务书学院名称:数学与计算机学院课程代码:8404181专业:软件工程年级:2019 级一、设计题目一元多项式的加法、减法、乘法的实现。

二、主要内容设有一元多项式 A m (x) 和 B n (x). Am (x)=A0+A1x +A2x +A3x +, +Am x Bn(x)=B0+B1x +B2x +B3x +, +Bn x请实现求 M(x)= Am (x)+Bn (x) 、 M(x)= Am (x)-Bn (x) 和 M(x)= Am (x) ×B n (x) 。

要求: 1)首先判定多项式是否稀疏 2) 采用动态存储结构实现;3) 结果 M(x) 中无重复阶项和无零系数项; 4) 要求输出结果的升幂和降幂两种排列情况123n123m三、具体要求及应提交的材料1 .每个同学以自己的学号和姓名建一个文件夹,如:“[**************]张三”。

里面应包括:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。

2.打印的课程设计说明书(注意:在封面后夹入打印的“任务书”以后再装订)。

四、主要技术路线提示为把多个小功能结合成一个完整的小软件,需使用“菜单设计”技术(可以是控制台方式下的命令行形式,若能做成图形方式则更好)。

五、进度安排共计两周时间,建议进度安排如下:选题,应该在上机实验之前完成需求分析、概要设计可分配 4 学时完成详细设计可分配 4 学时调试和分析可分配10 学时。

2学时的机动,可用于答辩及按教师要求修改课程设计说明书。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数 据 结 构 课 程 设 计 报 告 一元多项式加法器

专 业: 班 级: 学 号: 姓 名: 指导老师: 2

目 录 1.序言 ............................................................................................................................ 3 1.1关于数据结构 ························································································ 3 1.2数据结构课程设计的目的 ········································································· 3 2 需求分析 ................................................................................................................... 4 2.1题目要求 ······························································································ 4 2.2题目分析 ······························································································ 4 3 概要设计 ................................................................................................................... 5 3.1总体解决方案 ························································································ 5 3.2总体功能流程图 ····················································································· 6 4 详细设计与实现 ....................................................................................................... 6 4.1系统主要函数组成 ·················································································· 6 4.2基本函数实现流程 ·················································································· 7 5 代码与解析 ............................................................................................................. 12 6 调试与操作说明 ..................................................................................................... 18 6.1操作说明 ····························································································· 18 6.2调试结果 ····························································································· 19 总 结 ................................................................................................................. 20 参 考 文 献 ............................................................................................................... 20 3

1.序 言 1.1关于数据结构 数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。 通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在校和离校后的学习和工作,也有着重要的意义。 数据结构是计算机科学与技术专业的一门核心专业基础课程,在该专业的课程体系中起着承上启下的作用,学好数据结构对于提高理论认知水平和实践能力有着极为重要的作用。学习数据结构的最终目的是为了获得求解问题的能力。对于现实世界中的问题,应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部用相应的数据结构来表示,然后设计一个解此数学模型的算法,再进行编程调试,最后获得问题的解答。 基于此原因,我们开设了数据结构课程设计。针对数据结构课程的特点,着眼于培养我们的实践能力。实习课程是为了加强编程能力的培养,鼓励学生使用新兴的编程语言。相信通过数据结构课程实践,无论是理论知识,还是实践动手能力,同学们都会有不同程度上的提高。 1.2数据结构课程设计的目的 通过课程设计题目的练习,强化学生对所学知识的掌握及对问题分析和任务定义的理解,对每到题目作出了相应的逻辑分析和数据结构的选择,通过对任务的分析,为操作对象定义相应的数据结构,以过程化程序设计的思想方法为原则划分各个模块,定义数据的抽象数据类型。分模块对题目进行设计,强化学生对C语言的掌握和对数据结构的选择及掌握。通过程序的编译掌握对程序的调试方法及思想,并且让学生学会使用一些编程技巧。促使学生养成良好的编程习惯, 以及让学生对书本上的知识进行了实践。算法与数据结构这门课是计算机科学中一门综合性的专业基础课。它不仅是计算机学科的核心课程,而且已成为其它理工专业的热门选修课。它又是操作系统、编译原理、数据库原理、算法分析、人工智能、图象处理等专业课程的前导课。具有承上启下的作用。数据结构的研究不仅涉及到计算机硬 4

件的研究范围,而且和计算机软件的研究有着密切的关系。计算机科学各领域及有关的应用软件都要用到数据结构。该课程的目的就是介绍一些最常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各种运算时的动态性质及实际的执行算法。

2.需求分析

2.1题目要求 一元多项式加法器 【问题描述】 设计一个一元多项式加法器。 【基本要求】 (1)输入并建立多项式; (2)两个多项式相加; (3)输出多项式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列。 (4)计算多项式在x处的值; (5)求多项式的导函数。

2.2题目分析 在数学上,一个一元多项式Pn(x)可按降幂写成:Pn(x)=a0+a1 x+a2 x^2 +…+an x^n-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=(a0,a1,a2,…,an)每一项的指数i隐含在其系数ai的序号里。题中只要求我们求两个多项式的加法,求值,求导和输入输出功能,只要掌握其规律,运用单链表的基本操作就能有效解决。 5

3.概要设计 3.1总体解决方案 1、任务思路与方法 1) 定义线性表的动态分配顺序存储结构; 2) 建立多项式存储结构,定义指针*next利用链表实现队列的构造; 3) 每次输入一项的系数和指数,可以输出构造的一元多项式; 4) 要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为 系数coef 指数expn 指针域next 运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。

2.相关算法: 1)元素类型、结点类型和指针类型: typedef struct Polynomial{

float coef; //系数 int expn; //指数 struct Polynomial *next; }*Polyn,Polynomial; 2)建立一个头指针为head、项数为m的一元多项式, 建立新结点以接收数据, 调用Insert函数插入结点: Polyn CreatePolyn(Polyn head,int m){ int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial)); head->next=NULL; for(i=0;i { p=(Polyn)malloc(sizeof(struct Polynomial)); printf("请输入第%d项的系数与指数:",i+1); scanf("%f %d",&p->coef,&p->expn); Insert(p,head); } return head; }

相关文档
最新文档