为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

分组游戏,约瑟夫环

2018-01-10 7页 doc 45KB 6阅读

用户头像

is_591137

暂无简介

举报
分组游戏,约瑟夫环分组游戏,约瑟夫环 分组游戏 一 、目的 1(根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对《C语言程序设计》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。 2.通过本次分组游戏题目的编写,学会利用结构体,指针,链表的关系进行链表的建立,删除,再通过数组,循环等对数据按题目要求进行输出。考查了学生对相应知识的掌握,和逻辑算法的考验。 二 、 需求分析 ...
分组游戏,约瑟夫环
分组游戏,约瑟夫环 分组游戏 一 、目的 1(根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计。通过课程设计,加深对《C语言程序设计》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程解决综合性实际问题的初步能力。 2.通过本次分组游戏题目的编写,学会利用结构体,指针,链的关系进行链表的建立,删除,再通过数组,循环等对数据按题目要求进行输出。考查了学生对相应知识的掌握,和逻辑算法的考验。 二 、 需求分析 .1、 题目要求: 分组游戏:全班m个同学,成一队并确定一个随机循环数A,从队头第一个同学开始计数,到第A个同学将其分配到第一组,然后从下一个同学重新开始计数,再到第A个同学分配到第二组,循环至第n组,再继续计数到第A个同学分配给第一组,如此循环直到所有的同学都分配到相应的组为止。 请用一个程序模拟该分组过程,给定同学数、组数和循环数后自动生成每个组中分配的学生在初始队列中的序号:假设有10个同学,分为2组,循环数为5,则分组方式如下: 第一组,1,5,6,7,9 第二组2,3,4,8,10 2、数据的读入与建立 通过建立结构体,来实现一个具有连续数字的链表的形成。利用结构体指针指向结构体所在,并且为链表申请内存空间,存放数据。 3、数据的输出 需要进行链表的删除工作并用一维数组存入删除节点数据,利用循环语句进行数据的输出,以符合题目的输出要求。 4、主函数的建立 定义用户输入的数据,提示输出,并读入用户输入的数据,再执行两个子函数即可。 三 概要设计 1、程序主要包括三个模块 (1)主程序模块 int main() { 定义及初始化 用户根据提示输入 链表的建立 链表的删除及数组数据的存入,然后再利用循环将数据按需求输出 } (2)建立结构体 typedef struct node{}NODE; NODE为结构体名,结构体里定义int型的变量number,和指向结构体本身的指针。 (3)建立链表 链表的建立: NODE *createlink(int n) 定义head,p,q,三个结构体指针。head 指向头结点,利用q申请内存空间而p指向该地址,并指向存入该空间的数据,所指向的空间依次存入由1至n的顺序数字,最后返回头结点。 链表的删除及数据的输出:void work(NODE *p,int n,int m,int A) 1)利用两个嵌套循环对相应节点进行删除,并将删除的节点的数据存入定义的一维数组a[ ]里。里面一个循环用指针“p”指向待删除节点的前一个,外面一个循环实现将“q”指向当前节点,将其数据存入数组,再将“p”指向删除节点的下一个位置,释放删除节点。循环至最后一个数据的存入。 2)利用两个循环对数据进行输出。根据分组要求先对第一行进行输出,由于第一行的数据在一维数组中的排列顺序是按组数跳跃式排列的,所以对数据的输出也按组数的 多少进行跳跃式输出,其他行的输出也是如此,所以形成一个内循环。再利用外循环,进行换行,再对下一行进行输出。 四 详细设计 1、定义结构体 定义一个名为NODE的结构体 typedef struct node { int number; /*定义结构体里的整形变量*/ struct node *next; /*指向结构体的指针变量*/ }NODE; /*结构体名*/ 2、建立链表 NODE *createlink(int n) /*函数*/ NODE *head=NULL,*p=NULL,*q=NULL; /*定义三个结构体指针*/ int i=1; /*初始化,赋值为1*/ head=p=(struct node*)malloc(sizeof(struct node)); /*申请内存空间*/ 利用一个循环不断申请内存空间并存入数据 q=(struct node*)malloc(sizeof(struct node)); /*循环申请内存空间*/ p->next=q; p=q; /*三个语句实现p指向q申请的内存空间并指出数据*/ p->number=i; 3、链表的删除与数据存入一维数组 void work(NODE *p,int n,int m,int A) /*函数*/ for(j=1;jnext;} /*循环语句使p指向删除节点前一位*/ 外循环语句实现: q=p->next; p->next=q->next; /*q指向待删除的节点,p指向待删除的下一结点并存入待删除数据*/ a[k]=q->number; free(q); 4、数据的输出 for(l=i;lnumber; printf("%3d",a[k][i-1]) 在利用二维数组输出数据这一块花的时间最多,却最终无法实现,从而转入利用一维数组输出数据。 (3)而在利用一维数组输出时,刚开始想着只用一个嵌套循环, 而设计嵌套循环时发现由于一维数组的特性限制,无法在对删除数据存入数组的同时进行所需要的分组输出,所以就将数据存入数组,和按分组输出数据分在了两个嵌套循环里。 六 测试结果 1、利用二维数组存入输出数据时出现的结果: 无法实现数据的分组,故而放弃利用二维数组形式的输出方法。 2、利用一维数组存入数据并输出时: 输出数据符合要求,最后进行程序的编排完善。 七 用户使用说明 1、根据提示选择石是否开始游戏,按Enter键 输入人数n,按Enter键。 输入随机数m,按Enter键。 输入组数A,按Enter键。 2、提示是否继续游戏,是则重复1操作,选择不继续则按任意键结束程序。 八 课程设计 1、程序内容 程序分成建立链表,删除链表,输出数据几大步骤,也按着这几个步骤逐步完成设计。每一块的设计都需要一定的知识掌握与运用能力。在这一过程中,让我了解到了链表的相关知识,并逐渐熟练掌握对链表的建立方法,利用结构体与琏表的关系,用于程序的设计之中。而通过算法设计,更提高了自身的逻辑性思维,形成一个较为完善的思维体系,更有利于今后编程能力的提高,和对相关知识的学习掌握能力。对于一些细小的错误,更提醒自己注意细节,注意每一个可能造成错误的地方,对于不熟悉的环节,更应该多动手利用,真正熟练掌握。
/
本文档为【分组游戏,约瑟夫环】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索