《数据结构》课程设计报告-运动会分数统计 一元多项式 迷宫求解 文章编辑 纸牌游戏等

合集下载

运动会分数统计(数据结构课程设计)python

运动会分数统计(数据结构课程设计)python

运动会是学校中一项重要的活动,通过运动会可以增强学生的体质,增进师生之间的情感,同时也能够激发学生的运动热情和团队精神。

而对于运动会的分数统计来说,如何高效、准确地完成这项工作是非常重要的。

本文主要介绍了基于数据结构课程设计的运动会分数统计系统,使用Python语言实现。

二、系统设计1. 数据结构的选择在设计运动会分数统计系统时,需要考虑如何存储和管理参赛队伍和成绩信息。

由于参赛队伍和成绩信息的数量较大,因此需要选择适合高效查询和排序的数据结构。

本系统选择使用Python中的字典(dictionary)和列表(list)来存储和管理数据。

2. 数据的存储在系统中,每支队伍的信息包括队伍编号、队伍名称和各项比赛成绩等。

这些信息可以使用字典来存储,其中队伍编号作为键,队伍信息作为值。

而各项比赛成绩可以使用列表来存储,方便进行排序和统计。

3. 数据的输入为了方便输入参赛队伍和成绩信息,本系统提供了相应的输入界面,用户可以通过界面逐一输入每支队伍的信息。

程序也提供了批量导入功能,用户可以通过导入文件的方式一次性输入所有的参赛队伍和成4. 数据的统计和输出系统可以对输入的成绩信息进行统计和排序,可以按照总分或特定比赛项目的成绩进行排序,并将排名信息输出到文件中。

排名信息包括队伍名称、总分和各项比赛成绩,方便后续的奖励和表彰工作。

三、系统实现1. 数据结构类的设计为了方便对队伍和成绩信息进行管理,本系统设计了队伍(Team)和成绩(Score)两个类,分别用于存储队伍信息和比赛成绩。

2. 主程序的设计系统的主程序主要包括数据的输入、统计和输出三个功能。

用户可以通过交互式界面输入队伍和成绩信息,也可以通过命令行参数进行批量导入。

系统会对输入的成绩信息进行统计和排序,并将排名信息输出到指定的文件中。

3. 界面设计为了方便用户操作,系统提供了简洁清晰的交互式界面。

用户可以通过界面进行数据的输入和操作,也可以查看和导出排名信息。

数据结构课设报告_运动会分数统计

数据结构课设报告_运动会分数统计

目录一、设计任务 (2)二、功能需求分析 (2)三、功能算法设计 (3)四、编码实现 (4)五、调试分析 (5)六、课设总结 (7)七、参考文献 (7)一、设计任务问题描述:参加运动会的n个学校编号为1~n。

比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。

由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。

写一个统计程序产生各种成绩单和得分报表。

基本要求:⑴每个项目结束时,输入前三名或前五名的项目编号、运动员姓名、校名和名次(成绩);⑵产生各学校的成绩单,内容包括各学校所取得的每项成绩的项目号、名次(成绩)、姓名和得分,并统计各学校总分;⑶产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。

二、功能需求分析1.int InitList(SqList &L)操作结果构造一个空的顺序线性表2.int ListInsert(SqList &L,int i,ElemType e)初始条件:顺序线性表L已存在,≤i≤ListLength(L)+1操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加3.void InsertSort(List &L)操作结果:对顺序表L作直接插入排序。

算法.14.void print(List L)操作结果:打印线性表:5.int main()操作结果:完成系统的主要设计;三、功能算法设计InitList()流程图ListInsert()流程图Print()流程图InsertSort(List &L)流程图四、编码实现struct RedType // 记录类型{KeyType key; // 关键字项InfoType otherinfo; // 其它数据项,具体类型在主程中定义};typedef struct{int schnum;//学校的编号int mscore[20];//学校在各个男生项目的积分int wscore[20];//学校在各个女生项目的积分}school;//学校记录类型typedef int ElemType;struct SqList{ElemType *elem;// 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)};struct List{RedType r[20];int length;};int InitList(SqList &L) // 算法.3{ // 操作结果:构造一个空的顺序线性表L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(-1); // 存储分配失败L.length=0; // 空表长度为L.listsize=LIST_INIT_SIZE; // 初始存储容量return 1;}int ListInsert(SqList &L,int i,ElemType e) // 算法.4{ // 初始条件:顺序线性表L已存在,≤i≤ListLength(L)+1// 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加ElemType *newbase,*q,*p;if(i<1||i>L.length+1) // i值不合法return 0;if(L.length>=L.listsize) // 当前存储空间已满,增加分配{if(!(newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)))) exit(-1); // 存储分配失败L.elem=newbase; // 新基址L.listsize+=LISTINCREMENT; // 增加存储容量}q=L.elem+i-1; // q为插入位置for(p=L.elem+L.length-1;p>=q;--p) // 插入位置及之后的元素右移*(p+1)=*p;*q=e; // 插入e++L.length; // 表长增return 1;}void InsertSort(List &L){ // 对顺序表L作直接插入排序。

数据结构课程设计――迷宫问题课程设计报告

数据结构课程设计――迷宫问题课程设计报告

数据结构课程设计――迷宫问题课程设计报告迷宫问题——王欣歆20080564一(需求设计:以一个m*m 的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序,对任意设定的迷宫,求出一条从入口的通道,或得出没有通路的结论。

二(概要设计:存储结构:采用了数组以及结构体来存储数据,在探索迷宫的过程中用到的栈,属于顺序存储结构。

/*八个方向的数组表示形式*/int move[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1, 1}};/*用结构体表示位置*/struct position{int x,y;};position stack[m*m+1];基本算法:走迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、东南、南、西南、西、西北、北、东北8个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果8个方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。

每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。

用一个字符类型的二维数组表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。

迷宫的入口点在位置(1,1)处,出口点在位置(m,m)处。

设计一个模拟走迷宫的算法,为其寻找一条从入口点到出口点的通路。

二维数组的第0行、第m+1行、第0列、第m+1列元素全置成“1”,表示迷宫的边界;第1行第1列元素和第m行第m列元素置成“0”,表示迷宫的入口和出口;其余元素值用随机函数产生。

假设当前所在位置是(x,y)。

沿某个方向前进一步,它可能到达的位置最多有8个。

如果用二维数组move记录8个方向上行下标增量和列下标增量,则沿第i个方向前进y 一步,可能到达的新位置坐标可利用move数组确定: o x=x+move[i][0]y=y+move[i][1]从迷宫的入口位置开始,沿图示方向顺序依次进行搜索。

课程设计报告--一元多项式计算VS迷宫求解

课程设计报告--一元多项式计算VS迷宫求解

课程设计报告--一元多项式计算VS迷宫求解课程设计报告一元多项式计算VS迷宫求解系别:专业年级:学生姓名:学号:任课老师:二○一二年三月一、题目内容描述(一)、实验二一元多项式计算**1、任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减、相乘,并将结果输出;2、在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;(二)、实验四迷宫求解1、任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;2、要求:在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法。

二、解题分析(一)、一元多项式计算分析:1、一元稀疏多项式简单计算器的功能是:1.1 输入并建立多项式;1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,………cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;1.3 求多项式a、b的导函数;1.4 计算多项式在x处的值;1.5多项式a和b相加,建立多项式a+b;1.6 多项式a和b相减,建立多项式a-b。

2、设计思路:2.1 定义线性表的动态分配顺序存储结构;2.2 建立多项式存储结构,定义指针*next2.3利用链表实现队列的构造。

每次输入一项的系数和指数,可以输出构造的一元多项式2.4演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。

多项式显示的格式为:c1x^e1+c2x^e2+…+cnx^en3、设计思路分析:要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,序数coef 指数expn 指针域next元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。

数据结构课程设计报告-迷宫算法

数据结构课程设计报告-迷宫算法

沈阳航空航天大学课程设计报告课程设计名称:数据结构课程设计课程设计题目:迷宫算法院(系):计算机学院专业:计算机科学与技术班级:学号:姓名:指导教师:目录1 课程设计介绍 (1)1.1课程设计内容 (1)1.2课程设计要求 (1)2 课程设计原理 (2)2.1课设题目粗略分析 (2)2.2原理图介绍 (3)2.2.1 功能模块图 (3)2.2.2 流程图分析 (4)3 数据结构分析 (8)3.1存储结构 (8)3.2算法描述 (8)4 调试与分析 (11)4.1调试过程 (11)4.2程序执行过程 (11)参考文献 (15)附录(关键部分程序清单) (16)1 课程设计介绍1.1 课程设计内容编写算法能够生成迷宫,并且求解迷宫路径(求解出任意一条到出口的路径即可):1.迷宫用上下左右四种走法;2.迷宫的大小和复杂程度可以由用户定义;3.入口出口也由用户自己选择。

1.2 课程设计要求1.不必演示求解过程,只需要输出迷宫求解的路径;2.参考相应资料完成课设。

2 课程设计原理2.1 课设题目粗略分析根据课设题目要求,拟将整体程序分为四大模块。

以下是四个模块的大体分析:1 建立迷宫:要建立迷宫首先就要建立存储结构,这里我用栈的方式建立的。

根据用户输入的迷宫的大小(我设置的最大值为25可以根据要求调解);2 设置迷宫:这里将0设置围墙,1是可以通过的路径,-1是不可以通过路径,外墙是以设计好的,内墙需要用户来设置,障碍的难度可由用户自行定义;3 寻找路径:寻找路径我设置了四个方向{0,1},{1,0},{0,-1},{-1,0}移动方向,依次为东南西北,首先向东走,若不成功则转换方向,成功则继续前进,将走过的路径进行标记,然后存入栈中;4 输出结果:输出的结果分为两种,一种是用户建立的迷宫主要是让用户检查是否符合要求,第二种输出的是寻找完后的路径,路径用1 2 3 4···来表示。

迷宫求解数据结构课程设计报告

迷宫求解数据结构课程设计报告

课程设计报告课题名称:迷宫问题姓名:xxx学号:200816020239专业:电气与信息工程学院班级:通信08102指导教师:目录第一部分程告⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 3第一章程目的⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 3第二章程内容和要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4描述⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4第三章程体方案及解析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4解析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4大纲⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯7⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯7解析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10参照文件⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯12 第二部分程⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯13附 (源代 )⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯14第二部分课程设计报告第一章课程设计目的到列是一种特其他性表是不的,本次的目的在于使学生深入认识列的特色,以便在背景下灵便运用它,同将牢固种数据构的构造方法第二章课程设计内容和要求2.1 问题描述:迷是取自心理学的一个古典。

在中,把一只老鼠从一个无大盒子的放入,在盒子中置了多,行方向形成了多阻。

盒子有一个出口,在出口放置一奶酪,吸引老鼠在迷中找道路以到达出口。

同一只老鼠重复行上述,向到达老鼠从入口走到出口,而不走一步。

老鼠多次最学会走通迷的路。

一个算机程序任意定的矩形迷以下 A 所示,求出一条从入口到出口的通路,或得出没有通路的。

A2.2 设计要求:要求设计程序输出以下:(1)成立一个大小为 m×n的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在屏幕上显示出来;(2 )找出一条通路的二元组(i,j )数据序列,( i,j )表示通路上某一点的坐标。

(3 )用一种标志(如数字8 )在迷宫中标出该条通路;(4 )在屏幕上输出迷宫和通路;(5 )上述功能可用菜单项选择择。

数据结构课程设计报告

数据结构课程设计报告

*****数据结构课程设计题目: 赫夫曼树的建立运动会分数统计订票系统猴子选大王图的建立与输出姓名:***学号 ****专业:计算机科学与技术指导教师:****2006年9月20日目录一:绪言 (3)1.1课题设计背景 (3)1.2课题研究的目的和意义…………………………….3.1.3课题研究的内容 (4)二:主菜单设计 (4)2.1主菜单 (4)2.2主菜单源代码 (4)2.3主菜单流程图 (5)三:具体程序设计 (6)3.1赫夫曼树的建立 (6)3.2运动会设计 (8)3.3订票系统 (12)3.4猴子选大王 (15)3.5图的建立及输出 (16)四:总结与展望 (19)五:参考文献 (19).1.绪言1.1 课题背景《数据结构》作为一门独立的课程最早是美国的一些大学开设的,1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。

从60年代末到70年代初,出现了大型程序,软件也相对独立,结构程序设计成为程序设计方法学的主要内容,人们就越来越重视数据结构,认为程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。

从70年代中期到80年代初,各种版本的数据结构著作就相继出现。

目前在我国,《数据结构》也已经不仅仅是计算机专业的教学计划中的核心课程之一,而且是其它非计算机专业的主要选修课程之一。

《数据结构》在计算机科学中是一门综合性的专业基础课。

数据结构的研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。

在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。

因此,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程,在计算机科学中,数据结构不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据系统及其它系统程序和大型应用程序的重要基础。

数据结构课程设计报告

数据结构课程设计报告

一、课程设计概述:本次数据结构课程设计共完成五个题:一元稀疏多项式计算器、迷宫问题、成绩分析问题、图的基本操作与实现以及背包问题的求解使用语言:C编译环境:TC3.0二、课程设计题目一[实验内容]一元稀疏多项式计算器[问题描述]设计一个一元稀疏多项式简单计算器。

[基本要求]一元稀疏多项式简单计算器的基本功能是:(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2,,,,,,, c n,e n,其中n是多项式的项数,c i,e i,分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相加,建立多项式a+b;(4)多项式a和b相减,建立多项式a-b;(5)计算多项式在x处的值。

(6)计算器的仿真界面。

(选做)[概要设计]-=ADT=-Test1:主类,程序的启动Item :项,表示多项式中的某一项Ploynomial:多项式类[存储结构]Item属性:private double c;//系数private int e;//指数Item方法:public void setC(double c){//设置系数}public void setE(int e){ //设置指数}public double getC(){//获取系数}public int getE(){//获取指数}public double resultItem(double x){//在x处Item的值}private double fac(double x,int e){//求x的e次方,当e为整数时}Polynomial属性:private LinList list;//单链表Polynomial方法:public Polynomial(){}public Polynomial(Item [] item)throws Exception{ //构造函数}private void initItem(Item [] item){//初始化Item数组,使其是按降序排序}public int getItemNum(){//获取项数}public void print()throws Exception{//打印多项式不空行}public void println()throws Exception{//打印多项式空行}public LinList getLinList(){//获取单链表}public void printPolynomial()throws Exception{//只打印项数、系数和指数}public Polynomial add(Polynomial other)throws Exception{//多项式相加}}public Polynomial subtraction(Polynomial other)throws Exception{//多项式相减}public double result(double x)throws Exception{}[详细设计]Item类:public class Item {private double c;//系数private int e;//指数public Item(){}public Item(double c,int e){this.c=c;this.e=e;}public void setC(double c){this.c=c;}public void setE(int e){this.e=e;}public double getC(){return c;}public int getE(){return e;}public double resultItem(double x){return getC()*fac(x,getE());}private double fac(double x,int e){//求x的e次方,当e为整数时if(e==0) return 1;return x*fac(x,e-1);}}Polynomial类:import java.util.*;public class Polynomial{//多项式类private LinList list;//单链表public Polynomial(){list=new LinList(0,null);}public Polynomial(Item [] item)throws Exception{ //构造函数int n=item.length;list=new LinList(n,null);if(n==0){return;}initItem(item);try{for(int i=0;i<n;i++)list.insert(i,item[i]);}catch(Exception e){}}private void initItem(Item [] item){//初始化Item数组,使其是按降序排序int n=item.length;int max;for(int i=0;i<n;i++){max=i;for(int j=i+1;j<n;j++)if(item[j].getE()>item[max].getE()) max=j;if(max!=i){Item temp=item[i];item[i]=item[max];item[max]=temp;}}}public int getItemNum(){//获取项数Object temp=list.head.getElement();int n=-1;if(temp instanceof Integer){Integer i=(Integer)temp;n=i.intValue();}return n;}public void print()throws Exception{//打印多项式不空行int n=getItemNum();// System.out.println(n);if(n==-1) return ;if(n==0){System.out.print("0");return;}boolean flag=true;//是不是输出第一项的标志for(int i=0;i<n;i++){Item temp=(Item)list.getData(i);double c=temp.getC();if(c==0) continue;//系数为0时不输出if(flag && temp.getE()!=0 ){System.out.print(c+"x^"+temp.getE());}else if(flag && temp.getE()==0)System.out.print(temp.getC());else {if(c>0)System.out.print("+"+c+"x^"+temp.getE());else if(c<0)System.out.print(c+"x^"+temp.getE());}flag=false;}}public void println()throws Exception{//打印多项式空行print();System.out.println();}public LinList getLinList(){//获取单链表return list;}public void printPolynomial()throws Exception{//只打印项数、系数和指数int n=getItemNum();if(n==0) return ;System.out.print(n+",");for(int i=0;i<n;i++){Item item=(Item)this.getLinList().getData(i);if(i!=n-1){System.out.print("c"+i+"="+item.getC()+", "+"e"+i+"="+item.getE()+", ");}else{System.out.print("c"+i+"="+item.getC()+", "+"e"+i+"="+item.getE());}}System.out.println();}public Polynomial add(Polynomial other)throws Exception{//多项式相加LinList otherList=other.getLinList();int n1=getItemNum();//该多项式的项数int n2=other.getItemNum();//另一个多项式的项数if(n2==0) return this;if(n1==0) return other;Polynomial temp=new Polynomial();int i=0,j=0;while (+i<n1 && j<n2){Item item=new Item();Item item1=(Item)list.getData(i);Item item2=(Item)otherList.getData(j);double c1=item1.getC();//获得系数double c2=item2.getC();int e1=item1.getE();//获得指数int e2=item2.getE();if(e1==e2){//相等时double c=c1+c2;item.setC(c);item.setE(e1);i++;j++;}else if(e1<e2){//不相等时指数的大的增加item=item2;j++;}else {item=item1;i++;}try{if(item.getC()==0)//当得到项的系数为0时就没有必要加入continue;temp.getLinList().insert(temp.getLinList().size(),item);}catch(Exception e){}}//将没有参加比较的项加进去,注意比较之后有且只有一个有多余的项while(i<n1){Item item1=(Item)list.getData(i);try{temp.getLinList().insert(temp.getLinList().size(),item1);}catch(Exception e){}i++;}while(j<n2){Item item1=(Item)otherList.getData(j);try{temp.getLinList().insert(temp.getLinList().size(),item1);}catch(Exception e){}j++;}temp.getLinList().head.setElement(temp.getLinList().size());//设置项数return temp;}public Polynomial subtraction(Polynomial other)throws Exception{//多项式相减int n=other.getItemNum();if(n==0) return this;Polynomial temp=new Polynomial();LinList l=temp.getLinList();for(int i=0;i<n;i++){Item item =(Item)other.getLinList().getData(i);double c=-1*item.getC();//取反l.insert(i,new Item(c,item.getE()));}l.head.setElement(n);//设置项数return add(temp);}public double result(double x)throws Exception{double sum=0;int n=getItemNum();//该多项式的项数if(n==0) return 0;for(int i=0;i<n;i++){Item item=(Item)list.getData(i);sum+=item.resultItem(x);}return sum;}}Test1类:import java.io.*;import java.util.Scanner;public class Test1 {Scanner scanner =new Scanner(System.in);public static void main(String[] args)throws Exception{ Test1 test1=new Test1();Scanner scanner1 =new Scanner(System.in);while(true){System.out.println("请输入你要操作的系号:\n"+"1)输出多项式\n"+"2)多项式相加\n"+"3)多项式相减\n"+"4)计算多项式在x处的值\n"+"5)退出");String s=scanner1.next();int t=-1;try{t=Integer.parseInt(s);}catch(Exception e){}switch(t){case 1:test1.printPolynomial();break;case 2:test1.add();break;case 3:test1.subtraction();break;case 4:test1.resultOfPolynomia();break;case 5:System.exit(0);break;default:System.out.println("你输入的操作有误,请重试\n");continue;}}}private void printPolynomial()throws Exception{//选择1时System.out.println("请输入要输出的多项式的信息:");Item[] item=creatItemShuZu();Polynomial p=new Polynomial(item);p.printPolynomial();}private void add()throws Exception{//选择2时System.out.println("请输入第一个多项式的信息:");Item[] item1=creatItemShuZu();Polynomial p1=new Polynomial(item1);System.out.println("请输入第二个多项式的信息:");Item[] item2=creatItemShuZu();Polynomial p2=new Polynomial(item2);Polynomial p=p1.add(p2);System.out.print("(");p1.print();System.out.print(")+(");p2.print();System.out.print(")=");p.print();System.out.println();}private void subtraction()throws Exception{//选择3时System.out.println("请输入第一个多项式的信息:");Item[] item1=creatItemShuZu();Polynomial p1=new Polynomial(item1);System.out.println("请输入第二个多项式的信息:");Item[] item2=creatItemShuZu();Polynomial p2=new Polynomial(item2);Polynomial p=p1.subtraction(p2);System.out.print("(");p1.print();System.out.print(")-(");p2.print();System.out.print(")=");p.print();System.out.println();}private void resultOfPolynomia()throws Exception{//选择4时System.out.println("请输入要输出的多项式的信息:");Item[] item=creatItemShuZu();Polynomial p=new Polynomial(item);System.out.println("请输入x=");double x=scanner.nextDouble();System.out.println(p.result(x));}private Item[] creatItemShuZu()throws Exception{//构造多项式数组System.out.print("项数n=");int n=scanner.nextInt();double []c=new double[n];int [] e=new int[n];Item[] item=new Item[n];System.out.print("请输入各项的系数:");for(int i=0;i<n;i++)c[i]=scanner.nextDouble();System.out.print("请输入各项的指数:");for(int i=0;i<n;i++)e[i]=scanner.nextInt();for(int i=0;i<n;i++){item[i]=new Item(c[i],e[i]);}return item;}}[调试分析]本程序主要的操作对象是记录数组,使用的存储结构是结构体数组。

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

《数据结构》课程设计报告-运动会分数统计一元多项式迷宫求解文章编辑纸牌游戏等南京林业大学数据结构课程设计报告专业:计算机科学与技术课程名称:数据结构姓名:学号:090801126指导老师:时间: 2011年1月目录要点:一.具体内容(题目) (1)二.需求分析(功能要求) (2)三.概要设计(程序设计思想) (3)四.详细设计(源代码) (6)五.调试分析(运行结果显示及说明) (31)六.课设总结 (34)题目1: 运动会分数统计**任务:参加运动会有n个学校,学校编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:7,5,3,2,1,取前三名的积分分别为:5,3,2,;哪些取前五名或前三名由学生自己设定。

(m〈=20,n〈=20);题目2:一元多项式**任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加,相减,并将结果输入;题目4:迷宫求解任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;题目5:文章编辑**功能:输入一页文字,程序可以统计出文字、数字、空格的个数。

静态存储一页文章,每行最多不超过80个字符,共N行;题目6:Joseph环任务:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。

一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。

报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有的人出列为止。

设计一个程序来求出出列的顺序。

2题目7:猴子选大王**任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

题目8:建立二叉树,层序、先序遍历(用递归或非递归的方法都可以) **任务:要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;题目9:纸牌游戏**任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?运动会分数统计1)可以输入前三名或前五名的成绩;2)能统计各学校总分;3)可以按学校编号,学校总分,男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询查询取得前三名或前五名的学校。

规定:输入数据形式和范围:20以内的整数输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求;一元多项式计算能够完成两个多项式的相加,相减,并将结果输入;迷宫求解要求:在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;文章编辑(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数并输出该次数,用函数letter_num(),figure_num(),space_num(),total_num()来实现。

(3)删除某一子串,并将后面的字符前移,用delstr()来实现。

存储结构使用线性表,分别用几个子函数实现相应的功能;2输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;Joseph环利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。

输入数据:建立输入处理数据,输入m的初值,n,输入每个人的密码,建立单循环链表。

输出是什么:建立一个输出函数,将正确的输出序列;猴子选大王输入数据:输入m,n m,n 为整数,n<m输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能;首先用一个数组来存放猴子的编号,从1到m,然后用hzxdw()按题目要求,用两个双重循环来实现猴子大王的选举.建立二叉树typedef struct node 是定义二叉树的存储结构creat(bitree *bt)是用来建立二叉树的输入的levelorder(bitnode *bt,int m)是用来建立层序遍历序列的preorder(bitree bt)是用来实现非递归先序遍历的main是主函数纸牌游戏直接用函数main()按照题目要求的规则,只使用数组和用几个循环来实现.运动会分数统计:先分配存储的空间;输入运动项目个数、参加的学校的个数、男子比赛项目的个数、女子比赛项目的个数;循环每个项目的输入;自行选择取前三名还是前五名,循环输入姓名、成绩、学校;通过调用子函数进行计算;输出结果。

一元多项式计算:通过typedef struct polynode来定义单链表存储多项式的结点结构。

利用尾插法建立一元多项式的链表,先建立多项式的头结点,当表不为空的时候,申请新的结点,2并分配存储空间,在当前的尾表做插入,最后将表的最后一个结点的next置NULL,以表示结束。

两个多项式的相加:当两个多项式均未扫描结束时若指数不等则到下一个结点,若指数相等且不为零时,相应的系数相加,若系数都为零时,则删除接点p与q,并将指针指向下一个结点,否则将q结点加入到和多项式中。

若多项式A中还有剩余,则将剩余的结点加入到和多项式中否则,将B中的结点加入到和多项式中。

两个多项式的相减与相加类似;总流程图:文章编辑:用串来存放一篇文章,文章录入以#作为结束,然后统计文章各种数据,直到#号为止,查找用户要统计的和删除的字符都是一样的思想,删除某一子串,并将后面的字符前移。

Joseph环:建立单循环链表,依次根据提示输入m,n,及code值。

猴子选大王:猴子的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的:typedef struct Mnode2{ int data;struct Mnode *next;}Mnode;根据题目要求,要让这M只猴子顺序围坐一圈,那就得用循环链表king(Linklist L,int n)在主函数中,根据提示先输入猴子的总的数量m,再输入数的数n,最后调用子函数进行选择,输出猴子王的编号。

建立二叉树:在typedef struct node中定义二叉树bitree的左右结点分别为lchild、rchild。

在输入函数中,把输入‘.’代表空;若输入不为空,则分配存储空间,并使其产生左右结点。

在层序遍历函数中,先定义一个数组,然后遍历他的左孩子结点,若不为空就放到数组中,再遍历右孩子结点,若不为空也放到数组中。

二叉树的层序遍历是由上至下一层一层地遍历的。

主函数中,先提示输入一个树调用二叉树输入函数,然后调用层序遍历函数,再调用递归先序遍历函数。

纸牌游戏:通过循环和连续乘-1进行翻牌,把值为1的定义为朝上的牌。

先定义52个牌;把每个牌都赋值为1;通过循环(52张牌的循环和基数的循环),并判断基数,每翻一次牌都乘-1,最后为1的数就是朝上的牌。

时间复杂度为o[1];首先必须确定实现这个课程设计的主算法是使用链式存储结构还是栈又或是数组和广义表。

根据题目要求需要实现的功能有:1、数据录入:输入各种数据;此处即创建链表的过程,调用一个成员函数负值。

在此处还有一个方法实现,即先输入数据,然后再调用构造实现。

2、数据统计:2存储方式的选择,是使用链式存储结构还是栈又或是数组和广义表;遵守先定义后调用的原则;数组定义时注意下标的起始值和上限;链表定义时注意结点中的项;准确运用结点。

3、数据输出:按要求的格式打印调用do循环和for循环,通过遍历链表实现输出,用printf语句输出。

4、查找,修改,删除:这三个功能的核心是寻找成员,先遍历链表,然后寻找对应的ID号来找到结点,然后再对结点实行删除,修改操作。

1.运动会分数统计:#include <stdio.h>#include <stdlib.h>#include <string.H>#include <IO.H>#include <conio.h>#define MAX 50#define NULL 0typedef struct node1{int school; /*学校编号*/int record;2/*项目成绩*/struct node1 *next;}Schools;typedef struct {int item; /*项目编号*/Schools *firstschool;}ITEM;typedef struct {int z; /* 项目总数*/ITEM a[MAX];}ALLitems;typedef struct node2 {int item; /*该学校获奖的项目*/int record; /*项目成绩*/2struct node2 *next;}Items;typedef struct {int school; /*学校编号*/int score; /*学校总分*/int boys; /*男团体总分*/int girls; /*女团体总分*/Items *firstitem;}SCHNode;typedef struct {int n; /* 学校总数*/SCHNode b[MAX];}ALLNode;2ALLitems *g1;ALLNode *g2;void funct1(ALLitems *g1,ALLNode *g2) /* 输入各个项目成绩*/{ Schools *p1;Items *p2;int i,j,k,m,w,h,x;printf("\n*** enter the information of every item ***\n\n");printf("enter the total number of male-items m:");scanf("%d",&m);if(m<0||m>20){ printf("enter error,m<=20,please enter again:");scanf("%d",&m);}printf("enter the total number offemale-items w:");scanf("%d",&w);if(w<0||w>20){ printf("enter error,w<=20,please enter again:");scanf("%d",&w);}printf("enter the total number of schools n:");scanf("%d",&g2->n);if(g2->n<0||g2->n>20){ printf("entr error,n<=20,please enter again:");scanf("%d",&g2->n);}g1->z=m+w;printf("item number for boys 1-%d,girls %d-%d",m,m+1,g1->z);printf("\n\n*** record ***\n(0 stands for ending)");for(k=1;k<=g1->z;k++)/* 对两个邻接表置初态*/{ g1->a[k].item=k;g1->a[k].firstschool=NULL;}for(k=1;k<=g2->n;k++){ g2->b[k].school=k;g2->b[k].firstitem=NULL;g2->b[k].score=g2->b[k].boys=g2->b[k].girl s=NULL;}g2->b[0].score=g2->b[0].boys=g2->b[0].girls =NULL;while(i!=0){ printf("\nitem:");scanf("%d",&i);if(i!=0){ printf("1.the three or 2.the five \n");printf("please choose 1 or 2:");scanf("%d",&j);if(j!=1&&j!=2){ printf("enter error,please enter again:");scanf("%d",&j);}if(j==1) /* 该项目只有前三名时执行此语句*/{ h=3;do{ printf("arrange %d:school(school is number)",h);scanf("%d",&x);p1=(Schools*)malloc(sizeof(Schools));p1->school=x;p2=(Items*)malloc(sizeof(Items));p2->item=i;if(h==3)p2->record=p1->record=2;if(h==2)p2->record=p1->record=3;if(h==1)p2->record=p1->record=5;p1->next=g1->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record; /* 累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record; /* 累计男团体总分*/elseg2->b[x].girls=g2->b[x].girls+p2->record; /* 累计女团体总分*/h--;}while(x!=0&&h!=0);}if(j==2)/* 该项目有前五名时执行此语句*/{ h=5;do{ printf("arrange %d:school(school is number)",h);scanf("%d",&x);p1=(Schools *)malloc(sizeof(Schools));p1->school=x;p2=(Items*)malloc(sizeof(Items));p2->item=i;if(h==5)p2->record=p1->record=1;if(h==4)p2->record=p1->record=2;if(h==3)p2->record=p1->record=3;if(h==2)p2->record=p1->record=5;if(h==1)p2->record=p1->record=7;p1->next=g1->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record; /* 累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record; /* 累计男团体总分*/elseg2->b[x].girls=g2->b[x].girls+p2->record; /* 累计女团体总分*/h--;}while(x!=0&&h!=0);} } }}void save()/* 存储数据文件*/{ FILE *fp1,*fp2;if((fp1=fopen("sports1","wb"))==NULL) { printf("cannot open file.\n");return;}if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1)printf("file write error.\n");fclose(fp1);if((fp2=fopen("sports2","wb"))==NULL) { printf("cannot open file.\n");return;}if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1)printf("file write error.\n");fclose(fp2);}void funct2(ALLNode *g2)/* 输出各学校总分*/{ int k;printf("\n\n*** output the score ***\n"); printf("school\t score \n"); for(k=1;k<=g2->n;k++)printf("%d\t\t %d\n",k,g2->b[k].score); printf("\n");printf("press any butter to the main menu......");getch();}void funct3(ALLNode *g2) /* 按学校编号排序输出*/{ int k;Items *p2;printf("\n\n*** arranging output by school ***\n");printf("school\t\t\t the grade of item\n");for(k=1;k<=g2->n;k++){ printf("%d\t",k);p2=g2->b[k].firstitem;while(p2!=NULL){ printf("item %d:get the grade of %d ",p2->item,p2->record);p2=p2->next;}printf("\n");}printf("\n");printf("press any butter to the main menu......");getch();}void funct4(ALLNode *g2) /* 按学校总分排序输出*/{ int i,j,k;printf("\n\n*** arranging output by the score ***\n");printf("school\t score \n");for(i=2;i<=g2->n;i++){ g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;g2->b[0].girls=g2->b[i].girls;g2->b[0].school=g2->b[i].school;j=i-1;while(g2->b[0].score<g2->b[j].score&&j>0) { g2->b[j+1].score=g2->b[j].score;g2->b[j+1].boys=g2->b[j].boys;g2->b[j+1].girls=g2->b[j].girls;g2->b[j+1].school=g2->b[j].school;j--;}g2->b[j+1].score=g2->b[0].score;g2->b[j+1].boys=g2->b[0].boys;g2->b[j+1].girls=g2->b[0].girls;g2->b[j+1].school=g2->b[0].school;}for(k=1;k<=g2->n;k++)printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score); printf("press any butter to the main menu......");getch();}void funct5(ALLNode *g2) /* 按男团体总分排序输出*/{ int i,j,k;printf("\n*** arranging output by boys ***\n");printf("school\t boys \n");for(i=2;i<=g2->n;i++){ g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;g2->b[0].girls=g2->b[i].girls;g2->b[0].school=g2->b[i].school;j=i-1;while(g2->b[0].boys<g2->b[j].boys&&j>0) { g2->b[j+1].score=g2->b[j].score;g2->b[j+1].boys=g2->b[j].boys;g2->b[j+1].girls=g2->b[j].girls;g2->b[j+1].school=g2->b[j].school;j--;}g2->b[j+1].score=g2->b[0].score;g2->b[j+1].boys=g2->b[0].boys;g2->b[j+1].girls=g2->b[0].girls;g2->b[j+1].school=g2->b[0].school;}for(k=1;k<=g2->n;k++)printf("%d\t\t %d\n",g2->b[k].school,g2 ->b[k].boys);printf("press any butter to the main menu......");getch();}void funct6(ALLNode *g2) /* 按女团体总分排序输出*/{ int i,j,k;printf("\n*** arranging output by girls ***\n");printf("school\t girls \n");for(i=2;i<=g2->n;i++){ g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;g2->b[0].girls=g2->b[i].girls;g2->b[0].school=g2->b[i].school;j=i-1;while(g2->b[0].girls<g2->b[j].girls&&j>0) { g2->b[j+1].score=g2->b[j].score;g2->b[j+1].boys=g2->b[j].boys;g2->b[j+1].girls=g2->b[j].girls;g2->b[j+1].school=g2->b[j].school;j--;}g2->b[j+1].score=g2->b[0].score;g2->b[j+1].boys=g2->b[0].boys;g2->b[j+1].girls=g2->b[0].girls;g2->b[j+1].school=g2->b[0].school; }for(k=1;k<=g2->n;k++)printf("%d\t\t %d\n",g2->b[k].school,g2 ->b[k].girls);printf("press any butter to the main menu......");getch();}void funct7(ALLNode *g2) /* 按学校编号查询学校某个项目情况*/{ int i,j,k;Items *p2;printf("\n *** look for the grade of a item by school ***\n");printf("enter the school you are looking for:");scanf("%d",&i);printf("enter the item you are looking for:");scanf("%d",&j);p2=g2->b[i].firstitem;while(p2!=NULL){ if(p2->item==j)printf("school:%d\t item:%d\t record:%d\n",i,p2->item,p2->record);p2=p2->next;}printf("\n");printf("press any butter to the main menu......");getch();}void funct8(ALLitems *g1) /* 按项目编号查询取得名次的学校*/ { int i,k;Schools *p1;printf("\n*** look for the win-school by item ***\n");printf("enter the item you are looking for:");scanf("%d",&i);printf("item \t\t\tthe win-school\n"); printf("%d\t",i);p1=g1->a[i].firstschool;while(p1!=NULL){ printf(" school %d:get the grade of %d ",p1->school,p1->record);p1=p1->next;}printf("\n\n");printf("press any butter to the main menu......");getch();}void main(){ int t;ALLitems *g1;ALLNode *g2;for(;;){ printf("\t\t the score of the sports \n"); /* 运动会分数统计*/printf("\t\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");printf("\t\t\n");printf("\t\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");printf("\t\t* 1.entering each record and save it *\n"); /* .输入各个项目成绩并存储文件*/printf("\t\t* 2.accumulating the score of each school *\n"); /* 统计各学校总分*/printf("\t\t* 3.arrangingoutput by the school *\n"); /* 按学校编号排序输出*/printf("\t\t* 4.arranging output by the score *\n"); /* 按学校总分排序输出*/printf("\t\t* 5.arranging output by boys *\n"); /* 按男团体总分排序输出*/printf("\t\t* 6.arranging output by girls *\n"); /* 按女团体总分排序输出*/printf("\t\t* 7.looking for the score of a item by school *\n"); /* 按学校编号查询学校某个项目情况*/printf("\t\t* 8.looking for the win-school by item *\n"); /* 按项目编号查询取得名次的学校*/printf("\t\t* 0.exit*\n");printf("\t\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");printf("\t\t please choose (0-8):");loop:scanf("%d",&t);switch(t){ case 1:funct1(g1,g2);save();break;case 2:funct2(g2);break;case 3:funct3(g2);break;case 4:funct4(g2);break;case 5:funct5(g2);break;case 6:funct6(g2);break;case 7:funct7(g2);break;case 8:funct8(g1);break;case 0:exit(0);default:{ printf("enter error,please enter again:");goto loop;}} }}2.一元多项式计算#include<stdafx.h>#include<stdio.h>#include<stdlib.h>#define LEN sizeof(struct poly)struct poly{ int coef;int index;struct poly * next;};void print_poly(struct poly *head){ struct poly *p1;printf("%d次%d项式:",head->index,head->coef);p1=head->next;while(p1!=NULL){ if(p1->coef>0){ if(p1->index!=1&&p1->index!=0) printf("%dx^%d+",p1->coef,p1->index);else if(p1->index==1) printf("%dx+",p1->coef);else printf("%d+",p1->coef);}else if(p1->coef<0){ if(p1->index!=1&&p1->index!=0) printf("(%d)x^%d+",p1->coef,p1->index);else if(p1->index==1) printf("(%d)x+",p1->coef);else printf("(%d)+",p1->coef);}p1=p1->next;}printf("\b \n");}struct poly * creat_poly(){ struct poly *p1,*p2,*head;head=(struct poly *)malloc(LEN);head->coef=head->index=0;head->next=NULL;printf("请输入要创建的多项式(如A(x)=5x^17+9x^8+3x+7,请输入\"5^17 9^8 3^1 7^0 0^0\":\n");p1=(struct poly *)malloc(LEN);scanf("%d^%d",&p1->coef,&p1->index); while(p1->coef!=0){ p2=head;while(p2->next!=NULL){ if(p2->next->index<p1->index) break;p2=p2->next;}p1->next=p2->next;p2->next=p1;(head->coef)++;if(p1->index>head->index)head->index=p1->index;p1=(struct poly *)malloc(LEN);scanf("%d^%d",&p1->coef,&p1->index); }p1->next=NULL;return(head);}struct poly * add_poly(struct poly *head1,struct poly *head2){ struct poly *p1,*p2,*head3,*p3;p1=head1->next;p2=head2->next;head3=(struct poly *)malloc(LEN);p3=head3;head3->coef=head3->index=0;head3->next=NULL;while(p1!=NULL&&p2!=NULL){ if(p1->index>p2->index){ p3->next=p1;(head3->coef)++;p1=p1->next;p3=p3->next;}else if(p1->index==p2->index){ if(p1->coef+p2->coef!=0){ p3->next=(struct poly *)malloc(LEN);(p3->next)->coef=p1->coef+p2->coef;(p3->next)->index=p1->index;(head3->coef)++;p3=p3->next;}p1=p1->next;p2=p2->next;} else if(p1->index<p2->index){ p3->next=p2;(head3->coef)++;p2=p2->next;p3=p3->next;} }if(p1==NULL) p3->next=p2;else if(p2==NULL) p3->next=p1;p3=p3->next;while(p3!=NULL){ (head3->coef)++;p3=p3->next;}if(head3->next!=NULL)head3->index=head3->next->index;return(head3);}struct poly * sub_poly(struct poly *head1,struct poly *head2){ struct poly *p1,*head3;p1=head2->next;while(p1!=NULL){ p1->coef=0-p1->coef;p1=p1->next;}head3=add_poly(head1,head2);return(head3);}int main(){ struct poly *head1,*head2,*head3;char flag;printf("正在创建多项式一:\n");head1=creat_poly();printf("您创建的多项式为:\n\t");print_poly(head1);printf("\n正在创建多项式二:\n"); head2=creat_poly();printf("您创建的多项式为:\n\t");print_poly(head2);do{ printf("\n请选择运算符号(+或-):");getchar();flag=getchar();if(flag!='+'&&flag!='-') printf("\n输入错误!请重新输入!\n");}while(flag!='+'&&flag!='-');switch(flag){ case'+':head3=add_poly(head1,head2);break;case'-':head3=sub_poly(head1,head2);break; }printf("\n计算的结果是:\n");print_poly(head3);printf("\n按[Enter]结束。

相关文档
最新文档