生死者游戏数据结构课设.docx

上传人:b****8 文档编号:9859250 上传时间:2023-05-21 格式:DOCX 页数:21 大小:92.90KB
下载 相关 举报
生死者游戏数据结构课设.docx_第1页
第1页 / 共21页
生死者游戏数据结构课设.docx_第2页
第2页 / 共21页
生死者游戏数据结构课设.docx_第3页
第3页 / 共21页
生死者游戏数据结构课设.docx_第4页
第4页 / 共21页
生死者游戏数据结构课设.docx_第5页
第5页 / 共21页
生死者游戏数据结构课设.docx_第6页
第6页 / 共21页
生死者游戏数据结构课设.docx_第7页
第7页 / 共21页
生死者游戏数据结构课设.docx_第8页
第8页 / 共21页
生死者游戏数据结构课设.docx_第9页
第9页 / 共21页
生死者游戏数据结构课设.docx_第10页
第10页 / 共21页
生死者游戏数据结构课设.docx_第11页
第11页 / 共21页
生死者游戏数据结构课设.docx_第12页
第12页 / 共21页
生死者游戏数据结构课设.docx_第13页
第13页 / 共21页
生死者游戏数据结构课设.docx_第14页
第14页 / 共21页
生死者游戏数据结构课设.docx_第15页
第15页 / 共21页
生死者游戏数据结构课设.docx_第16页
第16页 / 共21页
生死者游戏数据结构课设.docx_第17页
第17页 / 共21页
生死者游戏数据结构课设.docx_第18页
第18页 / 共21页
生死者游戏数据结构课设.docx_第19页
第19页 / 共21页
生死者游戏数据结构课设.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

生死者游戏数据结构课设.docx

《生死者游戏数据结构课设.docx》由会员分享,可在线阅读,更多相关《生死者游戏数据结构课设.docx(21页珍藏版)》请在冰点文库上搜索。

生死者游戏数据结构课设.docx

生死者游戏数据结构课设

课程设计报告

课程名称《数据结构》

课题名称生死者游戏

专业信息管理与信息系统

班级1301

学号201303110125

姓名肖宏亮

指导教师赵锦元、谢雅、李峰

 

2014年12月18日

湖南工程学院

课程设计任务书

 

课程名称数据结构

课题生死者游戏

 

专业班级1301

学生姓名肖宏亮

学号21303110125

指导老师赵锦元、谢雅、李峰

审批

 

任务书下达日期2014年11月25日

任务完成日期2014年12月18日

 

一、设计内容与设计要求

1.设计内容:

[问题描述] 每N(N>k)个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分,因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。

无奈,大家只得同意这种办法,并拟定N个人围城一圈,由第一个人数起,依次报数,数到第k人,便把他投入大海中,然后再从他的下一个人数起,数到第k人,再将他扔进大海中,如此循环地进行,直至剩下N/2个乘客为止。

问哪些位置是将被扔进大海的位置。

[基本功能]

(1)实时显示每仍一个旅客之前,按序号从小到大的顺序显示当前在船上的旅客的编号。

(2)变换N和k的值,看显示结果是否仍然正确。

2.设计要求:

1).设计正确,方案合理。

2).界面友好,使用方便。

3).程序精炼,结构清晰。

4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。

5).实际操作过程中遇到的问题及解决方法:

设计总结及心得体会。

6).上机演示。

 

二、进度安排

第15周星期二14时:

00分——17时:

30分

星期三14时:

00分——17时:

30分

星期四14时:

00分——17时:

30分

第16周星期二14时:

00分——17时:

30分

星期三14时:

00分——17时:

30分

星期四14时:

00分——17时:

30分

附:

课程设计报告装订顺序:

封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。

正文的格式:

一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

正文的内容:

一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的源代码,要求对程序写出必要的注释)。

正文总字数要求在5000字以上(不含程序源代码)。

 

 

目录

1.系统需求分析1

1.1问题描述1

1.2功能要求1

2.概要设计1

2.1系统总体设计1

2.2各模块的功能1

3.详细设计2

3.1采用c语言定义相关的数据结构2

3.2mian()函数2

3.3CreateList()函数4

3.4DispList()函数5

3.5ListDelete()函数6

3.6函数关系调用图7

4.系统调试及运行结果8

4.1程序调试中的问题8

4.2运行结果8

5.心得与体会9

6.附录10

6.1源代码10

6.2参考文献15

7.评分表16

1.系统需求分析

1.1问题描述

每N(N>k)个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分,因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。

无奈,大家只得同意这种办法,并拟定N个人围城一圈,由第一个人数起,依次报数,数到第k人,便把他投入大海中,然后再从他的下一个人数起,数到第k人,再将他扔进大海中,如此循环地进行,直至剩下N/2个乘客为止。

问哪些位置是将被扔进大海的位置。

1.2功能要求

(1)实时显示每仍一个旅客之前,按序号从小到大的顺序显示当前在船上的旅客的编号。

(2)变换N和k的值,看显示结果是否仍然正确。

2.概要设计

2.1系统总体设计

程序共有三个子函数和一个主函数

(1)建立循环单链表

(2)选择生者与死者的函数

(3)输出所有生者的函数

(4)主函数则通过调用这些子函数而达到它所要的结果

2.2各模块的功能

(1)LinkList*CreateList(LinkList*head)是用尾插法建立单循环链表的函数,将链表的首尾连起来。

这样定义的链表与一般的链表结构完全一样,数据域用一个整数来表示位置,删除元素时不需要移动大量元素位置,方便操作。

(2)intListDelete(LinkList*head,intt)是选择生者与死者的函数,要删除第k个节点,必须找到第k-1个节点。

P指向第k-1个节点,q指向第k个节点,删除q->data,再p->next=q->next,最后释放q节点。

(3)voiddispList(LinkList*head)是输出生者序号的函数。

3.详细设计

3.1采用c语言定义相关的数据结构

typedefstructLNode//定义结构体

{

intdata;

structLNode*next;

}LinkList;

3.2mian()函数

用来调用个功能函数,实现参与游戏人数的编号,输出有多少人,删除死亡的人数,具体程序如下

voidmain()//主函数

{

charx='y';//设定游戏是否继续的字符'y'

intt;

printf("\t**************************************************************");

printf("\n\n\n\n\t\t\t--------欢迎进入生死者游戏--------\n\n\n\n");

printf("\t**************************************************************\n\n\n\n");

system("pause");

system("cls");

printf("\n\n游戏规则:

\n-----1.请输入大于0的人数以保证船上的人不为空-----\n");

printf("-----2.请输入的死亡数字限不能大于船上的人数-----\n");

system("pause");

system("cls");

while(x=='y')

{

LinkList*L=NULL;

printf("请输入参与游戏的人数:

\n");

scanf("%d",&t);

T=t;

while(t<=0)

{

printf("输入错误,请重输\n");

scanf("%d",&t);

T=t;

}

printf("请输入死亡数字:

\n");

scanf("%d",&k);

while(k<=0)

{

printf("输入错误,请重输\n");

scanf("%d",&k);

}

while(k>T)

{

printf("输入有误请重输\n");

printf("请输入参与游戏的人数:

\n");

scanf("%d",&t);

T=t;

printf("请输入死亡数字:

\n");

scanf("%d",&k);

}

printf("******************************************\n");

printf("参与游戏的人员编号如下:

\n");

L=CreateList(L);//调用创建链表函数

ListDelete(L,t);//调用删除函数

printf("******************************************\n");

printf("是否继续游戏(是:

请输入y否:

请输入其它)");

getchar();

scanf("%c",&x);

system("pause");

system("cls");

}

}

3.3CreateList()函数

先定义一个始终指向头结点的链表,在定义一个报数i,如果头结点为空的话,创建头结点,并将它赋给另外一个头结点为空的链表p,头结点已经创建,在创建一个新的链表q,并把它连接在头结点之后,具体程序如下

LinkList*CreateList(LinkList*head)//创建循环单链表

{

LinkList*p,*q=NULL;

inti=1;

while(i<=T)

{

if(head==NULL)//当头节点为空时

{

head=(LinkList*)malloc(sizeof(LinkList));

head->data=i++;p=head;

}

else//当头节点已存在时

{

q=(LinkList*)malloc(sizeof(LinkList));

q->data=i++;

p->next=q;

p=q;

}

}

p->next=head;//构成循环单链表

returnhead;

}

3.4DispList()函数

在输出循环单链表时,先判断头结点是否为空,在不为空的情况下,定义一个变量i,i从1直到T开始循环,输出循环单链表,具体程序如下

voidDispList(LinkList*head)//显示循环链表

{

LinkList*p=head;

inti;

if(p)//当头结点存在时输出单链表

{

for(i=1;i<=T;i++)

{

printf("%3d",p->data);

p=p->next;

if(i%10==0)

printf("\n");

}

}

}

3.5ListDelete()函数

在删除循环单链表中结点,我们需要注意的问题是删除的是否为第一个结点的情况,这种情况则需要单独考虑,再者,我们需要注意的是由于创建的是一条始终指向头结点的循环单链表,所以当删除的是第一个结点的时候,我们要将头指针往后移,保持链表的完整性。

具体程序如下

intListDelete(LinkList*head,intt)//删除单链表

{

LinkList*p,*q;

p=q=head;

if(!

head)//当头结点为空时

return0;

else

{//当头结点不为空时

while(T>t/2)

{

DispList(head);

printf("\n******************************************\n");

if(k==1)//当删除的是第一个结点时

{

p=q->next;

printf("\n被扔下海的人为:

%3d",q->data);

head=head->next;

free(q);

q=p;

T--;

printf("\n船上剩余人为:

\n");

}

else

{

for(inti=1;i

p=p->next;

q=p->next;

printf("\n被扔下海的人为:

%3d",q->data);

if(head->data==q->data)

head=head->next;

p->next=q->next;

free(q);

T--;

p=p->next;

printf("\n船上剩余人为:

\n");

}

}

DispList(head);

printf("\n");

return1;

}

}

3.6函数关系调用图

 

4.系统调试及运行结果

4.1程序调试中的问题

(1)程序初具雏形时,存在着几个语法错误,比如说定义结构体时使类型不一致,导致后面所用到的类型缺少定义。

还有经常混淆中英文的标点符号,使得程序出错,不过这些都是小问题,在以后写程序的过程中细心即能克服。

(2)在写输出函数dispList(head)时候,开始运用的是用while来判断头结点是否为空,这样就忽略了头结点为空的时候,所以应该将while改成if。

考虑到输出时的界面问题,用if(i%10==0)printf("\n");语句来规范化界面。

(3)在写创建链表函数CreateList(head)时,首先我将0赋给count,但是后面我定义的是head->data=count++,这样就导致最后一个人员的游戏信息无法输出,这时应该将1赋给count或者将函数中的语句定义为head->data=++count,这样就能改正错误,

(4)在主函数中,程序执行的时候,没有办法继续输入,这样的话,我在程序的输入语句之前添加一条语句getchar(),这样的话,程序就能连续进行。

4.2运行结果

(1)进入游戏,友好界面

(2)游戏规则

(3)游戏人数10,死亡数字3,及他们的编号

(4)一次筛选的结果

5.心得与体会

课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。

同时,设计让我感触很深。

使我对抽象的理论有了具体的认识。

不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

更重要的是,在实验课上,我们学会了很多学习的方法。

而这是日后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

这对于我们的将来也有很大的帮助。

实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。

果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。

6.附录

6.1源代码

#include

#include

#include

intT,k;//定义全局变量,其中T为参与游戏的总人数,K为死亡数字

typedefstructLNode//定义结构体

{

intdata;

structLNode*next;

}LinkList;

LinkList*CreateList(LinkList*head)//创建循环单链表

{

LinkList*p,*q=NULL;

inti=1;

while(i<=T)

{

if(head==NULL)//当头节点为空时

{

head=(LinkList*)malloc(sizeof(LinkList));

head->data=i++;p=head;

}

else//当头节点已存在时

{

q=(LinkList*)malloc(sizeof(LinkList));

q->data=i++;

p->next=q;

p=q;

}

}

p->next=head;//构成循环单链表

returnhead;

}

voidDispList(LinkList*head)//显示循环链表

{

LinkList*p=head;

inti;

if(p)//当头结点存在时输出单链表

{

for(i=1;i<=T;i++)

{

printf("%3d",p->data);

p=p->next;

if(i%10==0)

printf("\n");

}

}

}

intListDelete(LinkList*head,intt)//删除单链表

{

LinkList*p,*q;

p=q=head;

if(!

head)//当头结点为空时

return0;

else

{//当头结点不为空时

while(T>t/2)

{

DispList(head);

printf("\n******************************************\n");

if(k==1)//当删除的是第一个结点时

{

p=q->next;

printf("\n被扔下海的人为:

%3d",q->data);

head=head->next;

free(q);

q=p;

T--;

printf("\n船上剩余人为:

\n");

}

else

{

for(inti=1;i

p=p->next;

q=p->next;

printf("\n被扔下海的人为:

%3d",q->data);

if(head->data==q->data)

head=head->next;

p->next=q->next;

free(q);

T--;

p=p->next;

printf("\n船上剩余人为:

\n");

}

}

DispList(head);

printf("\n");

return1;

}

}

voidmain()//主函数

{

charx='y';//设定游戏是否继续的字符'y'

intt;

printf("\t**************************************************************");

printf("\n\n\n\n\t\t\t--------欢迎进入生死者游戏--------\n\n\n\n");

printf("\t**************************************************************\n\n\n\n");

system("pause");

system("cls");

printf("\n\n游戏规则:

\n-----1.请输入大于0的人数以保证船上的人不为空-----\n");

printf("-----2.请输入的死亡数字限不能大于船上的人数-----\n");

system("pause");

system("cls");

while(x=='y')

{

LinkList*L=NULL;

printf("请输入参与游戏的人数:

\n");

scanf("%d",&t);

T=t;

while(t<=0)

{

printf("输入错误,请重输\n");

scanf("%d",&t);

T=t;

}

printf("请输入死亡数字:

\n");

scanf("%d",&k);

while(k<=0)

{

printf("输入错误,请重输\n");

scanf("%d",&k);

}

while(k>T)

{

printf("输入有误请重输\n");

printf("请输入参与游戏的人数:

\n");

scanf("%d",&t);

T=t;

printf("请输入死亡数字:

\n");

scanf("%d",&k);

}

printf("******************************************\n");

printf("参与游戏的人员编号如下:

\n");

L=CreateList(L);//调用创建链表函数

ListDelete(L,t);//调用删除函数

printf("******************************************\n");

printf("是否继续游戏(是:

请输入y否:

请输入其它)");

getchar();

scanf("%c",&x);

system("pause");

system("cls");

}

}

6.2参考文献

[1]李春葆.数据结构教程[M].清华大学出版社.2002.

[2]唐皓强.C语言程序设计[M].清华大学出版社1997.

 

7.评分表

计算机与通信学院课程设计评分表

课程名称:

数据结构

项目

评价

设计方案的合理性与创造性

设计与调试结果

设计说明书的质量

答辩陈述与回答问题情况

课程设计周表现情况

综合成绩

教师签名:

日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2