1、1.需求分析问题定义:一堆猴子都有编号,编号是 1,2,3n,这群猴子(n 个)按照 1-n 的顺序围坐一圈,从第 1 个开始数,每数到第 m 个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。m ,n 键盘输入,且 m#include /使用 calloc()函数void FindKing_pointer(int,int,int*);/移动指针法找大王void Initialize(int,int*);/初始化数组 整形和指针型 int main()int m,n,*ptr;printf(“输入猴子数与出局时报的数n“);scanf(“%d %d“,while
2、(nm)猴子数数For(i=0;count!=0;ptr2+)*ptr2=0 ? i+i=m ? *ptr2=i=0Count-Count=0 ? 输出大王号数printf(“输入数据有误,请重新输入!n“);printf(“输入猴子数与出局时报的数n“);scanf(“%d %d“,ptr=(int *)calloc(n,sizeof(int); Initialize(n,ptr);FindKing_pointer(m,n,ptr);free(ptr);return 0; /*在数组中依次填入 1,2,3,4,*/void Initialize(int n,int *ptr)int i;fo
3、r(i=0;in;i+)ptri=i+1;/*循环一次指针向后移一位,所指元素不为 0 时计数器加 1.移动指针,当计数器数到 m 时将指针所指元素设为 0.*/void FindKing_pointer(int m,int n,int *ptr)int i,count,*ptr2;count=n-1; /count=0 时终止循环 就是只剩一个猴子时 ptr2=ptr; / 移动 ptr2 进行查找 开始时 ptr 为多少 /calloc()为指针类型的元素分配内存时,元素被初始化为空指针for(i=0;count!=0;ptr2+)if(ptr2=ptr+n)ptr2=ptr;/*指针所指
4、元素不为 0 时计数器加 1.*/if(*ptr2!=0)i+;/*计数器数到 m 时将指针所指元素设为 0*/if(i=m)*ptr2=i=0;count-; /用于终止循环/*最后不为 0 的元素的值即为大王的编号 */for(ptr2=ptr;ptr2+)if(*ptr2!=0)printf(“第%d 个猴子是大王n“,*ptr2);break;/*思想是猴子围坐一圈,有 N 个猴子,开始数数,数到第 M 个猴子,该猴子就出列,然后再从该猴子的下一个猴子开始数到第 M 个猴子,直到只剩下一个猴子时。该猴子就是所要选得大王 */ 4.结果分析5.设计总结在课程设计中,首先要看清问题,将问题要求理解透彻,在构思要如何实现,要用到哪些函数,要用什么算法,在课程构思中选算法是一个很重要的概念,只有确定用这么算法后才能接下来的工作,将流程图画在纸上,再依次编写代码,在程序设计中,编写代码只是一个方面,调试才是关键。它是一个相当繁琐的过程,有许多新的问题需要被解决,但同时它也是一个比较重要的过程,因为在程序调试过程中,你会学到很多新的东西,从而增加你编程的经验。通过本次实习,温固了数据结构的相关知识,加深对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择和应用、算法的设计和时空效率分析等课程基本内容的理解,进一步熟悉了 VC+编程环境,巩固并提高了分析问题、解决实际问题的能力。