




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前言计算机对社会发展所具有的广泛而深远的影响。人类文化的内涵是随着社会发展而进化的。在现代信息社会中,计算机已不仅仅是一种工具,而且是一种文化。信息技术对人类社会进行的全方位渗透,已经形成一种新的文化形态信息时代的计算机文化。计算机知识成为当代知识分子结构中不可缺少的重要部分。设计是一门重要的计算机基础课程,通过学习,学生不仅要掌握高级程序设计语言的知识,更重要的是在实践中逐步掌握程序设计的思想和方法,培养问题求解和语言的应用能力。此次上机实习,不但要使同学们的程序设计能力上一台阶,同时要提高与程序设计和软件开发有关的各种综合能力。通过这次对C语言的进一步学习,为我们日后学习单片机安打下了基础。在机电一体化日趋明显的当下,掌握一门计算机语言是多么的重要,这必将为我们机电学院学生日后的发展产生深远的影响。由于课时和上机时间的仓促,所以我对很多内容还来不及消化,对上机演练十分陌生,还有一些知识遗忘,因而这次程序设计的实习实际上是对我的一次集中的强化练习。虽然其时间短,任务重,但我们的确达到了此次课程设计的目的。本次实习得到樊*老师的指导和帮助,至此表示感谢 !目 录第一部分 题目要求1第二部分 程序设计思路21.需求分析22.程序总体设计23.程序详细设计2第三部分 程序代码6第四部分 设计数据和运行结果104.1 运用举例的数据进行验证104.2 自行设计数据进行验证11第五部分 所遇问题及解决方案135.1 数字的输入问题135.2 switch和break的用法135.3数组排序问题145.4 标记数组的使用145.5 最后结果的输出14第六部分 总结与感受1516第一部分 题目要求数组游戏【要求】设有n个正整数(n20),将它们连成一排,组成一个最大的多位数。程序输入:n个正整数。程序输出:n个数连接成的多位数。【提示】以下是设计思路:可以将问题这样变化一下:比如输入的是123、2、33、1006、12这样几个数字。先找出最大的数字的位数为4位,再将所有的数字变成4位数:1230 2000 3300 1006 1200然后进行排序:3300 2000 1230 1200 1006这样将后面加上的0去掉的序列不就是最大数字吗?于是最大数字就是:332123121006。第二部分 程序设计思路1. 需求分析根据题目要求,输入若干个数字(中间用空格隔开),输入的数字个数不大于20。然后,让这些数随机连在一起,把组合中的最大数输出。2. 程序总体设计输入一组数,输出所需要的数。大致流程图:输入一组数字(个数不大于20)将输入的数进行连排在连排的数中选择出最大的数输出这个最大数3. 程序详细设计3.1 主函数主要负责输入和输出一定的数据。main( )输入数字, 进行一定的处理,输出数字,流程图输入一组数字按字符串进行读取遇到空格 n=n+1n=0YN得到数组an3.2 排序函数(选择法)void sort(int x,int n)将数字按从大到小的顺序排列(如果两个数字相等,交换位置)void sort(int x,int n) /*用选择法将正整数按从大到小排列*/int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;j=xk)k=j;if(k!=i)t=xi;xi=xk;xk=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);把排序后的数字变成最高位数。流程图:数组ai计算需要补的位数y新数组ai=ai10y将新数组a n排序用标记数组bn记录每个数字的变为数3.5 还原函数void revert(int r,int n);把进行过补位的数字还原到原来的样子void revert(int r,int n) /*把变位后的数字还原成原数字*/int j,h;for(j=0;jn;j+)h=bj;while(h)rj=rj/10;h-;流程图:变位后的数组ai新数组ai=ai/10h输出还原后的数组a n使用标记数组bn记录的每个数字的变为数h第三部分 程序代码#includestatic int b20; /*作为标记,记录数字的变位个数*/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 a20;char c;char str200;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=stre)!=0;e+)switch(c)case1: d=1;break;case2: d=2;break;case3: d=3;break;case4: d=4;break;case5: d=5;break;case6: d=6;break;case7: d=7;break; case8: d=8;break;case9: d=9;break;case0: 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;an=f;n=n+1; /*输入数字的个数*/p=a;sort(p,n); for(i=0;in;i+)bi=num(a0)-num(ai);modificate(a,n);sorts(p,b,n); /*对变位后的所有数字进行排序*/printf(nSort these modificated numbers:n);for(i=0;in;i+)printf(%d ,ai); printf(n);revert(p,n);printf(nThe new number is: ); /*按要求输出输入的数*/for(p=a,i=0;in;i+)printf(%d,*p); p+;printf(nn);void sort(int x,int n) /*用选择法将正整数按从大到小排列*/int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;j=xk)k=j;if(k!=i)t=xi;xi=xk;xk=t;int num(int y) /*求最大数字的位数*/int i=0;while(y)y=y/10;i+;return i;void modificate(int z,int n) /*通过在数字后面加一定数目的“0”后,将所有的数字变为最高位*/int i,k,maxnum;maxnum=num(z0);for(i=0;in;i+)k=maxnum-num(zi);while(k)zi=zi*10;k-; void sorts(int x,int y,int n) /*正整数按从大到小排列*/int i,j,k,t,w;for(i=0;in-1;i+)k=i;for(j=i+1;j=xk)k=j;if(k!=i)t=xi;xi=xk;xk=t; w=bi;bi=bk;bk=w;void revert(int r,int n) /*把变位后的数字还原成原数字*/int j,h;for(j=0;jn;j+)h=bj;while(h)rj=rj/10;h-;第四部分 设计数据和运行结果4.1 运用举例的数据进行验证需要输入一组数字进行输入运行结果4.2 自行设计数据进行验证输入一组数字进行输入运行结果第五部分 所遇问题及解决方案5.1 数字的输入问题当定义的数组(int)为a20时,如果输入的数字个数小于20个,那么剩下的元素将会被赋予初值“0”。如果这样的话,在数组的最后输出时,就会在所输入的数字所组成的最大数字的后面多加一定数量的“0”,这样就得不到预期的效果。比如:12 34 367 4563 235,在输出它们组成的最大的数字中,正确结果为45633673423512,但是输出的结果却是45633673423512000000000000000。这是因为输入数字的个数为5,那么数组的其余15个元素会被赋“0”值,自然会在输出结果后面加上15个“0”。进过思考后,决定以字符(char)的形式输入,再将字符转换为数字。这样做的好处是:(1)可以很快的计算出所输入数字的个数n;(2)通过以上计算,就可以确定所需数组的长度an;(3)这样还避免了不必要的计算时间和存储空间。5.2 switch和break的用法在把字符转换为数字时,发现“09”的ASC代码值与其本身不相等(char1的值不等于int1),所以选用了switch机构来实现。这是break的使用就必须注意一下,可以说break使用错误会使结果完全不同。正确的使用方法为:switch(c)case1: d=1;break;case2: d=2;break;case3: d=3;break;case4: d=4;break;case5: d=5;break;case6: d=6;break;case7: d=7;break; case8: d=8;break;case9: d=9;break;case0: d=0;break;case : n+,f=0,d=0;break;default:printf(Error!nAttention:What you input must be number!n);如果将以上语句该为:switch(c)case1: d=1;case2: d=2;case3: d=3;case4: d=4;case5: d=5;case6: d=6;case7: d=7; case8: d=8;case9: d=9;case0: d=0;case : n+,f=0,d=0;break;default:printf(Error!nAttention:What you input must be number!n);那么,数组an的值都将是1234567890,。所以,break的准确使用是很重要的。5.3数组排序问题在这次程序设计中,特别要注意的是在补位后相等的那些数字,如12 120,34 3400,4500 45等。变位后再排序时,如果处理不当。就会出现12012,340034,450045的不正确的结果。我是这样处理的:第一步:在确定数组元素的之后,将其按从大到小排序,得到新的数组an,这样就把小的数字放在数字后面。第二步:将变为后的数组按从大到小排序,相等的数字交换位置,在还原为原来的数字。类似12 120,34 3400,4500 45等,会变为12 120,34 3400,45 4500。这样就保证了结果的正确性。5.4 标记数组的使用在还原数字的时候,因为不知道那些数字进行了变位,所以致使程序无法运行。这就需要用一些东西来记录所变位的数字,记录其变位的个数。我选用了标记数组bn,其下标随数组an的改变而改变,这就将解决了还原阶段遇到的问题。5.5 最后结果的输出题目要求的是最后的结果必须是一个数字,所以,我觉得只要结果看上去是一个数就行了,不必将数组在变位一个数。于是,我把最后的数组的输出格式中,取消了它们各自之间的间隔,最后的结果就看上去是一个数字了。具体操作:printf(%d ,*p) 该为printf(%d,*p),这样就完成了正确结果的输出。以上遇到的问题是我切实遇到的,它们的解决进一步提升了我的C语言知识。可以说,在解决问题的过程中,我学到了很多自己平时不注意的地方。第六部分 总结与感受上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。刚开始基本上都是在看书,把基本知识再熟悉一遍。接着,只是在照着书上写一些程序模块,感觉异常艰难。但是还是有很大的收获,学到了一些东西。而看了两天书之后,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,心里挺开心的。但是,写了一部分程序后,我们由不得不再次陷入困境。在整个程序的编写过程中。最难的就是补位和还原这两个模块,这也是我要解决的重点问题。开始编写补位和还原时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。困难之时,我通过上网查资料,了解所需语句的具体功能,完成了补位和还原。这样的话,整个程序基本上全部完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师招聘之《小学教师招聘》考前冲刺练习试题新版附答案详解
- 直播占卜每日运势创新创业项目商业计划书
- 环保可持续商品电商平台创新创业项目商业计划书
- 网红医生健康科普创新创业项目商业计划书
- 2025年教师招聘之《幼儿教师招聘》考前冲刺测试卷及完整答案详解
- 教师招聘之《小学教师招聘》考试黑钻押题含完整答案详解【各地真题】
- 教师招聘之《小学教师招聘》考前冲刺模拟题库及完整答案详解【历年真题】
- 吉安市青原区两山发展集团有限公司部分岗位任职要求调整的笔试备考有答案详解
- 押题宝典教师招聘之《幼儿教师招聘》题库含答案详解【基础题】
- 2025年文化产业园产业集聚与服务体系构建中的文化产业园区产业链协同效应研究
- 油漆油墨配料岗位安全生产操作规程范文
- 公对公打款合同
- 商丘市金马药业有限公司年产60万件中成药品生产项目环境影响报告
- 员工上下班交通安全培训
- PTN原理、PTN设备和工程维护
- 钢结构分包单位考察文件(项目考察表及生产厂考察内容提示要点)
- 船舶管理-船舶的发展与种类课件
- “条块结合”、创新学校管理的实践与思考
- 纯电动汽车整车控制器(VCU)策略
- 商会入会申请书
- 习作我的暑假生活公开课一等奖市优质课赛课获奖课件
评论
0/150
提交评论