猴子选大王上机报告.docx
- 文档编号:14365086
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:14
- 大小:149.24KB
猴子选大王上机报告.docx
《猴子选大王上机报告.docx》由会员分享,可在线阅读,更多相关《猴子选大王上机报告.docx(14页珍藏版)》请在冰点文库上搜索。
猴子选大王上机报告
重庆交通大学信息科学与工程学院
综合性设计性实验报告
专业:
课程名称:
《C语言程序设计》
题目:
数组和链表的操作
班级:
设计者:
学号:
指导教师:
完成时间:
2014年6月16日
重庆交通大学信息科学与工程学院综合性设计性实验任务书
课程
C语言程序设计
班级
指导教师
题目
数组和链表的操作
同组人数
1人
设计要求
分别用数组和链表设计一个程序完成如下功能:
[猴子选大王]一群猴子共有m只,编号为1,2,……m,围坐一圈,从第1号猴子开始依次报数,数到n的猴子退出,然后从退出的下一只猴子继续从1开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。
要求:
1、用数组完成所要求的功能,输入m和n的值,输出大王的编号;
2、用链表完成所要求的功能,输入m和n的值,输出大王的编号。
报告书要求
设计报告主要包括内容(参见后面的格式):
1.系统的功能需求及分析
2.设计说明(分别要说明用数组和用链表完成该功能的算法,算法流程图以及相应的说明)
3.系统实现及主要代码(相应的算法应设计成函数)
4.系统功能测试
5.设计体会
要求:
Ø学生完成课程设计后,每个同学均应提交设计报告及软件;
Ø设计报告要求文字通畅,排版规范;
Ø设计报告文字原则上不少于1000字(程序代码除外),并装订成册。
版面要求
1.题目用黑体三号,段后距18磅(或1行),居中对齐;
2.标题用黑体四号,段前、段后距6磅(或0.3行);
3.正文用小四号宋体,行距为固定值“20”,程序代码用固定值“15”;
4.标题按“一”、“㈠”、“1”、“⑴”顺序编号。
重庆交通大学信息学院综合性设计性实验评分表
序号
项目
评分标准及说明
评分
1
学生自评分(30%)
按任务书的要求,学生根据自己任务完成情况、系统质量及报告质量自我评分。
理由:
我认为此次设计性实验还是完成得比较好的,但是有些细节还需要改进。
25
2
项目设计报告(60%)
根据学生完成的项目设计报告书情况,由教师给定等级(直接在此评分表中打“√”)及成绩(特别提醒:
设计报告相同者均记0分)
等级
分值
A+
30
A
28-29
A-
27
B+
25-26
B
23-24
B-
21-22
C+
20
C
19
C-
18
D
0-17
3
教师对学生自己评分的评价(10%)
指导教师:
总分:
数组和链表的操作——猴子选大王程序
设计报告
一、系统的功能需求及分析
功能:
一群猴子共有m只,编号为1,2,……m,围坐一圈,从第1号猴子开始依次报数,数到n的猴子退出,然后从退出的下一只猴子继续从1开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。
分析:
用数组实现:
先对数组进行初始化,然后将报到要删除的那个数字的猴子编号赋值为-1,每赋值一次,猴子数减一,再重新报数。
当猴子数只有一只的时候,输出猴子编号不为-1的那个编号。
用链表实现:
先建立一个无头节点的单向循环的链表,然后将报到要删除的那个数字的猴子编号删除,以此循环,直到一个节点的下一个指向自己,最后输出猴子编号。
二、设计说明
(一)用数组实现
1、数组的初始化
for(i=0;i a[i]=i+1; 2、算法流程图及说明 N Y Y Y Y (二)用链表实现 1、节点的定义 structmonkey { inta; structmonkey*next; }*p,*q,*p1,*q1,*p2; 2、链表的建立 for(inti=0;i { p=(structmonkey*)malloc(sizeof(structmonkey)); p->a=i+1; p->next=NULL; if(i==0) { head=p; q=head; } else { q->next=p; q=q->next; } } q->next=head; p2=head; p1=head; 3、算法流程图及说明 Y Y 三、主要代码 (一)用数组实现 #include voidmain() { inta[10000]; intm,n,x,b,i; printf("请输入猴子的只数: "); scanf("%d",&m); printf("请输入要删除的猴子编号: "); scanf("%d",&n); for(i=0;i a[i]=i+1; b=m; x=0; for(i=0;b! =1;i++) { if(a[i%m+1]! =-1) { x++; } if(x==n&&a[i%m+1]! =-1) { a[i%m+1]=-1; b--; x=0; } } for(i=1;i<=m;i++) if(a[i]! =-1) printf("猴子大王编号为: %d\n",i); } (二)用链表实现 #include #include structmonkey { inta; structmonkey*next; }*p,*q,*p1,*q1,*p2; voidmain() { structmonkey*head; intm,n; printf("请输入猴子的只数: "); scanf("%d",&m); printf("请输入想删除猴子的编号: "); scanf("%d",&n); for(inti=0;i { p=(structmonkey*)malloc(sizeof(structmonkey)); p->a=i+1; p->next=NULL; if(i==0) { head=p; q=head; } else { q->next=p; q=q->next; } } q->next=head; p2=head; p1=head; for(i=1;;i++) { if(i==n-1) { q1=p1->next; p1->next=q1->next; free(q1); i=0; } p1=p1->next; if(p1->next==p1)break; } printf("猴子大王的编号为%d\n",p1->a); } 四、系统功能测试 功能: 一群猴子共有m只,编号为1,2,……m,围坐一圈,从第1号猴子开始依次报数,数到n的猴子退出,然后从退出的下一只猴子继续从1开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。 下面四张图片是运行结果的截图,前两张是用数组方法做的,一组数据为m=5,n=3;另一组数据为m=15,n=7;后两张是链表做的,测试数据同数组一样,运行结果也一样。 五.设计体会 1、取得的成效及主要收获 经过一个星期的努力,最终完成这个综合性试验报告,总的来说过程是十分艰辛的。 因为这艰辛的过程,我对数组,指针,链表的理解变得更加的深刻,运用起来也比以前更加熟悉。 对我来说这次的题目是比较有难度的,所以在算法的设计方面花了很多时间,因此现在的思维相比以前更加开阔了一些,不再局限于某一些算法,还让我认识到了循环结构的重要性,因此对循环结构有了比较好的掌握。 在设计过程中经常会因为一点小问题没有考虑到而出错,比如取余的时候是否需要加一或者减一,这让我在以后的设计中会更加的细心谨慎。 还有就是通过这次的实验,我在敲写代码时的思维变得更加清晰并且不再畏惧那些一开始不会的题目。 2、存在的主要问题 因为这次实验涉及到数组和链表,我对于数组比较熟悉,却不太熟悉链表,所以在做链表的时候请教了不少同学,期间出过很多错误,我希望以后可以自己独立完成一个链表的设计并且减少错误的发生。 虽然老师上课有讲到可以用到取余的算法,但是由于数组最开始是a[0],而编号是1,所以我在设计循环时产生了一种混乱的现象,最后在询问同学的情况下才完成了,因此以后我要更加有逻辑性。 因为用到循环,所以有几次运行都没有结果,应该是跳不出循环结构造成的,我到现在都不知道为什么跳不出来。 还有一个最重要的问题就是我用的两种做法都没有用到函数,因为我尝试用函数的时候老是会有问题,不知道出于什么原因。 3、对教学工作的建议 上了一学期的C语言,我有一个很深的感触就是我们上得好快,虽然一些慨念性的东西没有必要讲那么久,但是我还是觉得适当慢一点会让我们学生比较好消化。 老师在上课给我们举例子的时候可以请同学说一说他的想法,要不然一直是老师一个人在敲,我们有时候会跟不上或者没有接受到自己的头脑里。 还有一点就是我感觉老师把所有的教学重点都放在了设计算法,敲写代码上面,毕竟我们要参加期末考试还有二级考试,虽然我知道这不是我们的目标,但是我觉得老师还是可以适当讲一些题目,让我们感受感受。 以上只是我一个人的看法,打心底里讲还是觉得老师教得很好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 猴子 大王 上机 报告