




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前言计算机对社会开展所具有的广泛而深远的影响。人类文化的内涵是随着社会开展而进化的。在现代信息社会中,计算机已不仅仅是一种工具,而且是一种文化。信息技术对人类社会进行的全方位渗透,已经形成一种新的文化形态——信息时代的计算机文化。计算机知识成为当代知识分子结构中不可缺少的重要局部。设计是一门重要的计算机根底课程,通过学习,学生不仅要掌握高级程序设计语言的知识,更重要的是在实践中逐步掌握程序设计的思想和方法,培养问题求解和语言的应用能力。此次上机实习,不但要使同学们的程序设计能力上一台阶,同时要提高与程序设计和软件开发有关的各种综合能力。通过这次对C语言的进一步学习,为我们日后学习单片机安打下了根底。在机电一体化日趋明显的当下,掌握一门计算机语言是多么的重要,这必将为我们机电学院学生日后的开展产生深远的影响。由于课时和上机时间的仓促,所以我对很多内容还来不及消化,对上机演练十分陌生,还有一些知识遗忘,因而这次程序设计的实习实际上是对我的一次集中的强化练习。虽然其时间短,任务重,但我们确实到达了此次课程设计的目的。本次实习得到樊**老师的指导和帮助,至此表示感谢!目录第一局部题目要求 1第二局部程序设计思路 21. 需求分析 22. 程序总体设计 23. 程序详细设计 2第三局部程序代码 6第四局部设计数据和运行结果 104.1运用举例的数据进行验证 104.2自行设计数据进行验证 11第五局部所遇问题及解决方案 135.1数字的输入问题 135.2switch和break的用法 135.3数组排序问题 145.4标记数组的使用 145.5最后结果的输出 14第六局部总结与感受 15第一局部题目要求数组游戏【要求】 设有n个正整数〔n≤20〕,将它们连成一排,组成一个最大的多位数。程序输入:n个正整数。程序输出:n个数连接成的多位数。 【提示】 以下是设计思路: 可以将问题这样变化一下: 比方输入的是123、2、33、1006、12这样几个数字。 先找出最大的数字的位数为4位,再将所有的数字变成4位数:2000330010061200然后进行排序:2000123012001006这样将后面加上的0去掉的序列不就是最大数字吗?于是最大数字就是:332123121006。 第二局部程序设计思路需求分析根据题目要求,输入假设干个数字〔中间用空格隔开〕,输入的数字个数不大于20。然后,让这些数随机连在一起,把组合中的最大数输出。程序总体设计输入一组数,输出所需要的数。大致流程图:输入输入一组数字〔个数不大于20〕将输入的数进行连排在连排的数中选择出最大的数输出这个最大数程序详细设计主函数主要负责输入和输出一定的数据。main(){ 输入数字,进行一定的处理, 输出数字,}流程图输入一组数字输入一组数字按字符串进行读取遇到空格‘’n=n+1n=0YN得到数组a[n]排序函数〔选择法〕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; } }求位数函数intnum(inty)求每个数个的位数,以便补位。intnum(inty)/*求最大数字的位数*/{ inti=0; while(y) { y=y/10; i++; } returni;}变位函数voidmodificate(intz[],intn);把排序后的数字变成最高位数。流程图:数组数组a[i]计算需要补的位数y新数组a[i]=a[i]×10y将新数组a[n]排序用标记数组b[n]记录每个数字的变为数3.5复原函数voidrevert(intr[],intn);把进行过补位的数字复原到原来的样子voidrevert(intr[],intn)/*把变位后的数字复原成原数字*/{ intj,h; for(j=0;j<n;j++) { h=b[j]; while(h) { r[j]=r[j]/10; h--; } }}流程图:变位后的数组变位后的数组a[i]新数组a[i]=a[i]/10h输出复原后的数组a[n]使用标记数组b[n]记录的每个数字的变为数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; 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:Whatyouinputmustbenumber!\n"); } f=f*10+d; a[n]=f; } n=n+1;/*输入数字的个数*/ p=a; sort(p,n); for(i=0;i<n;i++) { b[i]=num(a[0])-num(a[i]); } modificate(a,n); sorts(p,b,n);/*对变位后的所有数字进行排序*/ printf("\nSortthesemodificatednumbers:\n"); for(i=0;i<n;i++) { printf("%d",a[i]); } printf("\n"); revert(p,n); printf("\nThenewnumberis:");/*按要求输出输入的数*/ for(p=a,i=0;i<n;i++) { printf("%d",*p); p++; } printf("\n\n");}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; } }}intnum(inty)/*求最大数字的位数*/{ inti=0; while(y) { y=y/10; i++; } returni;}voidmodificate(intz[],intn)/*通过在数字后面加一定数目的“0〞后,将所有的数字变为最高位*/{ inti,k,maxnum; maxnum=num(z[0]); for(i=0;i<n;i++) { k=maxnum-num(z[i]); while(k) { z[i]=z[i]*10; k--; } }}voidsorts(intx[],inty[],intn)/*正整数按从大到小排列*/{ inti,j,k,t,w; 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;w=b[i]; b[i]=b[k]; b[k]=w; } }}voidrevert(intr[],intn)/*把变位后的数字复原成原数字*/{ intj,h; for(j=0;j<n;j++) { h=b[j]; while(h) { r[j]=r[j]/10; h--; } }}第四局部设计数据和运行结果4.1运用举例的数据进行验证需要输入一组数字进行输入运行结果4.2自行设计数据进行验证输入一组数字进行输入运行结果第五局部所遇问题及解决方案5.1数字的输入问题当定义的数组〔int〕为a[20]时,如果输入的数字个数小于20个,那么剩下的元素将会被赋予初值“0〞。如果这样的话,在数组的最后输出时,就会在所输入的数字所组成的最大数字的后面多加一定数量的“0〞,这样就得不到预期的效果。“0〞值,自然会在输出结果后面加上15个“0〞。进过思考后,决定以字符〔char〕的形式输入,再将字符转换为数字。这样做的好处是:〔1〕可以很快的计算出所输入数字的个数n;〔2〕通过以上计算,就可以确定所需数组的长度a[n];〔3〕这样还防止了不必要的计算时间和存储空间。5.2switch和break的用法 在把字符转换为数字时,发现“0~9〞的ASCⅡ代码值与其本身不相等〔char1的值不等于int1〕,所以选用了switch机构来实现。这是break的使用就必须注意一下,可以说break使用错误会使结果完全不同。正确的使用方法为: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:Whatyouinputmustbenumber!\n"); }如果将以上语句该为:switch(c) { case'1':d=1; case'2':d=2; case'3':d=3; case'4':d=4; case'5':d=5; case'6':d=6; case'7':d=7; case'8':d=8; case'9':d=9; case'0':d=0; case'':n++,f=0,d=0;break; default:printf("Error!!!\nAttention:Whatyouinputmustbenumber!\n"); }那么,数组a[n]的值都将是1234567890,。所以,break的准确使用是很重要的。5.3数组排序问题在这次程序设计中,特别要注意的是在补位后相等的那些数字,如12120,343400,450045等。变位后再排序时,如果处理不当。就会出现12021,340034,450045的不正确的结果。我是这样处理的:第一步:在确定数组元素的之后,将其按从大到小排序,得到新的数组a[n],这样就把小的数字放在数字后面。 第二步:将变为后的数组按从大到小排序,相等的数字交换位置,在复原为原来的数字。类似12120,343400,450045等,会变为12120,343400,454500。这样就保证了结果的正确性。5.4标记数组的使用在复原数字的时候,因为不知道那些数字进行了变位,所以致使程序无法运行。这就需要用一些东西来记录所变位的数字,记录其变位的个数。我选用了标记数组b[n],其下标随数组a[n]的改变而改变,这就将解决了复原阶段遇到的问题。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年【机修钳工(初级)】考试试题及答案
- 河堤高边坡施工方案
- 染整废水处理设施的运行管理与维护策略考核试卷
- 项目管理学习与应用题目试题及答案
- 纸板容器设备性能优化考核试卷
- 细菌培养技术与实践试题及答案
- 建筑制图与识图教学课件:第八章 结构施工图
- 2024年甘肃酒泉肃州区选拔项目人员纳入编制管理107人高频考题难、易错点模拟试题(共500题)附带答案详解
- 幼教培训课件:《幼儿园一日活动的组织实施》
- 免疫检查点抑制剂毒性防治策略探索
- 2024陕西中考数学二轮专题训练 题型四 尺规作图 (含答案)
- 24春国家开放大学《农村环境保护》形成性考核册参考答案
- 2024年郑州市中考二模英语试题含答案
- 2024年潍坊市寒亭区小升初语文检测卷含答案
- 第24课《诗词曲五首-南乡子 登京口北固亭有怀》课件共34张
- 山东省潍坊市2023-2024 学年高二下学期期中质量监测化学试题+带答案
- 铁路少年-练习及答案
评论
0/150
提交评论