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

合集下载

运动会分数统计(数据结构课程设计)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;}}[调试分析]本程序主要的操作对象是记录数组,使用的存储结构是结构体数组。

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

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

南京林业大学数据结构课程设计报告专业:计算机科学与技术课程名称:数据结构姓名:学号: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报数,如此下去,直到所有的人出列为止。

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

题目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) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询查询取得前三名或前五名的学校。

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

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

实验报告(数据结构)学院:信息科学与技术学院班级:姓名:日期:课题一运动会分数统计任务:参加运动会有n个学校,学校编号为1……n。

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

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

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

(m<=20,n<=20)功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的学校。

需求分析:本演示程序中,用户可以对运动会的的成绩一不同的方式进行输入输出等操作。

首先由用户输入运动会的成绩及相关的信息,然后程序会自动将输入的信息进行统计处理。

用于测试程序的数据如下所示:学校数据项目数据:概要设计:void Scanf(); 输入学校运动会成绩void Grade(); 查询成绩void Show(); 输出void Rank(); 查询名次void Show_sumscore();学校总分排序输出void Show_boyscore();男团总分排序输出void Show_girlscore();女团总分排序输出void Show_num(); 学校编号排序输出void Menu(); 总菜单程序图:主函数Scanf 输入函数Init 初始化函数Menu总菜单详细设计:#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量const int n=5; //参加运动会的学校个数const int m=5; //男子项目个数const int w=5; //女子项目个数void Init();//初始化学校总分、男女团体总分void Scanf();//输入学校运动会成绩void Grade();//查询成绩void Show();//输出void Rank();//查询名次void Show_sumscore();//学校总分排序输出void Show_boyscore();//男团总分排序输出void Show_girlscore();//女团总分排序输出void Show_num();//学校编号排序输出void Menu(); //总菜单typedef struct{char *event;int num;int sumscore;int boyscore;int girlscore;int length;int listsize; //当前分配的存储容量}SqList;// 初始化自定大小的线性表Lvoid InitList_Sq(SqList &L,int LIST_SIZE){L.event=(char *)malloc(LIST_SIZE* sizeof(char));if(!L.event) exit (0);L.length=0;L.listsize=LIST_SIZE;}//初始化默认大小的线性表Lvoid InitList_Sq(SqList &L){L.event=(char *)malloc(LIST_INIT_SIZE* sizeof(char)); if(!L.event)exit (0); //存储分配失败L.length=0; //空表长度为0L.listsize=LIST_INIT_SIZE; //初始存储容量}void ShowList_Sq(SqList &L,int Lenth){int i;for (i=0;i<Lenth;i++)printf("项目%d 成绩:%d\n",i+1,L.event[i]);}SqList School[n];void Init(){int i,j;for(i=0;i<n;i++){InitList_Sq(School[i],m+w);School[i].sumscore=0;School[i].boyscore=0;School[i].girlscore=0;School[i].num=i+1;for(j=0;j<m+w;j++){School[i].event[j]=0;}}}void Scanf(){int i,j,x;int a[3]={5,3,2};int b[5]={7,5,3,2,1};int c[10],d[10];printf("\n\n 输入各个项目的前三名或前五名的成绩\n\n\n"); for(i=0;i<m+w;i++){if(i<m){for(j=1;j<=5;j++){do{printf("项目%d 第%d名学校编号:",i+1,j);scanf("%d",&x);printf("\n");if(x>n||x<=0)printf("输入错误,请重新输入!\n");}while(x>n||x<=0);School[x-1].event[i]=b[j-1];}}else{for(j=1;j<=3;j++){do{printf("项目%d 第%d名学校编号:",i+1,j);scanf("%d",&x);printf("\n");if(x>n||x<=0)printf("输入错误,请重新输入!\n");}while(x>n||x<=0);School[x-1].event[i]=a[j-1];}}}printf("\n");//统计各校总分for(i=0;i<n;i++){for(j=0;j<m+w;j++){School[i].sumscore+=School[i].event[j];}}//统计男子总分for (i=0;i<n;i++){for(j=0;j<m;j++){School[i].boyscore+=School[i].event[j];}}//统计女子总分for(i=0;i<n;i++){for(j=m;j<m+w;j++){School[i].girlscore+=School[i].event[j];}}}void Grade(){int k,t;do{printf("\n请输入需要查询的学校编号:");scanf("%d",&k);if(k>n||k<=0)printf("输入出错,请重新输入!\n\n");}while(k>n||k<=0);do{printf("\n请输入需要查询的项目编号:");scanf("%d",&t);printf("\n");if(t>m+w||t<=0)printf("输入出错,请重新输入!\n\n");}while(t>m+w||t<=0);int i=0;while(School[i++].num!=k);printf("第%d个学校项目%d 积分为:%d\n",k,t,School[--i].event[t-1]); }void Show(){for(int i=0;i<n;i++){printf("第%d个学校:\n\n",i+1);ShowList_Sq(School[i],m+w);printf(" 男子总分为:%d\n",School[i].boyscore);printf(" 女子总分为:%d\n",School[i].girlscore);printf(" 学校总分为:%d\n",School[i].sumscore);printf("\n\n");}}void Rank(){int i,j,t;do{printf("请输入需要查询的项目编号:");scanf("%d",&t);if(t>m+w||t<=0)printf("输入出错,请重新输入!\n\n");}while(t>m+w||t<=0);for(i=n-1;i>=0;i--){for(j=0;j<i;j++){if(School[j].event[t-1]<School[i].event[t-1]){SqList temp=School[i];School[i]=School[j];School[j]=temp;}}}//冒泡排序if(t<=m){printf("项目%d 前五名:\n",t);for(i=0;i<5;i++){printf("第%d个学校\n",School[i].num);}}else if(t>m&&t<=m+w){printf("项目%d 前三名:\n",t);for(i=0;i<3;i++){printf("第%d个学校\n",School[i].num);}}elseprintf("输入错误,请重新输入!\n");}void Show_sumscore(){int i,j;for(i=n-1;i>=0;i--){for(j=0;j<i;j++){if(School[j].sumscore<School[i].sumscore) {SqList temp=School[i];School[i]=School[j];School[j]=temp;}}}printf("按学校总分排列:\n\n");Show();}void Show_boyscore(){int i,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].boyscore<School[i].boyscore){SqList temp=School[i];School[i]=School[j];School[j]=temp;}printf("按男子总分排列:\n\n");Show();}void Show_girlscore(){int i,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].girlscore<School[i].girlscore) {SqList temp=School[i];School[i]=School[j];School[j]=temp;}printf("按女子总分排列:\n\n");Show();}void Show_num(){int i,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].num>School[i].num){SqList temp=School[i];School[i]=School[j];School[j]=temp;}printf("按学校编号排列:\n\n");Show();void Menu() //菜单函数{int choose;while(1){printf(" 运动会统计系统\n\n");printf("*****************************************************************\n"); printf(" 1、按学校编号排序输出\n");printf(" 2、按学校总分排序输出\n");printf(" 3、按男团总分排序输出\n");printf(" 4、按女团总分排序输出\n");printf(" 5、按学校编号查询学校某个项目的情况\n");printf(" 6、按项目编号查询取得前三名或前五名的学校\n");printf(" 7、退出\n");printf("*****************************************************************\n"); printf("\n\n -------------选择编号------------\n");scanf("%d",&choose);if(choose==1)Show_num();if(choose==2)Show_sumscore();if(choose==3)Show_boyscore();if(choose==4)Show_girlscore();if(choose==5)Grade();if(choose==6)Rank();if(choose==7)break;}}int main(){ int i=0;for(i=0;i<80;i++)printf("*");printf("\n 编号运动会项目 \n"); printf(" 1 男子100米 \n"); printf(" 2 男子200米 \n"); printf(" 3 男子400米 \n"); printf(" 4 男子跳高 \n"); printf(" 5 男子跳远 \n"); printf(" 6 女子跳高 \n"); printf(" 7 女子跳远 \n"); printf(" 8 女子铅球 \n"); printf(" 9 女子100米 \n");printf(" 10 女子400米\n\n");for(i=0;i<80;i++)printf("*");printf("\n");printf(" 编号参与运动会的学校 \n");printf(" 1 东华大学 \n");printf(" 2 上海交大 \n");printf(" 3 复旦大学 \n");printf(" 4 同济大学 \n");printf(" 5 华东师范大学 \n\n"); for(i=0;i<80;i++)printf("*");printf("\n");Init();Scanf();Menu();return 0;}调试分析:1,在编译过程中使用了结构体来存储航班和客户的相关信息,注意到使用结构体可以定义自己需要的类型,同时还可以对其成员进行各种操作,有效地解决了数据的建立和修改;2,在编程时建立了文件,将自己输入的文件和系统内部存入文档,有效地实现了大容量数据的操作;3,运用菜单功能,是程序和实际生活中的情况更加接近,有利于程序的广泛利用;4,在编程中学习到了编程的很多好的习惯,养成了添加注释的习惯。

运动会分数统计系统数据结构课程设计论文

运动会分数统计系统数据结构课程设计论文
4)培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
5)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
1.2 课程设计内容
问题描述:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。
关键字:运动会,计分系统,数据结构,程序
1
1.1设计目的
《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

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

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

吉林大学软件学院课程设计报告课程名称:数据结构课程设计课程题目:迷宫问题姓名:***学号: ********软件学院2009级《数据结构》课程设计题目一: 迷宫问题[实验目的]综合运用数组、递归等数据结构知识,掌握、提高分析、设计、实现及测试程序的综合能力。

[实验内容及要求]以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

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

(1)根据二维数组,输出迷宫的图形。

(2)探索迷宫的四个方向:RIGHT为向右,DOWN向下,LEFT向左,UP向上,输出从入口到出口的行走路径。

[测试数据]左上角(1,1)为入口,右下角(8,9)为出口。

[实现方法]可使用回溯方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。

[具体思路及结果]首先,事先声明好矩阵,矩阵长宽,栈顶元素,矩阵点左边等。

然后,要求用户尽享交互输入迷宫(maze)各个点处的值(1或0)保存并初始化栈顶元素,置所有方向数为下。

之后,一比较整洁大方的形式打印原迷宫供用户查看。

同时,开始本程序的重点,回溯算法,以1,2,3,4分别表示下上左右。

多次使用for循环寻找可以到达出口的路径,期间分别先后试探下,左,上,右置已经走过的点为2防止死循环,寻找完后存在TOP[]栈中。

最后,打印找到的当前迷宫路径并以(坐标1)——>(坐标2)的形式输出路径,并且在原迷宫的基础上表示出当前找到的路径,以#代表走过的路径0代表没有障碍的地方,1代表障碍,画出迷宫路径图,并且立刻执行下一次循环,寻找下一条可通过的路径,并还原迷宫图,继续寻找路径知道找到所有解后自动退出。

[具体代码]#include <stdio.h>#include <stdlib.h>#define n1 5#define n2 5typedef struct node{int x;//存x坐标int y;//存y坐标int c;//存该点可能的下点所在的方向,表示向1表示向下,2左,3向上,4向右}linkstack;linkstack top[25];int rows=0;int cols=0;int i,j,k,m,p,q=0;int maze[n1][n2];void main(){for(p=0;p<=n1-1;p++){for(q=0;q<=n2-1;q++){printf("请输入第%d行第%d列的数\n",p+1,q+1);scanf("%d",&maze[p][q]);}}//初始化top[],置所有方向为下for(i=0;i<n1 * n2;i++){top[i].c=1;}printf("the maze is:\n");//打印原迷宫for(i=0;i<n1;i++){for(j=0;j<n2;j++)printf(maze[i][j]?"1 ":"0 ");printf("\n");}i=0;top[i].x=0;top[i].y=0;maze[0][0]=2;//回溯算法do{if(top[i].c<5) //还可以向前试探{if(top[i].x==4&&top[i].y==4) //已找到一个组合{ //打印路径printf("The way %d is:\n",m++);for(j=0;j<=i;j++){printf("(%d,%d)-->",top[j].x,top[j].y);}printf("\n");//打印选出路径的迷宫for(j=0;j<n1;j++){for(k=0;k<n2;k++){if(maze[j][k]==0)printf("0 ");else if(maze[j][k]==2) printf("# ");else printf("1 ");}printf("\n");}maze[top[i].x][top[i].y]=0;top[i].c=1;i--;top[i].c+=1;continue;}switch(top[i].c) //向前试探{case 1:{if(maze[top[i].x][top[i].y+1]==0)//下{i++;top[i].x=top[i-1].x;top[i].y=top[i-1].y+1;maze[top[i].x][top[i].y]=2;}else{top[i].c+=1;}break;}case 2:{if(maze[top[i-1].x-1][top[i].y]==0)//左{i++;top[i].x=top[i-1].x-1;top[i].y=top[i-1].y;maze[top[i].x][top[i].y]=2;}else{top[i].c+=1;}break;}case 3:{if(maze[top[i].x][top[i].y-1]==0)//上{i++;top[i].x=top[i-1].x;top[i].y=top[i-1].y-1;maze[top[i].x][top[i].y]==2;}else{top[i].c+=1;}break;}case 4:{if(maze[top[i].x+1][top[i].y]==0)//右{i++;top[i].x=top[i-1].x+1;top[i].y=top[i-1].y;maze[top[i].x][top[i].y]=2;}else{top[i].c+=1;}break;}}}else //回溯{if(i==0) return; //已找完所有解maze[top[i].x][top[i].y]=0;top[i].c=1;i--;top[i].c+=1;}}while(1);}[程序效果图]。

数据结构课程设计---运动会分数统计系统

数据结构课程设计---运动会分数统计系统

数据结构课程设计运动会分数统计一.需求分析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. 基本要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的学校。

3.测试数据1)首先进入成绩录入界面,先输入学校编号1,再输入学校1各个项目成绩0或1(‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次); 然后再输入第二个学校编号2,再输入成绩;当输入其他的学校编号和成绩会提示错误输入,重新输入。

2)然后进入总目录,输入:1 统计各学校总分并输出;3)输入:2 按学校编号排序输出;4)输入:3 按学校总分排序输出;5)输入:4 按男团体总分排序输出;6)输入: 5 按女团体总分排序输出;7) 输入:6 按学校编号查询学校某个项目情况;8)输入:7 按项目编号查询取得名次的学校;9)输入:0 退出系统;10)输入其他数据会提示错误输入,重新输入。

二、概要设计1 结构体运动项目{ 项目编号;名次;};学校{ 学校编号;项目;团体总分;男团体总分;女团体总分;};2 主程序(main)包括登陆欢迎程序,分数录入程序,查询程序,退出程序3 程序模块机之间的调用关系流程图三、详细设计1、宏定义:#define N 2启动程序录入分数显示主目录统计各学校总分按学校编号排序按学校总分排序按女团体总分排按学校编号查询学校某个项目情况按男团体总分排按项目编号查询取得名次的学校退出系统用户选择某命令,产生相应的操作显示结果,用户选择返回主目录或退出退出程序#define bm 4 #define gm 32、数据类型定义(1)运动项目的定义:struct match {int matchnum; int rank[3]; }mat[bm+gm];(2)学校的定义:struct school { int schoolnum;struct match mat[bm+gm]; int total; int boytotal;int girltotal;}sch[N];3、函数之间的调用关系mainxunhuantotaljisuainputhuanyingni funct4 funct6 funct5funct3 funct2 funct1 funct0 mulu funct7system4、算法设计主要算法的设计思想:本程序主要是使用顺序表来实现操作。

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

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

运动会分数统计数据结构报告一、概述本报告主要介绍了运动会分数统计系统的数据结构。

运动会分数统计系统需要对运动员的各项比赛成绩进行记录、统计和分析,以便为比赛组织者和运动员提供全面、准确的数据支持。

为了实现这一目标,我们设计了一个合理的数据结构,以存储和处理运动会分数数据。

二、数据结构设计1. 运动员信息表字段名称字段类型字段含义运动员ID INT 唯一标识运动员的编号姓名 VARCHAR(50) 运动员的姓名性别 CHAR(1) 运动员的性别(男/女)年龄 INT 运动员的年龄所属单位 VARCHAR(100) 运动员所属的单位或学校名称2. 比赛项目表字段名称字段类型字段含义项目ID INT 唯一标识比赛项目的编号项目名称 VARCHAR(50) 比赛项目的名称项目类型 VARCHAR(50) 比赛项目的类型(田径、游泳、篮球等)项目难度系数 FLOAT 比赛项目的难度系数,用于计算总成绩时进行加权处理3. 比赛成绩表字段名称字段类型字段含义成绩ID INT 唯一标识比赛成绩的编号运动员ID INT 与运动员信息表相关联的外键,标识产生该成绩的运动员项目ID INT 与比赛项目表相关联的外键,标识该成绩所属的比赛项目成绩时间戳 TIMESTAMP 该成绩的记录时间(精确到秒)成绩分数 FLOAT 该成绩对应的分数值(根据项目难度系数计算得出)三、数据结构特点1. 分层设计:数据结构分为三个层次,分别是运动员信息层、比赛项目层和比赛成绩层,各层之间通过外键关联,便于进行数据查询和更新操作。

2. 数据完整性:通过外键关联确保了数据的完整性,即一个运动员只能对应一个成绩记录,一个成绩只能对应一个比赛项目。

3. 可扩展性:数据结构设计考虑了未来可能增加的字段和表,例如可以增加教练信息表、领队信息表等,便于对数据进行扩展和补充。

4. 数据灵活性:数据结构设计允许对字段进行灵活调整,例如可以根据需要增加或删除某些字段,以适应实际需求的变化。

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

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

迷宫求解数据结构课程设计报告1. 背景介绍迷宫是一个前者和后者可能处于不同地位的二维结构。

其中的前者被作为目标和后者被视作障碍物,因此前者需要在迷宫中找到一条通往目标的路径。

解决这种问题的算法称为迷宫求解算法,通常采取的方法是搜索。

2. 设计目的和实现方法本次课程设计的主要目的是设计一个数据结构,能够支持迷宫求解算法。

在实现的过程中,我们采取了广度优先搜索算法(BFS)和深度优先搜索算法(DFS)。

广度优先搜索算法是一种基于队列的算法,它从起始顶点开始,依次访问所有的邻接顶点。

深度优先搜索算法则是一种基于栈的算法。

其每次将搜索到的新顶点推入栈中,并在访问完该顶点的所有邻接顶点后将该顶点从栈中弹出。

为了存储迷宫,我们选择了二维数组。

迷宫中墙壁被表示为1,而其它空地则被表示为0。

在实现过程中,我们定义了一个Maze类,其成员变量包括: •rows:迷宫的行数•cols:迷宫的列数•start:起始节点•end:结束节点•maze:存储迷宫的二维数组Maze类还定义了若干方法,包括:•构造方法,用于初始化迷宫和起始节点、结束节点•is_valid:用于判断给定坐标是否有效•is_end:用于判断给定坐标是否为结束节点•bfs:采用广度优先搜索算法求解迷宫•dfs:采用深度优先搜索算法求解迷宫3. 算法实现在 bfs 方法中,我们定义一个队列并将起始节点加入队列中。

我们然后开始循环,直到队列为空,为止。

在每次循环中,我们从队列的前面取出节点,并以其作为当前位置,访问其所有相邻节点。

如果某个相邻节点尚未被访问,我们将其加入队列中,并将其“父节点”设为当前节点,以便在搜索完成后回溯路径。

def bfs(self):queue = deque([self.start])visited = set([self.start])self.parents[str(self.start)] =Nonewhile queue:cur_pos = queue.popleft()if self.is_end(cur_pos):self.draw_path()returnfor next_pos in self.next_positions(cur_pos):if next_pos in visited:continuevisited.add(next_pos)self.parents[str(next_pos)] = cur_posqueue.append(next_pos)在 dfs 方法中,我们定义一个栈并将起始节点压入栈。

  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]结束。

相关文档
最新文档