猴子选大王课程设计Word文档格式.docx
- 文档编号:21482330
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:18
- 大小:121.85KB
猴子选大王课程设计Word文档格式.docx
《猴子选大王课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《猴子选大王课程设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
1
第2位猴子的编号为:
2
第3位猴子的编号为:
第4位猴子的编号为:
4
要删除的猴子号为:
4
Thekingmonkey’snumberis1
指导教师签字:
年月日
二、进度安排:
1、程序设计
十七周:
周二~周五上午8:
30-11:
30
下午2:
30-5:
00
2、撰写课程设计报告
十八周:
周一~周二自行安排时间
3、程序演示和课程设计报告提交
周三~周五
三、收集的资料及主要参考文献
1.谭浩强著,C程序设计(第三版),北京:
清华大学出版社。
2.GaryJ.Bronson著,刘勇译,C++程序开发与设计(第二版)北京:
人民邮电出版社
3.朱站立编著,数据结构——使用C语言(第4版)北京:
电子工业出版社
4.谭浩强,张基温,唐永炎编著,C语言程序设计教程,北京:
高等教育出版社1992
5.谭浩强编著,C程序设计题解与上机指导(第二版),北京:
清华大学出版社,1992
6.谭浩强编著,QBASIC语言教程,北京:
电子工业出版社,1997
7.谭浩强编著,田数清编著,PASCAL语言程序设计(第二版),北京:
高等教育出版社,1998
8.C程序编写组,常用C语言用法速查手册,北京:
龙门书局,1995
9.HMPeitel,PJDeitei.CHowtoprogrom,secondEdition.蒋才鹏等译,C程序设计教程,北京:
机械工业出版社,2000
10.HerbertSchild著,王曦若,李沛译,ANSIC标准详解,北京:
学院出版社,1994
四、成绩评定:
指导教师评语:
2010年月日
项目
评价
调查论证
工作量、工作态度
实践能力
分析、解决问题能力
质量
创新
得分
目 录
摘要…………………………………………………….……………......….……,……………6
Abstract………………………………………………….……………...…....…,……………...7
第一章课题背景…………………………………….…….……………….…………,………..8
1.1课程设计的目的…………………..……………...…………………………...……….……..8
1.2课程设计的要求………..…………………………..….……….………......……,…………8
1.3课程设计的实验环境………..…………………………………..………...……,……….…8
第二章课程设计详细内容…………..……………………………..………………,,.………..9
2.1问题描述…..……………………………………………………….……..………,,..…….…9
2.2程序代码精解…………………..……..………………....…………….…………,,..…….…9
2.3程序结果运行……………………..……..………………....……..……………,……….…13
总结…….……………………………………………………..………………,……….…..…15
致谢…….……………………………………………………..………………..,…………..…16
参考文献…….………………..………………………………..…………..……,….……….…17
附录主要程序代码………...………………………………..………….……,……..…….…18
摘要
本次程序程序设计的主要目的是解决变相的“约瑟夫环”问题---猴子选大王。
从而使复杂的选举工作变得明朗化。
全程序以数据结构(C语言)中的循环单链表为主要的设计支柱,利用了C语言简洁紧凑、灵活方便,语法限制不太严格,程序设计自由度大,生成目标代码质量高,程序执行效率高等方面的优点。
循环单链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环,基于这样的特点,它适合处理具有环形结构的数据元素序列。
在程序代码的编写中,运用了结构体类型(structNode),动态申请内存空间函数malloc(),释放动态申请内存空间函数free()等类型,同时也具有多种循环、条件语句控制程序流向,如:
嵌套ifelse语句,多重for循环语句,还有链表中结点指针(p->
next),从而使程序完全结构化。
这样编写出的完整程序代码可以实现“猴子选大王”功能,输入猴子的数目m,循环数n,对m个猴子进行编号,通过嵌套ifelse语句,for语句,一遍一遍的循环,判断,删除,直到只剩下最后一个猴子,即大王。
这样就可以实现所需的基本功能了。
关键词:
数据结构;
循环;
单链表
Abstract
Themainpurposeoftheprogramdesignprocesstosolvetheformof"
JosephRing"
intheelection---monkeyking.Socomplexitbecamecleartheelection.
Allproceduresfordatastructures(Clanguage)insingle-cycledesignofthemainpillarsofthelist,usingtheClanguagesimpleandcompact,flexibleandconvenient,thesyntaxisnotstrictlylimited,programdesignflexibilitytoproducehighqualityobjectcode,programexecutiontheadvantagesofhigherefficiency.Single-loopsingle-linkedlistisanotherformoflist,itsstructuralfeaturesisthelastnodelistpointerfieldisnolongertheendofthetag,butpointtothelistthefirstnode,sothatformaringlist,basedonSuchfeatures,ithasaringstructureforthedataprocessingsequenceofelements.
Thepreparationoftheprogramcode,theuseofastructuretype(structNode),dynamicapplicationmemoryfunctionmalloc(),thereleaseofdynamicmemoryfunctionsforfree()andothertypes,butalsowithavarietyofloop,conditionalstatementscontrolprogramflowsuchas:
nestedifelsestatements,multipleforloop,thereisalinkedlistnodepointer(p->
next),tomaketheprogramfullystructured.
Writesuchacompleteprogramcodecanhavea"
monkeykingselected"
feature,enterthenumberofmonkeysm,cyclesn,mweremonkeysonthenumber,bynestedifelsestatements,forstatement,thecycleoverandoveragain,judge,removeduntilthereareonlyamonkey,orking.Thiscanachievetherequiredbasicfunction.
Keywords:
datastructures;
circulation;
singlelinkedlist
第一章课题背景
1.1课程设计目的
从而使复杂的甄选工作变得明朗简单化。
同样,这种解决问题的思想还可以运用到其他具有类似问题的领域,达到一点窥面的效果。
1.2课程设计要求
针对本次猴子数为m,循环数为n的猴子选大王问题,要求如下:
1、基本要求:
输入数据m,n为整数。
中文提示按照m个猴子,数n个数的方法,输出为大王的猴子
几号,建立一个函数来实现此功能。
3、实现方案:
使用循环单链表。
1.3课程设计实验环境
本次课程设计使用的是以C语言为基础的数据结构,C语言作为一种最基本简单的程序设计语言,C语言发展迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。
同时数据结构中的循环单链表适用于解决具有环形结构的数据元素序列。
许多著名的系统软件,如DBASEⅣ都是由C语言编写的。
用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,像PC-DOS、WORDSTAR等就是用这种方法编写的。
1.3.1C语言和循环单链表所具有的特点
归纳起来C语言具有下列特点
1.C是结构式语言。
结构式语言的显著特点是代码及数据的分隔化。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
2.C语言功能齐全。
具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
另外C语言也具有强大的图形功能,支持多种显示器和驱动器。
3.C语言适用范围大。
适合于多种操作系统,如Windows、DOS、UNIX等等;
也适用于多种机型。
4.C语言文件由数据序列组成,可以构成二进制文件或文本文件
常用的C语言IDE(集成开发环境)有MicrosoftVisualC++,Dev-C++,Code:
:
Blocks,BorlandC++,WatcomC++,BorlandC++Builder,GNUDJGPPC++,Lccwin32CCompiler3.1,HighC,TurboC,C-Free,win-tc等等……
循环单链表具有的特点:
1.操作灵活。
单链表中的每个结点,是在需要时才向系统申请,即动态内存申请,节省了大量内存空间。
2.循环单链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环,基于这样的特点,它适合处理具有环形结构的数据元素序列。
第二章课程设计详细内容
在本章节,主要介绍符合要求的程序代码的具体分析。
其各个部分的的具体功能,以及显示出的具体结果。
2.1问题描述
【要求】输入整型数据m,n,输出的形式按照中文提示,m个猴子,数n个数的方法,输出为大王的猴子是几号,由此建立一个函数来实现此功能,最好使用循环单链表。
2.2程序代码精解
完整的程序代码参见后文附表,现进行小部分解说。
2.2.1头文件说明
1.#include<
stdio.h>
此程序主要以C语言为编写语言,因此在程序中要用到系统提供的标准库函数中的输入,输出函数,例如:
scanf()函数,printf()函数。
所以必须在程序开头一行写上#include<
。
例如,程序中用到的相关函数就有printf("
\t\t\tinputthenumberofmonkey:
"
);
scanf("
%d"
&
m);
等。
2.#include<
malloc.h>
在这个程序中,用到的主要是数据结构中的循环单链表方面的相关知识。
我们把由一个数据元素域及一个或若干个指针域组成的结构体称为一个结点。
而在单链表中的每个结点,实在需要时才向系统申请的,也就是所谓的动态内存空间申请。
动态申请的内存空间,当不再需要时,必须由申请者自己释放。
C语言提供了动态申请内存空间的函数malloc()和动态释放内存空间的函数free()。
这些函数都包含在头文件malloc.h中。
所以也必须在程序开头写上#include<
例如,head=q=p=(monkey*)malloc(sizeof(monkey));
这一句就是申请占用字节个数为sizeof(monkey)的monkey类型的一个结点,并且让head,q,p三个指针同时指向这个结点。
3.typedefintDataType;
我们都知道,没有实际含义的数据元素称作抽象数据元素。
在设计时遇到抽象数据元素,我们将用DataType表示该抽象数据元素的数据类型;
而当软件设计问题具体确定时,抽象数据元素的数据类型将被具体的数据类型所取代。
在本程序中,要求线性表的数据类型为int类型,可以通过重新定义抽象数据元素为int类型,来确定该抽象数据元素的数据类型。
即相应的C语句为typedefintDataType;
2.2.2结构体说明
typedefstructNode
{
DataTypedata;
structNode*next;
}monkey;
我们把由一个数据元素域及一个或若干个指针域组成的结构体称为一个结点,其中数据域用来存放数据,指针域用来构造数据元素之间的关联关系。
所以函数中定义了单链表的结构体structNode,其中data域用来存放数据
素,next域用来存放下一个结点的指针。
monkey是structNode类型的变量。
且
链表的结点结构如图2-1
data
next
2-1单链表的结点
2.2.3main()函数说明
voidmain()
monkey*head,*p,*q,*s;
intm,n,i;
printf("
);
scanf("
m);
\n"
\t\t\tinputthecyclenumber:
"
n);
\t\t\t对猴子进行编号:
\n\n"
head=q=p=(monkey*)malloc(sizeof(monkey));
for(i=1;
i<
m;
i++)
{
q=(monkey*)malloc(sizeof(monkey));
q->
data=i;
p->
next=q;
p=q;
printf("
\t\t\t第%d位猴子的编号是\t%d\n"
q->
data,q->
data);
}
q->
next=head;
head->
data=m;
p=head;
q=p->
next;
p->
data,m);
if(m==1)
printf("
\n\t\t\tthekingmonkey'
snumberis1\n"
elseif(m!
=1)
if(n==1)
for(i=1;
=m;
printf("
\t\t\t要删除的猴子号为\t%d\n"
i);
snumberis%d\n"
m);
}
else
n;
{
p=p->
q=q->
if(i==n-1)
{
s=q;
q=q->
p->
free(s);
i=0;
m--;
}
if(m==1)break;
}
snumberis\t%d\n"
}
}
}
1.在相关有效的提示信息后输入m,n:
printf("
2.通过for语句,为m只猴子申请m-1个节点,并将从1—m的猴子依次放入前m-1个节点中,将第m个猴子放入head结点中。
且对猴子编号编好后的单链表如图2-2所示。
head=q=p=(monkey*)malloc(sizeof(monkey));
{
}
m
1
2
3
m-1
headpq
2-2构建好的具有m个结点单链表
3.对具体的m个猴子,分不同的情况找出大王:
①当m==1时,不论n为何值,大王就是这个编号为1的猴子;
如:
if(m==1)
②当m!
=1,但n=1时,前m-1个猴子均要删除,最后留下的第m个猴子就是大王;
elseif(m!
for(i=1;
printf("
}
③当m!
=1,但n!
=1时,根具具体的代码(如下)求出大王.
else
{
{
p=p->
q=q->
if(i==n-1)
{
s=q;
q=q->
p->
free(s);
i=0;
m--;
}
if(m==1)break;
2.3.程序结果运行
如图2-3,根据提示信息输入相对应的m,n值:
2-3输入数据m,n
由上图知,假设输入的m=4,n=3,则对猴子进行编号,并且通过循环单链表对猴子进行删除如图2-4:
2-4对4个猴子进行编号
最后显示最后留下来的猴子的号码,即为猴子大王,如图2-5:
2-5显示猴子大王号码
总结
本次课程设计在整整三天的时间内得以完成,全部内容主要包括:
目录,课题设计背景,详细设计,设计结果及分析等方面的内容,主要通过上网收集资料,查找参考书目,了解图书管理的设计背景,明确设计方向和内容,在此基础上形成了该课程设计的的基础框架。
再进行源代码的创作以及整合,并及时上级进行调试,保证代码的有效性。
具体内容在程序设计各章节均有体现。
在本次课程设计中,我收获了许多。
首先,在课程设计中通过对相关资料的搜索,是我对图书管理方面的流程有了一定的认识,更重要的是在看到现象的同时我看到了它的本质,程序设计确实是一门神奇的工具,它可以通过普普通通的程序代码实现很多法在的流程,在减少人力劳动的同时,展现着科学的魅力。
这样是我更加清楚地认识到自身存在的差距,所学的那点知识是远远不够的,学无止境才是真道理。
其次,课程设计的主要内容和目的是解决实际问题,同时运用所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 猴子 大王 课程设计