《课程设计说明书(敢死队问题).docx》由会员分享,可在线阅读,更多相关《课程设计说明书(敢死队问题).docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计说明书(敢死队问题) 摘要 C是一种通用的程序设计语言,C语言在很多方面继承和发展了以往许多高级程序设计语言的成功经验和特色,具有书写格式自由、数据类型丰富、语句功能强大、执行速度快和存储控制能力强等优点。 敢死队问题是根据著名的“约瑟夫环”演变而来的敢死队问题的处理与计算来设计的一个系统。整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成敢死队问题的全过程,包括创建三个数据结构(顺序存储结构、单链表存储结构、数组)、数据的处理与计算、数据的分析、结果的输出。 本课程主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点说明了系统的设计思路、总体设计、各个功能模块
2、的设计与实现方法。 关键词:敢死队问题,C语言,数据结构,顺序存储结构,单链表存储结构,数组 目录 1课题背景的介绍 (1) 1.1 课题背景 (1) 1.2 目的 (1) 2需求分析 (2) 2.1 数据需求分析 (2) 2.2 功能需求分析 (2) 3系统总体设计 (3) 3.1 系统模块划分 (3) 3.2 系统模块结构图 (3) 4系统详细设计 (4) 4.1系统操作界面设计 (4) 4.2顺序存储结构 (6) 4.3单链表存储结构 (7) 4.4数组 (9) 5系统连编与运行 (12) 6总结 (13) 参考文献 (14) 1课题背景的介绍 1.1课题背景 有M个敢死队员要炸掉敌人的
3、一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。 排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。 要求:至少采用两种不同的数据结构的方法实现。 1.2 目的 本课题运用C语言进行开发,C语言能够简单的进行编译一些程序,来实现
4、对一些问题的解决。它虽然比较简单的处理一些问题,但却有更高的效率。它能够被大多数用户所接受,因为它能够呈现出清晰的界面,是人们能够很好的理解。能在一些方面给人们更好的服务,成为人们的好帮手。 经过这一个学期对数据结构的学习,我们都学到了不少东西,可能有些学的还不够理想,但无论如何这些知识都为我们的下一步学习打下了坚实的基础。做这么一个课程设计,一方面是为了检查我们一个学期以来的学习成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。 2需求分析 本程序输入队伍人数n为任意的,最终输出记数的初始位置,首先输入一个报数上限m,当达到报数上限时
5、,那名士兵出列执行任务,从下个人开始记数,再次循环,直到只剩一人,得到其在队伍中的位置,通过数学思想求得题目要求即队长为首的情况下需要记数初始位置。 2.1 数据需求分析 本系统的主要数据是正整数。正整数信息包括:队伍的人数,报数的数值,报数开始的位置。 2.2 功能需求分析 本系统主要实现对学生成绩信息进行管理,需要实现以下几个方面的管理功能:(1)创建存储结构:创建顺序表,创建单链表,创建数组。 (2)数据的输入:把队伍的人数,报数的数值输入。 (3)数据的处理;对队伍的人数,报数的数值进行计算。 (4)结果的输出:把报数开始的位置输出。 3.1 系统模块划分 本系统主要是对敢死队问题的处
6、理,包括了创建存储结构、数据的输入、数据的处理、结果的输出等功能。整个系统分为以下几个模块。 1、操作界面模块本模块提供操作界面的信息输出模式。 2、顺序存储结构模块本模块用于通过运用顺序结构模块来计算结果。 3、单链表存储结构模块本模块用于通过运用单链表结构模块来计算结果。 4、数组模块本模块用于通过运用数组结构模块来计算结果。 3.2 系统模块结构图 根据系统功能设计,对应的系统模块结构图如图1所示: 图1 系统模块结构图 4.1 系统操作界面 统过对该系统设计的了解与讨论,同时也为了广大使用者的方便与快捷。我们最后设计了这样的一个界面。首先要让使用者明白怎样使用此系统。这就需要通过界面来
7、给他们一个清晰而明白的空间。而我们设计的这个界面恰好符合了这一要求。通过调用界面函数来使使用者能够很方便的进行操作。 void main() int people,num,choice,pn; while(1) printf(请选择计算方法:1 顺序表 2 单链表 3 数组4 退出n); scanf(%d,&choice); switch(choice) case 1: printf(请输入人数n); scanf(%d,&people); printf(请输入所用计数的数字n); scanf(%d,&num); pn= NListPre(people,num); printf(应从第%d名队员
8、开始数数n,pn); break; case 2: printf(请输入人数n); scanf(%d,&people); printf(请输入所用计数的数字n); scanf(%d,&num); pn= NLinkPre(people,num); printf(应从第%d名队员开始数数n,pn); break; case 3: printf(请输入人数n); scanf(%d,&people); printf(请输入所用计数的数字n); scanf(%d,&num); pn= APre(people,num); printf(应从第%d名队员开始数数n,pn); break; case 4:
9、exit(0); 4.2顺序存储结构 敢死队问题处理系统的顺序存储结构是一个通过运用顺序存储结构来计算和处理此问题的模块。 int NListPre(int people,int num) NList list; int i; int n=0; list.length=people; for(i=0;i list.marki=(i+1); while(list.length1) n=(n+num)%list.length; if(n=0) list.length-; else for(i=n;i list.marki-1=list.marki; list.length-; n-; n=(peo
10、ple-list.mark0+2)%people; if(n=0) return(people); else return(n); 4.3单链表存储结构 敢死队问题处理系统的单链表存储结构是一个通过运用顺序存储结构来计算和处理此问题的模块。 int NLinkPre(int people,int num) int i,m,pn,n=0; NODE *L,*s,*r,*p,*q; pn=people; L=(NODE*)malloc(sizeof(NODE); L-next=NULL; r=L; for(i=0;i s=(NODE*)malloc(sizeof(NODE); p=(NODE*)m
11、alloc(sizeof(NODE); s-mark=(i+1); r-next=s; r=s; s-next=NULL; while(pn1) n=(n+num)%pn; if(n=0) p=L; i=1; while(i p=p-next; i+; p-next=NULL; pn-; else p=L; i=1; while(inext; i+; q=p-next; p-next=q-next; pn-; n-; L=L-next; n=L-mark; m=(people-n+2)%people; if(m=0) return(people); else return(m); 4.4数组 敢死队问题处理系统的数组是一个通过运用顺序存储结构来计算和处理此问题的模块。