C语言课程设计数组游戏Word下载.docx
- 文档编号:15214920
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:17
- 大小:126.76KB
C语言课程设计数组游戏Word下载.docx
《C语言课程设计数组游戏Word下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计数组游戏Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
【提示】
以下是设计思路:
可以将问题这样变化一下:
比如输入的是123、2、33、1006、12这样几个数字。
先找出最大的数字的位数为4位,再将所有的数字变成4位数:
12302000330010061200
然后进行排序:
33002000123012001006
这样将后面加上的0去掉的序列不就是最大数字吗?
于是最大数字就是:
332123121006。
第二部分程序设计思路
1.需求分析
根据题目要求,输入若干个数字(中间用空格隔开),输入的数字个数不大于20。
然后,让这些数随机连在一起,把组合中的最大数输出。
2.程序总体设计
输入一组数,输出所需要的数。
大致流程图:
3.程序详细设计
3.1主函数
主要负责输入和输出一定的数据。
main()
{
输入数字,
进行一定的处理,
输出数字,
}
流程图
3.2排序函数(选择法)voidsort(intx[],intn)
将数字按从大到小的顺序排列(如果两个数字相等,交换位置)
voidsort(intx[],intn)/*用选择法将正整数按从大到小排列*/
inti,j,k,t;
for(i=0;
i<
n-1;
i++)
{
k=i;
for(j=i+1;
j<
n;
j++)
if(x[j]>
=x[k])k=j;
if(k!
=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
3.3求位数函数intnum(inty)
求每个数个的位数,以便补位。
intnum(inty)/*求最大数字的位数*/
inti=0;
while(y)
y=y/10;
i++;
returni;
3.4变位函数voidmodificate(intz[],intn);
把排序后的数字变成最高位数。
流程图:
3.5还原函数voidrevert(intr[],intn);
把进行过补位的数字还原到原来的样子
voidrevert(intr[],intn)/*把变位后的数字还原成原数字*/
intj,h;
for(j=0;
h=b[j];
while(h)
{
r[j]=r[j]/10;
h--;
}
第三部分程序代码
#include<
stdio.h>
staticintb[20];
/*作为标记,记录数字的变位个数*/
main()
voidsort(intx[],intn);
/*用选择法将正整数按从大到小排列*/
intnum(inty);
/*求数字的位数*/
voidmodificate(intz[],intn);
/*变位函数,在数字后面加“0”*/
voidsorts(intx[],inty[],intn);
/*把数组和标记数组同时排序*/
voidrevert(intr[],intn);
/*还原函数*/
inta[20];
charc;
charstr[200];
int*p,i,e,d,f=0,n=0;
printf("
Pleaseinputafewnumbers(Theamountislessthanorequalto20):
\n"
);
/*输入若干个数字(n<
=20)*/
gets(str);
for(e=0;
(c=str[e])!
='
\0'
;
e++)
switch(c)
case'
1'
:
d=1;
break;
2'
d=2;
3'
d=3;
4'
d=4;
5'
d=5;
6'
d=6;
7'
d=7;
8'
d=8;
9'
d=9;
0'
d=0;
'
n++,f=0,d=0;
default:
printf("
Error!
!
\nAttention:
Whatyouinputmustbenumber!
f=f*10+d;
a[n]=f;
}
n=n+1;
/*输入数字的个数*/
p=a;
sort(p,n);
b[i]=num(a[0])-num(a[i]);
modificate(a,n);
sorts(p,b,n);
/*对变位后的所有数字进行排序*/
\nSortthesemodificatednumbers:
printf("
%d"
a[i]);
revert(p,n);
\nThenewnumberis:
"
/*按要求输出输入的数*/
for(p=a,i=0;
%d"
*p);
p++;
\n\n"
voidmodificate(intz[],intn)/*通过在数字后面加一定数目的“0”后,将所有的数字变为最高位*/
inti,k,maxnum;
maxnum=num(z[0]);
k=maxnum-num(z[i]);
while(k)
z[i]=z[i]*10;
k--;
}
voidsorts(intx[],inty[],intn)/*正整数按从大到小排列*/
inti,j,k,t,w;
w=b[i];
b[i]=b[k];
b[k]=w;
第四部分设计数据和运行结果
4.1运用举例的数据进行验证
需要输入一组数字
进行输入
运行结果
4.2自行设计数据进行验证
输入一组数字
第五部分所遇问题及解决方案
5.1数字的输入问题
当定义的数组(int)为a[20]时,如果输入的数字个数小于20个,那么剩下的元素将会被赋予初值“0”。
如果这样的话,在数组的最后输出时,就会在所输入的数字所组成的最大数字的后面多加一定数量的“0”,这样就得不到预期的效果。
比如:
12343674563235,在输出它们组成的最大的数字中,正确结果为45633673423512,但是输出的结果却是45633673423512000000000000000。
这是因为输入数字的个数为5,那么数组的其余15个元素会被赋“0”值,自然会在输出结果后面加上15个“0”。
进过思考后,决定以字符(char)的形式输入,再将字符转换为数字。
这样做的好处是:
(1)可以很快的计算出所输入数字的个数n;
(2)通过以上计算,就可以确定所需数组的长度a[n];
(3)这样还避免了不必要的计算时间和存储空间。
5.2switch和break的用法
在把字符转换为数字时,发现“0~9”的ASCⅡ代码值与其本身不相等(char1的值不等于int1),所以选用了switch机构来实现。
这是break的使用就必须注意一下,可以说break使用错误会使结果完全不同。
正确的使用方法为:
switch(c)
What
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 数组 游戏
![提示](https://static.bdocx.com/images/bang_tan.gif)