C语言课程设计-数组游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

前言

计算机对社会发展所具有的广泛而深远的影响。人类文化的内涵是随着社会发展而进化的。在现代信息社会中,计算机已不仅仅是一种工具,而且是一种文化。信息技术对人类社会进行的全方位渗透,已经形成一种新的文化形态——信息时代的计算机文化。计算机知识成为当代知识分子结构中不可缺少的重要部分。

设计是一门重要的计算机基础课程,通过学习,学生不仅要掌握高级程序设计语言的知识,更重要的是在实践中逐步掌握程序设计的思想和方法,培养问题求解和语言的应用能力。此次上机实习,不但要使同学们的程序设计能力上一台阶,同时要提高与程序设计和软件开发有关的各种综合能力。

通过这次对C语言的进一步学习,为我们日后学习单片机安打下了基础。在机电一体化日趋明显的当下,掌握一门计算机语言是多么的重要,这必将为我们机电学院学生日后的发展产生深远的影响。

由于课时和上机时间的仓促,所以我对很多内容还来不及消化,对上机演练十分陌生,还有一些知识遗忘,因而这次程序设计的实习实际上是对我的一次集中的强化练习。虽然其时间短,任务重,但我们的确达到了此次课程设计的目的。

本次实习得到樊**老师的指导和帮助,至此表示感谢!

目录

第一部分题目要求 (1)

第二部分程序设计思路 (2)

1. 需求分析 (2)

2. 程序总体设计 (2)

3. 程序详细设计 (2)

第三部分程序代码 (6)

第四部分设计数据和运行结果 (10)

4.1 运用举例的数据进行验证 (10)

4.2 自行设计数据进行验证 (11)

第五部分所遇问题及解决方案 (13)

5.1 数字的输入问题 (13)

5.2 switch和break的用法 (13)

5.3数组排序问题 (14)

5.4 标记数组的使用 (14)

5.5 最后结果的输出 (14)

第六部分总结与感受 (15)

第一部分题目要求

数组游戏

【要求】

设有n个正整数(n≤20),将它们连成一排,组成一个最大的多位数。程序输入:n个正整数。程序输出:n个数连接成的多位数。

【提示】

以下是设计思路:

可以将问题这样变化一下:

比如输入的是123、2、33、1006、12这样几个数字。

先找出最大的数字的位数为4位,再将所有的数字变成4位数:

12302000 3300 1006 1200

然后进行排序:

33002000 1230 1200 1006

这样将后面加上的0去掉的序列不就是最大数字吗?于是最大数字就是:332123121006。

第二部分程序设计思路

1.需求分析

根据题目要求,输入若干个数字(中间用空格隔开),输入的数字个数不大于20。然后,让这些数随机连在一起,把组合中的最大数输出。

2.程序总体设计

输入一组数,输出所需要的数。

大致流程图:

3.程序详细设计

3.1主函数

主要负责输入和输出一定的数据。

main( )

{

输入数字,

进行一定的处理,

输出数字,

}

流程图

3.2排序函数(选择法)void sort(int x[],int n)

将数字按从大到小的顺序排列(如果两个数字相等,交换位置)void sort(int x[],int n) /*用选择法将正整数按从大到小排列*/ {

int i,j,k,t;

for(i=0;i

{

k=i;

for(j=i+1;j

if(x[j]>=x[k])k=j;

if(k!=i)

{

t=x[i];

x[i]=x[k];

x[k]=t;

}

}

3.3求位数函数int num(int y)

求每个数个的位数,以便补位。

int num(int y) /*求最大数字的位数*/

{

int i=0;

while(y)

{

y=y/10;

i++;

}

return i;

}

3.4变位函数void modificate(int z[],int n);

把排序后的数字变成最高位数。

流程图:

3.5 还原函数void revert(int r[],int n);

把进行过补位的数字还原到原来的样子

void revert(int r[],int n) /*把变位后的数字还原成原数字*/ {

int j,h;

for(j=0;j

{

h=b[j];

while(h)

{

r[j]=r[j]/10;

h--;

}

}

}

流程图:

第三部分程序代码

#include

static int b[20]; /*作为标记,记录数字的变位个数*/

main()

{

void sort(int x[],int n); /*用选择法将正整数按从大到小排列*/

int num(int y); /*求数字的位数*/

void modificate(int z[],int n); /*变位函数,在数字后面加“0”*/

void sorts(int x[],int y[],int n); /*把数组和标记数组同时排序*/

void revert(int r[],int n); /*还原函数*/

int a[20];

char c;

char str[200];

int *p,i,e,d,f=0,n=0;

printf("Please input a few numbers(The amount is less than or equal to 20):\n"); /*输入若干个数字(n<=20)*/

gets(str);

for(e=0;(c=str[e])!='\0';e++)

{

switch(c)

{

case'1': d=1;break;

case'2': d=2;break;

case'3': d=3;break;

case'4': d=4;break;

case'5': d=5;break;

case'6': d=6;break;

case'7': d=7;break;

case'8': d=8;break;

case'9': d=9;break;

case'0': d=0;break;

case' ': n++,f=0,d=0;break;

default:printf("Error\nAttention:What you input must be number!\n");

}

f=f*10+d;

a[n]=f;

}

n=n+1; /*输入数字的个数*/

p=a;

sort(p,n);

for(i=0;i

{

b[i]=num(a[0])-num(a[i]);

相关文档
最新文档