《数据结构》课程设计报告-运动会分数统计 一元多项式 迷宫求解 文章编辑 纸牌游戏等
运动会分数统计(数据结构课程设计)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作直接插入排序。
数据结构课程设计报告一元多项式的计算

一元多项式的计算一、 需求分析建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果二、 概要设计存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。
链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。
创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
基本算法: 1、输入输出(1)功能:将要进行运算的多项式输入输出。
(2)数据流入:要输入的多项式的系数与指数。
(3)数据流出:合并同类项后的多项式。
(4)程序流程图:多项式输入流程图如图1所示。
(5)测试要点:输入的多项式是否正确,若输入错误则重新输入开始 申请结点空间输入多项式各项的系数 x, 指数 y输出已输入的多项式合并同类项结束否是是否输入正确图表 12、多项式的加法(1)功能:将两多项式相加。
(2)数据流入:输入函数。
(3)数据流出:多项式相加后的结果。
(4)程序流程图:多项式的加法流程图如图2所示。
(5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。
图表 2开始 定义存储结果的空链 r是否输出存储多项式的和的链r结束 是 否同指数项系数相加后存入r 直接把p 中各项存入r直接把q 中各项存入r存储多项式2的空链Q 是否为空存储多项式1的空链P 是否为空合并同类项3、多项式的减法(1)功能:将两多项式相减。
(2)数据流入:调用输入函数。
(3)数据流出:多项式相减后的结果。
(4)程序流程图:多项式的减法流程图如图3所示。
(5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。
开始定义存储结果的空链是否合并同类项结束是 否同指数项系数相加后存入r把p 中各项系数改变符号后存入直接把q 中各项存入r存储多项式2的空链Q 是否为空 存储多项式1的空链P 是否为空输出存储多项式图表 3三、详细设计#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct Polynomial{float coef;int expn;struct Polynomial *next;}*Polyn,Polynomial;/**************合并同类项********************/ void Insert(Polyn p,Polyn h){if(p->coef==0) //系数为0的话释放结点free(p);else //如果系数不为0{Polyn q1,q2;q1=h;q2=h->next;while(q2&&p->expn<q2->expn)//查找插入位置{q1=q2;q2=q2->next;}if(q2&&p->expn==q2->expn)//将指数相同相合并{q2->coef+=p->coef;free(p);if(!q2->coef) //系数为0的话释放结点{q1->next=q2->next;free(q2);}}else{ //指数为新时将结点插入p->next=q2;q1->next=p;}}}/*****************合并同类项,并按升幂排序*****************/ Polyn HeBing(Polyn &L){Polyn p1,p2,p3,p4,p5,p6;float t1;int t2;p1=L->next;while(p1!=NULL) //非递减顺序排列{p2=p1->next;while(p2!=NULL){if(p1->expn>p2->expn){t1=p1->coef;t2=p1->expn;p1->coef=p2->coef;p1->expn=p2->expn;p2->coef=t1;p2->expn=t2;}p2=p2->next;}p1=p1->next;}p3=L->next;while(p3!=NULL) //合并同类项{p4=p3->next;while(p4!=NULL){if(p3->expn==p4->expn){p3->coef=p3->coef+p4->coef;p3->next=p4->next;free(p4);p4=p3->next;}elsep4=p4->next;}p3=p3->next;}p5=L;while(p5->next!=NULL) //删除零项{p6=p5->next;if(p6->coef==0){p5->next=p6->next;free(p6);}p5=p5->next;}return L;}/*****************建立一个多项式****************/ Polyn CreatPolyn(Polyn &p){Polyn h,s;p=(Polyn)malloc(sizeof(struct Polynomial));if(!p)exit(1);p->coef=0;p->expn=-1;p->next=NULL;h=p;scanf("%f%d",&p->coef,&p->expn);while(p->coef!=0||p->expn!=0)//输入数据{s=(Polyn)malloc(sizeof(struct Polynomial));if(!s)exit(1);s->coef=p->coef;s->expn=p->expn;h->next=s;h=s;scanf("%f%d",&p->coef,&p->expn);}h->next=NULL;HeBing(p);return p;}/******************多项式的销毁***************/ void DestroyPolyn(Polyn p){Polyn q1,q2;q1=p->next;q2=q1->next;while(q1->next){free(q1);q1=q2;q2=q2->next;}}/*************输出多项式**************/void PrintPolyn(Polyn P){Polyn q=P->next;int flag=1;if(!q){putchar('0');printf("\n");return;} //若多项式为空,输出0while (q){if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项if(q->coef!=1&&q->coef!=-1)//系数非1或-1的普通情况{printf("%g",q->coef);if(q->expn==1) putchar('X');else if(q->expn) printf("X^%d",q->expn);}else{if(q->coef==1){if(!q->expn) putchar('1');elseif(q->expn==1) putchar('X');else printf("X^%d",q->expn);}if(q->coef==-1){if(!q->expn) printf("-1");elseif(q->expn==1) printf("-X");else printf("-X^%d",q->expn);}}q=q->next;flag++;}printf("\n");}/************辅助乘法和加法运算*************/int compare(Polyn a,Polyn b){if(a&&b){if(!b||a->expn>b->expn)return 1;elseif(!a||a->expn<b->expn)return -1;elsereturn 0;}elseif(!a&&b)return -1;//a多项式已空,但b多项式非空elsereturn 1;//b多项式已空,但a多项式非空}/*************多项式的加法*********************/ Polyn AddPolyn(Polyn pa,Polyn pb){Polyn qa=pa->next;Polyn qb=pb->next;Polyn headc,hc,qc;hc=(Polyn)malloc(sizeof(struct Polynomial));hc->next=NULL;headc=hc;while(qa||qb){qc=(Polyn)malloc(sizeof(struct Polynomial));switch(compare(qa,qb)){case 1:{qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break;}case 0:{qc->coef=qa->coef+qb->coef;qc->expn=qa->expn;qa=qa->next;qb=qb->next;break;}case -1:{qc->coef=qb->coef;qc->expn=qb->expn;qb=qb->next;break;}}if(qc->coef!=0){qc->next=hc->next;hc->next=qc;hc=qc;}else free(qc);//当相加系数为0时,释放该结点}HeBing(headc);return headc;}/************多项式的减法*****************/Polyn SubstractPolyn(Polyn pa,Polyn pb){Polyn h=pb;Polyn p=pb->next;Polyn pd;while(p) //将pb的系数取反{p->coef*=-1;p=p->next;}pd=AddPolyn(pa,h);for(p=h->next;p;p=p->next) //恢复pb的系数p->coef*=-1;HeBing(pd);return pd;}/*****************多项式的乘法*********************/Polyn MultiplyPolyn(Polyn pa,Polyn pb){Polyn hf,pf;Polyn qa=pa->next;Polyn qb=pb->next;hf=(Polyn)malloc(sizeof(struct Polynomial));hf->next=NULL;for(;qa;qa=qa->next){for(qb=pb->next;qb;qb=qb->next){pf=(Polyn)malloc(sizeof(struct Polynomial));pf->coef=qa->coef*qb->coef;pf->expn=qa->expn+qb->expn;Insert(pf,hf);//调用Insert函数以合并指数相同的项}}HeBing(hf);return hf;}/*******************主函数*******************/void main(){Polyn p1, p2, p3, p4, p5;CreatPolyn(p1);CreatPolyn(p2);PrintPolyn(p1);PrintPolyn(p2);p3=AddPolyn(p1, p2);PrintPolyn(p3);p4=SubstractPolyn(p1, p2);PrintPolyn(p4);p5=MultiplyPolyn(p1, p2);PrintPolyn(p5);DestroyPolyn(p1);DestroyPolyn(p2);DestroyPolyn(p3);DestroyPolyn(p4);DestroyPolyn(p5);}四、调试结果1.测试的数据及结果2.算法的时间复杂度及改进算法的时间复杂度:一元多项式的加法运算的时间复杂度为O(m+n),减法运算的时间复杂度为O(m-n),其中m,n分别表示二个一元多项式的项数。
数据结构课程设计之迷宫实验报告

详细设计《数据结构项目设计》项目设计文档项目名称:迷宫求解班级:网络工程3101学号:37姓名:胡维国指导教师:张群哲完成时间:2011年6月项目文档一、项目目标:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出。
二、项目进度表:三、源程序、可执行程序见附件(XXXX project目录)系统中使用的自定义类型和函数。
迷宫建立功能模块设计此模块主要由函数initmaze(int maze[M][N]) 来实现,此功能用于用户自己建立迷宫,也可使用预先保存好的迷宫,迷宫是通过矩阵形式表现的,用1和0分别表示墙和通路并用二维数组存储,从而将实际问题转化成数学模型,方便程序的设计,以实现其自能化。
int i,j;int m,n; //*迷宫行,列*//char c;printf("请输入行数: m=");scanf("%d",&m);printf("请输入列数: n=");scanf("%d",&n);printf("\n输入0或1(0为通路,1为墙):\n");for(i=1;i<=m;i++){for(j=1;j<=n;j++){scanf("%d",&maze[i][j]);}}printf("你的矩阵:\n");for(i=0;i<=m+1;i++) //加一圈墙{maze[i][0]=1;maze[i][n+1]=1;}for(j=0;j<=n+1;j++){maze[0][j]=1;maze[m+1][j]=1;}for(i=0;i<=m+1;i++) //*输出迷宫*//for(j=0;j<=n+1;j++)printf("%d ",maze[i][j]);printf("\n");}printf("是否保存你的迷宫(Y/N):");cin>>c;if((c == 'Y')||(c == 'y'))File_Save(maze,m+2,n+2);else if((c == 'N')||(c == 'n'))printf("你的迷宫保存失败!\n");具体的程序实现可参见附录。
课程设计报告--一元多项式计算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中),因此“和多项式”中的结点无须另生成。
迷宫求解数据结构课程设计报告

课程设计报告课题名称:迷宫问题姓名: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年代初,各种版本的数据结构著作就相继出现。
目前在我国,《数据结构》也已经不仅仅是计算机专业的教学计划中的核心课程之一,而且是其它非计算机专业的主要选修课程之一。
《数据结构》在计算机科学中是一门综合性的专业基础课。
数据结构的研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。
在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。
因此,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程,在计算机科学中,数据结构不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据系统及其它系统程序和大型应用程序的重要基础。
《数据结构》课程设计报告-运动会分数统计 一元多项式 迷宫求解 文章编辑 纸牌游戏等

《数据结构》课程设计报告-运动会分数统计一元多项式迷宫求解文章编辑纸牌游戏等南京林业大学数据结构课程设计报告专业:计算机科学与技术课程名称:数据结构姓名:学号: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个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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报数,如此下去,直到所有的人出列为止。
设计一个程序来求出出列的顺序。
题目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()来实现。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(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来定义单链表存储多项式的结点结构。
利用尾插法建立一元多项式的链表,先建立多项式的头结点,当表不为空的时候,申请新的结点,并分配存储空间,在当前的尾表做插入,最后将表的最后一个结点的next置NULL,以表示结束。
两个多项式的相加:当两个多项式均未扫描结束时若指数不等则到下一个结点,若指数相等且不为零时,相应的系数相加,若系数都为零时,则删除接点p与q,并将指针指向下一个结点,否则将q结点加入到和多项式中。
若多项式A中还有剩余,则将剩余的结点加入到和多项式中否则,将B中的结点加入到和多项式中。
两个多项式的相减与相加类似;总流程图:文章编辑:用串来存放一篇文章,文章录入以#作为结束,然后统计文章各种数据,直到#号为止,查找用户要统计的和删除的字符都是一样的思想,删除某一子串,并将后面的字符前移。
Joseph环:建立单循环链表,依次根据提示输入m,n,及code值。
猴子选大王:猴子的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的:typedef struct Mnode{ 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、数据统计:存储方式的选择,是使用链式存储结构还是栈又或是数组和广义表;遵守先定义后调用的原则;数组定义时注意下标的起始值和上限;链表定义时注意结点中的项;准确运用结点。
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; /*项目成绩*/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; /*项目成绩*/struct node2 *next;}Items;typedef struct {int school; /*学校编号*/int score; /*学校总分*/int boys; /*男团体总分*/int girls; /*女团体总分*/Items *firstitem;}SCHNode;typedef struct {int n; /* 学校总数*/SCHNode b[MAX];}ALLNode;ALLitems *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 of female-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].girls=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; /* 累计男团体总分*/ else g2->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; /* 累计男团体总分*/ else g2->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.arranging output 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]结束。