王振第一次试验报告猴子选大王Word文档下载推荐.docx
《王振第一次试验报告猴子选大王Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《王振第一次试验报告猴子选大王Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。
if(ptr2==ptr+n)
ptr2=ptr;
/*指针所指元素不为0时计数器加1.*/
if(*ptr2!
=0)
i++;
/*计数器数到m时将指针所指元素设为0*/
if(i==m)
*ptr2=i=0;
count--;
//用于终止循环
/*最后不为0的元素的值即为大王的编号*/
for(ptr2=ptr;
;
ptr2++)
printf("
第%d个猴子是大王\n"
*ptr2);
break;
数据记录和分析
以下是程序调试界面:
输入猴子数为100报数为50
输出“第95个猴子是大王”,程序结束。
以下是其他数据调试结果列表
序列号
输入的猴子数量M
输入的报数数字N
输出结果
是否正确
001
80
40
19
是
002
98
35
13
003
125
67
81
004
56
36
4
005
37
26
006
84
29
72
007
23
11
……
源程序
#include<
stdio.h>
stdlib.h>
//使用calloc()函数
voidFindKing_pointer(int,int,int*);
//移动指针法找大王
voidInitialize(int,int*);
//初始化数组
intmain()
intm,n,*ptr;
输入猴子数与出局时报的数\n"
);
scanf("
%d%d"
&
n,&
m);
while(n<
m)
printf(“输入数据有误,请重新输入!
\n”);
}/*在数组中依次填入1,2,3,4,…*/
/*循环一次指针向后移一位,所指元素不为0时计数器加1.移动指针,当计数器数到m时将指针所指元素设为0.*/
voidFindKing_pointer(intm,intn,int*ptr)
inti,count,*ptr2;
count=n-1;
//count=0时终止循环
//移动ptr2进行查找
//calloc()为指针类型的元素分配内存时,元素被初始化为空指针
count!
=0;
第二部分:
单链表方法
从控制台读取猴子的数量和报数的最大数——>
对猴子进行编号,并用链表来存储——>
让链表中的猴子进行报数,对于报数为m的猴子则从链表中删除——>
当链表中只剩下一个报数后则停止这个过程,这最后一个猴子即选出来的大王。
以下为为猴子建立链表:
for(i=1;
i++)//建立链表的存储结构
{
p=(LINK)malloc(sizeof(Monkey));
p2->
next=p;
p2=p;
(//输入猴子的数量,从键盘输入数字。
)
以下为猴子进行编号:
for(i=1;
=n;
i++)//对猴子进行编号
p->
num=i;
//printf("
%d号猴子:
%d\n"
p->
num,p->
num);
p=p->
next;
以下为最主要的算法过程,是通过一个While循环来控制的,是让猴子报数的过程,并删除报数为m的猴子:
while
(1)
i++;
//当链表只剩最后一个元素了则跳出循环,此时报数已完成
printf("
%d号猴子报:
num,i);
if(p->
next==p)break;
if(i==m)
{
i=0;
printf("
%d号猴被淘汰\n"
\n"
p2->
next=p->
p=p2->
continue;
}
else
if(i==m-1)p2=p;
p=p->
输入N=100,输入M=50
通过链表循环实现。
输出结果:
第95号猴子是选出的大王,下是其他数据调试结果列表
源程序:
#include<
intn=2;
intm=1;
typedefstructmonkey
{
intnum;
structmonkey*next;
}Monkey,*LINK;
voidmain()
printf("
请输入一个整数(猴子数量):
"
scanf("
%d"
n);
请输入一个小于猴子数量的整数(报数的最大数):
LINKp,head,p2;
inti;
head=p=p2=(LINK)malloc(sizeof(Monkey));
}
p2->
next=head;
p=head;
//printf("
对猴子进行编号!
i=0;
while
(1)
选出的大王是:
实验总结
通过这第一次的程序设计,从中意识到实际操作独立完成实验课程设计的重要性。
在实验的初期感觉到对程序很陌生,不知道从哪里下手,在之后对于课本以及其他的书籍和网络渐渐的了解关于《猴子选大王》方面的链表边写方法解析,从中了解了关于链表方法的应用。
继而通过课本知识渐渐扩充了顺序表的方法。
顺序表方法是从其他的程序设计渐渐看明白的并根据其中的一些解决问题的方法应用于《猴子选大王》的。
虽然在边写过程中遇到了种种不顺,但是最终还是通过查阅各种资料以及通过网络资源的参考最终完成了两种方法对于实现《猴子选大王》课题的设计工作,并最终完成了调试。
这次的课程设计是我的第一个关于《数据结构》中C语言的设计课题,以后也会有更多的关于这方面的设计题。
通过这次的初次尝试并最终完成使我总结了许多关于程序设计的经验。
程序是通过每一个细节程序段结合起来实现整体的运行,单纯的通过一次性的从头写到尾是很难实现的,但是不排除特别优秀的人对于程序的熟悉程度很高。
对于我们初次接触来说是基本靠一步步的程序段写出来并实现程序运行正常并且运行正确无误。
一个程序是通过许多个程序段的多次调试无误后结合在一起的,而不是整体编写完后再运行的,这样产生的一个好处就是避免整体写完之后发现程序运行错误但是找不到在哪里出现错误。
每一个程序段的代码运行无误后再一起结合运行可以良好的实现整个程序编写的效率,避免不必要的麻烦。
附录
附上单链表赋值方法:
数据位字符串的单链表操作的例子
#include
<
string.h>
#define
null
0
typedef
struct
node{
char
*data;
//结点的数据域,为一个字符串
struct
node
*next;
//结点的指针域
}linkstrnode;
//定义单链表结点结构
linkstrnode
*linkstring;
main(){//建立数据域为字符串类型,且结点无重复的单链表。
对单链表做删除结点操作
linkstring
head;
*t;
printf("
\nplease
input
the
of
linklist:
"
\nnodes
data
is
strings,and
end
#\n"
creatlinkstr(&
head);
//建立单链表
\nthe
source
linklist
:
\n"
printing(head);
//输出单链表
search
string:
gets(t);
//输入要删除的字符串
deletet(&
head,t);
//在单链表head中找到并删除值与t相同的结点
final
is:
//输出做了删除操作后的单链表
}
creatlinkstr(linkstring
head){
//建立单链表
linkstrnode
*p;
head=(linkstrnode
*)malloc(sizeof(linkstrnode));
//建立一个只含头结点的空链表,头指针为head
head->
next=null;
data(string),end
#"
//输入一个字符串t
while
(strcmp(t,"
#"
)!
=0){//当t的值不为“#”时,做以下操作
p=head;
//在建好的单链表中,以p为扫描指针,从头开始查找有无数据域与t相同的结点
while
((p->
next)&
&
(strcmp(t,p->
next->
data)))
p=p->
next;
if
(p->
next)//如果存在数据域与t相同的结点,则输出存在信息
printf("
\nstring
%s
existed"
t);
else{//若不存在数据域与t相同结点,则做以下操作
p->
next=(linkstrnode
//在单链表表尾申请一个新结点
//p指针指向新的表尾结点
strcpy(p->
data,t);
//将t的值复制到*p结点的数据域中
//将单链表的表尾结点的next指针置为空
}
printf("
gets(t);
//输入下一个字符串
}//end
while
}//end
creatlinkstr
printing(linkstring
//输出head单链表
p=head->
while(p){
puts(p->
data);
//输出结点的数据——字符串
p=p->
}
printing
deletet(linkstring
head,char
*t){
//若head单链表中有数据为t的结点,删除之
*p,*s;
p=head;
(strcmp(p->
data,t)))
//以p为扫描指针对head链表进行查找数据域值为*t结点,
//为了能方便删除操作,p指向待查结点的前趋
p=p->
if
next){//若查找到有,则做删除操作
s=p->
p->
next=s->
free(s);
\ndelete
successful!
else//若head链表中没有数据域的值为*t的结点,则输出删除失败的信息
failure!
参考文献
参考书籍
《数据结构(C语言版)》严蔚敏吴伟民编著清华大学出版社2010.10
《数据结构与算法》刘灿勋编著2007.3
《C程序设计(第三版)》谭浩强编著2009.10
参考资源网站
“网学”网
软件技术精品专业网站
考研论坛