




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学程序设计基础实践报告题 目 C语言程序课程设计 学生姓名 孙雯波 指导教师 李 刚 学 院 信息科学与工程学院 专业班级 电子信息工程1301班 完成时间 2014-1-8 目录第一章 汉诺塔程序1.1内容和要求-21.2程序设计整体规划及方案-21.3设计分析-21.4程序结构-31.5程序功能-41.6相关源代码-41.7流程-51.8试验结果-71.9设计体会-7第二章 数据的处理2.1内容和要求-82.2程序设计整体规划及方案-82.3设计分析-82.4程序结构-92.5程序功能-102.6相关源代码-102.7流程-112.8试验结果-162.9设计体会-16第三章 选择法排序3.1内容和要求-173.2程序设计整体规划及方案-173.3设计分析-173.4程序结构-183.5程序功能-193.6相关源代码-193.7流程-203.8试验结果-243.9设计体会-25第四章 数据的简单加密和解密4.1内容和要求-254.2程序设计整体规划及方案-264.3设计分析-264.4程序结构-264.5程序功能-274.6相关源代码-274.7流程-284.8试验结果-304.9设计体会-32第五章 参考文献-32第一章 汉诺塔程序1.1内容和要求1.1.1基本内容:实现汉诺塔程序1.1.2 基本要求:用递归方法实现汉诺塔程序,显示盘子的移动次数和移动过程,盘子总数可作为程序参数在运行程序时输入。1.2程序设计整体规划及方案第一部分:规划如何去实现程序相关功能,其中包括:(1) 编译器的选择。我选择了Visual C+ 6.0.(2) 功能框架的确定。确定各个模块需要实现的功能,以及所涉及的相关知识点。最终选择用以表为核心去实现相关功能。(3) 相关细节的讨论。包括函数的调用,返回值的选择,选择结构的确定。(4) 相关知识点的学习。第二部分:进行相关模块的设计、编写。第三部分:调试各个模块的功能,在集中调试,解决相关问题,优化各部分功能,美化界面。1.3设计分析 为了避免运行需要很长的时间,程序限制了输入的整数大小为0-10,以下是程序执行的顺序:(为了篇幅,假设n的值是3)main方法运行到hannuota(n,A,B,C)时;该方法里的参数为hannuota(3,A,B,C);1、第一部分:把A柱中的n-1个圆盘借助C柱移动到B柱此时执行hannuota方法,因为n=31,因此此时递归执行hantuona方法,此时方法参数为hannuota(2,A,C,B),(注意此时hannuota方法的参数改变了,C和B值互换);因为n=21,继续递归调用hannuota(1,A,B,C);(此时hannuota方法的参数改变了,C和B值互换);因为n=1,所以执行move方法,打印出A-C;返回n=2时程序未执行完的部分,即执行move(one,three)方法,因为此时n=1,打印出A-B,继续执行hannuota(n-1),two,one,three)部分,此时参数为hannuota(1,C,A,B); 此时n=1,打印出C-B。到此刻hannuota(n-1),one,three,two)的部分程序执行完毕。2、第二部分:把A柱的第n个圆盘移动到C盘此时直接执行move(one,three)部分; 此时打印出A-C;3、第三部分:把B柱上的n-1个圆盘借助A移动到C柱此时执行hannuota(n-1),two,one,three)的部分,此时参数为hannuota(2,B,A,C);因为n=21,执行方法参数为hannuota(1,B,C,A)的部分;因为此时n=1,执行move(one,three)的代码,打印出B-A;此时,hannuota(n-1),one,three,two)的程序执行完毕,one,two,three的值分别为one=B,two=A,three=C;继续执行move(one,three)的程序; 打印出B-C; 继续执行至hannuota(n-1),two,one,three)的代码,参数为hannuota(1A,B,C),因此n=1,执行move(one,three)的代码,打印出A-C;到此为止,程序执行完毕。4、在计算盘子的移动次数时,通过调用math.h中的函数pow(a,b)来解决指数问题。1.4 程序结构主函数void hannuota(int n,char one,char two,char three)void move(char x,char y)返回调用1.5程序的功能输入盘子个数,通过汉诺塔程序指示盘子的移动顺序,以及盘子移动的总次数从而解决汉诺塔问题。备注:为了避免运行需要很长的时间,程序限制了输入的整数大小为0-10。1.6相关源代码# include #includevoid hannuota(int n,char one,char two,char three);void move(char x,char y);int main(void) int n,sum; printf(please input a integer number:); scanf(%d,&n); sum=pow(2,n)-1; printf(运行次数为%dn,sum);if(n 10 | n %cn,x,y);1.7 流程图 开始# include #includevoid hannuota(int n,char one,char two,char three);void move(char x,char y)int main(void)定义整形变量 n;判断输入盘子数(1-10)Thannuota(n,A,B,C);return 0;printf(请输入一个010范围内的整数!);return 0;printf(please input a integer number:)scanf(%d,&n)接下页Sum =pow(2,n)-1;printf(运行次数为%dn,sum)F接上页函数调用void hannuota(int n,char one,char two,char three)if(n =1)TFmove(one,three)hannuota(n-1),one,three,two); move(one,three); hannuota(n-1),two,one,three);函数调用void move(char x,char y)printf(%c - %cn,x,y)输出结果结束1.8试验结果1.9设计体会该程序是我自己独立完成的,我在编写主函数以后,通过查阅资料最后编出了两个调用函数的编写,然后将这几个函数加以整合、更改,得到以上程序。在编写主函数是遇到了一些问题,例如,在对待函数调用的问题上,遇到了些问题,但经过查阅书籍,最终得以解决,感受颇多。第二章 数据的处理2.1内容和要求2.1.1基本内容:用c语言进行数据处理,并将相同的数据放入并集,总的数据放入交集。2.1.2 基本要求:两个数组中都有很多数字,计算这两个文件中数字的交集,并且排好序,存放在另一数组jiao中;计算两个数组中数字的并集,并且排好序,存放在另一数组bing中。2.2程序设计整体规划及方案第一部分:规划如何去实现程序相关功能,其中包括:(1)编译器的选择。我选择了Visual C+ 6.0.(2)功能框架的确定。确定各个模块需要实现的功能,以及所涉及的相关知识点。最终选择用以表链为核心去实现相关功能。(3)相关细节的讨论。包括数组的定义及赋值,返回值的选择,选择结构的确定。(4)相关知识点的学习。第二部分:进行相关模块的设计、编写。第三部分:调试各个模块的功能,在集中调试,解决相关问题,优化各部分功能,美化界面。2.3设计分析第一部分:如何将相同的数据赋给交集(1) 定义数组inter,其内部元素个数是不定的,设为n,并给其赋初值为0。(2) 通过循环结构,比较两个两个数组的数据,若相同则将相同的数据赋给inter,此时一定要注意intern中的n要自增。即intern+=ai。第二部分:如何将两个数组中所有不重复的元素赋给并集(1) 定义数组sum,其内部元素个数是不定的,设为k。并将a中元素赋给sum。(2) 通过循环结构,比较两个数组的数据,若出现ai!=bj的情况,还要进行判断。即a中的元素是否为最后一个元素,从而避免重复赋值。第三部分:如何将交并集中的元素排序(1) 建立两个循环,内循环的元素是外循环元素的后一位元素。(2) 判断两个元素的大小。以元素从小到大的原则进行判断。若不符合条件,则通过中间变量,将外循环和内循环的元素大小互换,从而解决循环问题。2.4 程序结构开始判断两个数组中相同的数据,并将其赋给inter用选择结构将交集中的元素按从小到大的顺序排序输出交集中的数据先将a数组中的所有数据赋给sum;判断a中元素和b中不同的数据,并将其赋给sum用选择结构将并集中的元素按从小到大的顺序排序输出并集中的数据结束2.5程序的功能(1)将a,b数组中相同的元素赋给交集数组,将a,b中的所有不重复的元素赋给并集数组。(2)将交、并集中的元素分别按从小到大的原则进行排序,并输出交、并集元素。2.6相关源代码#include main() int a5=1,4,2,3,5 , b5=3,6,4,5,7; int inter5,sum10,i,j,c,d,e,f,n=0,m=0,k=5; for(i=0;i5;i+) for(j=0;j5;j+) if(ai = bj) intern+=ai; for(i=0;in-1;i+) for(c=i+1;cinterc) d=interi; interi=interc; interc=d; printf(交集为:); for(i=0;in;i+) printf(n%d, ,interi); for(i=0;i5;i+) sumi = ai; for(i=0;i5;i+) for(j=0;j5;j+) if(bi != aj) if(j = 4) sumk+ = bi; else break; for(i=0;ik-1;i+) for(e=i+1;esume) f=sumi; sumi=sume; sume=f; printf(n并集为:); for(i=0;ik;i+) printf(n%dn, ,sumi); 2.7 流程图开始# include int a5=1,4,2,3,5,b5=3,6,4,5,7;int inter5,sum10,i,j,c,d,e,f,n=0,m=0,k=5;接下页接上页i5 for(j=0;j5;j+)i=0Tj=0j5 for(j=0;j5;j+)Tai = bjTintern+=aiFi=i+1FFj=j+1j5 for(j=0;j5;j+)Ti5 for(j=0;j5;j+)FTF接下页接上页in-1 for(j=0;j5;j+)i=0Tc=i+1cn for(j=0;jintercTd=interiFi=i+1FFc=c+1cn for(j=0;j5;j+)Tin-1 for(j=0;j5;j+)FTFinteri=intercinterc=d接下页j5 for(j=0;j5;j+)TBi!=ajTFi=i+1FFj=j+1j5 for(j=0;j5;j+)Ti5 for(j=0;j5;j+)FTFi5 for(j=0;j5;j+)i=0Tj=0接上页输出交集J=4接下页Tsumk+ = biFik-1 for(j=0;j5;j+)接上页接下页sume=fsumi=sumeFTFik-1 for(j=0;j5;j+)Tek for(j=0;jsumeTek for(j=0;j5;j+)e=i+1Ti=0接上页逐个输出并集结束2.8试验结果2.9设计体会该程序是我自己独立完成的,我先将程序分为求交集、并集,和将交、并集进行排序这几个模块。然后将这几个模块加以整合、更改,得到以上程序。在求交并集中遇到了一些问题,例如,不知道该怎么设定交、并集中数组的变量等问题,但经过查阅书籍,最终得以解决,感受颇多。第三章 选择法排序3.1内容和要求3.1.1基本内容:将多组无需的数据按从小到大的规律排序3.1.2 基本要求:(1)叙述选择法排序和改进选择法排序的基本思想。.(2)用程序实现这两种排序算法。(3)输入多组数据进行测试,统计对比这两种排序算法的排序耗时。(4)说明两种算法出现不同的原因。3.2程序设计整体规划及方案第一部分:规划如何去实现程序相关功能,其中包括:(1)编译器的选择。我选择了Visual C+ 6.0.(2)功能框架的确定。确定各个模块需要实现的功能,以及所涉及的相关知识点。最终选择用以表为核心去实现相关功能。(3)相关细节的讨论。包括函数的调用,返回值的选择,选择结构的确定。(4)相关知识点的学习。第二部分:进行相关模块的设计、编写。第三部分:调试各个模块的功能,在集中调试,解决相关问题,优化各部分功能,美化界面。3.3设计分析第一部分:分析选择法的基本思想 先把第一个元素作为最小者,与后面元素比较,如第一个元素大,则与其交换(保证第一个元素最小),直到最后一个元素比较完,第一趟就找出了最小元素,且保存在第一个元素位置。再以第二个元素作为最小值(次小)与后面的元素进行比较,若后面元素小,则交换,直到最后一个元素,第二小的元素已找到。依次类推,经n趟后排定。第二部分:改进方案 一般选择法排序使用两重循环来实现排序。外层循环控制排序趟数,若数组有n个元素,则共进行n-1趟。内层循环完成在剩余的数中选择最小的数,比较次数随趟数递减,循环控制变量j的初值与外循环执行次数有关:j=i+1,终值为n。当后面元素较大时,马上调换。值得注意的是程序执行时元素的交换并不是必须的。事实上,只要记住比较小元素的位置,即下标。在内循环结束后做一次交换即可,从而可提高程序的执行效率。第三部分:改进后的作用 经过改进后的程序每一趟只需交换一次元素,提高了程序的执行效率。3.4 程序结构开始定义变量及数组从键盘中获得10个无序的数据用两种选择法对无序的数组进行排序输出有序的数组结束3.5程序的功能输入10个无序的数据,通过选择法将这10个数据进行排序并按从小到大的顺序依次输出。3.6相关源代码3.6.1基础程序#includemain()int i,j,temp;int a10;for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i9;i+) /*10个元素选择9趟*/for(j=i+1;jaj) /*将ai与aj进行交换*/temp=ai;ai=aj;aj=temp;printf(n);for(i=0;i10;i+)printf(%6d,ai);printf(n); 3.6.2改进程序#includemain()int i,j,temp,k;int a10;for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i9;i+) /*k始存放本趟最小元素的下标,开始时为i*/k=i; for(j=i+1;jaj) k=j; /*记住新的小元素的序号*/if(k!=i) /*若k不等于i,说明ai不是最小的数,需要交换*/temp=ai;ai=ak;ak=temp;printf(n);for(i=0;i10;i+)printf(%6d,ai);printf(n);3.7 流程图3.7.1 基础程序开始# include int i,j,temp;int a10;逐个将无序的数据输入数组a10接下页接上页i=0i9TFFTj=i+1jajTtemp=aiai=ajaj=temp接下页Fj10Ti9J=j+1Ti=i+1FF接上页逐个输出有序的数据结束3.7.2 改进程序开始int i,j,temp,k;int a10;逐个将无序的数据输入数组a10接下页FFi=i+1TJ=j+1i9Tjajj10TFFi9i=0Tk=ij=i+1TFk!=iTtemp=aiai=akak=temp接下页接上页逐个输出排好序的数组结束3.8试验结果3.8.1 基础程序3.8.2 改进程序3.9设计体会 在编写这两个程序的时候,一开始还是比较困惑的。不知道该怎样改进选择法。最后,我参考了教材上关于选择法的改进,知道了用k将代换来减少程序的运行次数,从而得到了改进。第四章 数据的简单加密和解密4.1内容和要求4.1.1基本内容:在传输或存储前进行加密形成密文。在传输后或需要使用时,再对密文进行还原变成明文。4.1.2 基本要求:对于一个字符串,输入一个数字a作为密钥,串中的第一个字符加上该数字a转换为密文,第二个字符加上该数字a再加1转换为密文字符,依次类推,第i个字符加上该数字a再加i-1转换为密文字符。4.2程序设计整体规划及方案第一部分:规划如何去实现程序相关功能,其中包括:(1) 编译器的选择。我选择了Visual C+ 6.0.(2)功能框架的确定。确定各个模块需要实现的功能,以及所涉及的相关知识点。最终选择用以表为核心去实现相关功能。(3)相关细节的讨论。包括函数的调用,返回值的选择,循环结构的确定。(4)相关知识点的学习。第二部分:进行相关模块的设计、编写。第三部分:调试各个模块的功能,在集中调试,解决相关问题,优化各部分功能,美化界面。4.3设计分析第一部分:确定主函数的结构,其中包括:(1) 用循环结构从而实现加密与解密的循环进行。(2) 输入一个数字通过选择结构,判断符和哪一类情况,然后调用相应的函数。(3) 确定选择结构中的判断原则。第二部分:定义加密函数的结构,其中包括:(1) 从键盘上获得一个数字,通过选择结构,判断是否符合加密条件。(2) 若符合条件,从键盘上获得要加密的内容,然后再从键盘上获得密钥。(3) 建立循环结构,将原文转换成密文,然后输出密文。第三部分:定义解密函数的结构,其中包括:(1)从键盘上获得一个数字,通过选择结构,判断是否符合解密条件。(2)若符合条件,从键盘上获得密文,然后再从键盘上获得密钥。(3)建立循环结构,将密文转换成原文,然后输出原文。4.4 程序结构主函数void o();void c()返回调用4.5程序的功能(1)输入密钥将数据进行加密。(2)对已知的密文输入密钥获得原文。(3)重复使用加密,解密的程序。4.6相关源代码#includevoid main()int a=1;void c();void o();printf(*加密与解密程序*n);while (a!=0)printf(加密请输入1n);printf(解密请输入2n);printf(退出请输入0n);sc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年下一代互联网建设行业当前市场规模及未来五到十年发展趋势报告
- 2025年半导体硅片、外延片行业当前发展趋势与投资机遇洞察报告
- 2025年丽水市遂昌县中考冲刺卷数学试题含解析
- 操作规程制定流程课件
- 2025年3月时事政治试题及答案
- (2025)义务教育语文新课程标准考试测试题库及参考答案
- 2025年四川省攀枝花市医疗三严三基理论考试试题及答案
- 2025医师合理用药考核试题及答案
- 2025年桥梁隧道工岗位职业技能资格知识考试题与答案
- 项目技术管理试题及答案
- 预制水磨石施工方案
- 学校安全管理制度大全
- 《思想道德与法治》(23版):第四章 明确价值要求 践行价值准则
- 道路建设三级安全教育培训
- 工抵房协议书范本
- 建筑机电安装工程质量通病与防治
- 病历的书写规范讲课幻灯课件
- 中国航天建筑某厂房施工组织设计
- 2024年国网山东省电力公司招聘考试真题
- 全国高校辅导员素质能力大赛试题(谈心谈话、案例分析)
- 心功能不全病人的护理查房
评论
0/150
提交评论