狮王选举课程设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
狮王选举课程设计

狮王选举 一 目的 根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对《程序设计语言》和《软件技术基础》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。 学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。 二 需求分析 1、任务 有n只子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的子退出圈外,剩下的子再接着从1 开始报数。就这样,直到圈内只剩下一只子时,这个子就是子王输入数据每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 m, n 300)最后一行 0 0 输入样例: 6 2 12 4 8 3 0 0 3、输出要求 对于每行输入数据(最后一行除外),输出数据也是一行,即最后编号输入,,输出最后子王的编号。 2、程序代码 (1)首先进行一个宏定义,定义狮子的最大数目 #define size 300 (2)因为主函数中有调用的函数,这里进行函数声明 int select(int x,int y); (3) 定义数组a依次存放选举结果,i,j,k为循环变量 int a[size],i,j=0,n,m; printf(请输入狮子的总数n和所报的数字m,以空格隔开,结束输入0 0:\n); scanf(%d %d,n,m); /*读入n和m */ (4)对第一次输入的数据进行判断,如果输入的数据为0 0就提示输入有误 if (n==0 m==0) printf(输入数据有误,请再次输入); else { (5)While函数实现多组数据的输入,并且将每次选举的结果存放在数组a[j]中 while(n!=0 m!=0) /*如果n,m都不为0,则进行选举*/ { (6)这里进行函数select(n,m)的调用,程序从主函数中转到被调用的函数中 a[j]=select(n,m); /*选举并将结果存放在数组a中,并且进行函数调用*/ j++; scanf(%d %d,n,m); /*读入下一次选举数据n,m*/ } j--; printf(选举结果为:\n); (7)将存放在数组a[j]中的选举结果以此换行输出 for (i=0;i=j;i++) printf(%d\n,a[i]); /*输出全部选举结果*/ } (8)下面为被调用的函数 select(int x,int y) { int lion[size],i,j,k,actsize,delnum; 运用for循环对数组的元素进行赋值 for(i=0;ix;i++) lion[i]=i+1; /*对数组元数进行赋值*/ 判断数组中的元素个数,如果只有一个元素直接返回这个元素 if (x==1) return(lion[0]); 如果数组中的元素不只有一个的时候进行下面的else循环 else { delnum=0; actsize=x; 逐步删除数组中的元素,直到只有一个元素的时候循环结束,返回剩下最后一个元素的值 for(k=1;kactsize;k++) { delnum=(delnum+y-1)%x; 删除数组总所报的数,并且依次将数组元素的向前移动 for(j=delnum;jx;j++) lion[j]=lion[j+1]; /*删除数组元素*/ x--; } } return(lion[0]); /*将lion[0]的值返回到主函数中去*/ } 五 调试分析 1、每次输入一组数据完后,按回车键程序就停止运行。 分析发现,数组的长度应该是在整个for循环结束后再减一的,更改后程序如下: 2、为什么会多输出一组错误的结果。 为什么这个会输出4组结果,分析发现j的值每选举一次就会增大1,为下一次的选举做出准备,但是最后一次为0 0,跳出了w

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档