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