ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:331.50KB ,
资源ID:2858751      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2858751.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编程对一个数组进行Shell排序的程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编程对一个数组进行Shell排序的程序.docx

1、编程对一个数组进行Shell排序的程序南 京 邮 电 大 学编程实践报告 学号: 姓名: 指导老师:周文数理学院信息与计算科学2014年5月一、 第016E题1问题描述。设计对一个数组进行Shell排序的程序。2问题分析。对于此问题要注意两个方面,一个是数组的输入、输出,另一个则是如何实现shell排序。对于数组的输入、输出,要注意申请动态数组空间,并且最后要释放;对于实现shell排序,要注意利用循环结构实现步长变化时,数组元素的处理。3设计思路。模块化设计:1) input模块:通过循环结构及数组实现数列的输入2) Shellsort模块:实现对数组的shell排序 3) output模块

2、:实现对排序后数组的输出4) 主函数模块:实现各模块函数功能4流程图。系统整体流程5源程序。#includevoid input(int a,int n) int i=0; cout-请输入要排序的数-ai; i+; while(i1) d=(d+1)/2;/开始步长 for(int i=0;in-d;i+) if(ai+dai) int temp; temp=ai; ai=ai+d; ai+d=temp; /互换 /shell排序void output(int a,int n) for(int k=0;kn;k+) coutak ; coutendl;/输出int main() int m;

3、 cout-请输入要排序多少数-m; int *a; a=new intm;/申请动态数组空间 input(a,m); ShellSort(a,m); cout-经shell排序后-eps |f(x1)|eps5. 源程序。#include #include #include float function(float x);float d2function(float x);int NewTon(float x0,float eps,float *x1);/函数声明int main() int n=0; float x0=0; /*初值*/ float xold,xnew; float eps

4、=1e-6; /*精度*/ int NewTon(float x0,float eps,float *x1); xold=x0; while (!NewTon(xold,eps,&xnew) xold=xnew; printf(输出根为:n); printf(x=%ft,xnew); getch(); return 0;float function(float x) return x*x*x-2*x*x+4*x+1;float d2function(float x) return 3*x*x-4*x+4;int NewTon(float x0,float eps,float *x1) *x1=

5、x0-function(x0)/d2function(x0); if (fabs(function(*x1)eps) return 1; else return 0;6测试:包括测试数据、测试结果、结果分析测试结果结果分析:当我们用printf(x=%ftf=%ft,xnew,function(xnew);替换printf(x=%ft,xnew);时,输出f,若f=0.000000,则结果正确:7. 心得1.加深对牛顿迭代的理解2.掌握对函数声明与函数定义3.解决难点:如何利用循环结构进行迭代三、 第019M题1. 问题描述。设有n个人围坐在圆桌周围,从某个位置开始用自然数进行编号为1,2,n

6、。然后从编号为k的人从1开始报数,数到m的人便出列;下一个人(第m十1个)又从1开始报数,数到m的人便是第二个出列的人。如此继续下去,直到最后一个人出列为止。要求输出这个出列的顺序。 这个问题称为雅瑟夫(Josephu)问题。 具体要求如下: (1)n、m、k由键盘输入,输入前要有提示。 (2)在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该存储空间。 (3)分别用n8,m4,k1以及n10,m12,k = 4调试运行你的程序。2. 问题分析。这是一个删除数组元素的问题,关键在于把握删除的数组下标;可以通过循环结构顺序删除。3. 设计思路。1) 建立一个长度为n的整型数

7、组a,顺序存储1到n,表示n个人。2) 从第k个人开始报数。3) 用i=k-1表示数组元素下标,假设从i“指向”的数组元素开始数,数到m,相当于i值增加m-1。如果在数的过程中遇到数组最后一个元素,则要从数组第一个元素继续数,即将数组想象成一个“环”,为此要用到求余运算,综合起来,被删除元素的下表计算公式为:i=(i+m-1)%n如果删除的正好是数组最后一个元素,那么下一轮要从数组第一个元素开始数。4) 重复执行步骤(3),直到n等于1。4. 流程图 否 是 5. 源程序。#include#includeint main() int i,j,m,n,k,*pa; coutinput n and

8、 mnm; coutinput kk; while(kn-1);/保证k符合要求 pa=new intn; if(pa=NULL) coutallocation failure; exit(1); for(i=0;in;i+) pai=i+1; i=k-1; cout出列顺序为:0) i=(i+m-1)%n; coutpai ; for(j=i+1;jn;j+) paj-1=paj; n-; if(i=n) i=0; coutendl; delete pa;/满足题目要求二 return 0;6. 测试:包括测试数据、测试结果、结果分析n8,m4,k1n10,m12,k = 47. 心得1.切

9、记动态数组空间申请后要释放2.学习如何应用循环结构对数组元素的删除四、 第018H题1. 问题描述。由n2个方块排成n行n列的正方形称为“n元棋盘”。如果两个皇后位于n元棋盘上的同一行或同一列或同一对角线上,则称它们为互相攻击。要求输出使n无棋盘上的n个皇后互不攻击的所有布局。 具体要求如下; (1)n可由键盘输入。 (2)在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该存储空间。 (3)分别用n4,5,6运行你的程序。2问题分析。皇后不能相互攻击,也就是不能处于同一条直线上,所以每一行只能有一个皇后,也不能处于同一列或斜线上。解决问题最直接的办法,就是在逐次在每一行每

10、一个位置上尝试放一个皇后,并且在放后必须与前面放置的不能互相攻击。只要能够保证n个皇后都能找到正确的位置就是成功。3设计思路。(1)输入皇后的总数(2)在第一行上一次的下一列放置皇后(3)在第下一行寻找不与前面相互攻击的位置(4)重复第(3)步n次(4)如果成功,输出皇后的排列(5)重复24步n次(6)结束4流程图。5源程序。#include #include using namespace std;int *position; /放置的位置int queen; /皇后数目int count=0; /第N种可能性/判断第n行放置皇后是否合法bool SignPoint(int n) for (

11、int i=0;in;i+) if(*(position+i)=*(position+n)|abs(*(position+i)-*(position+n)=abs(i-n) return false; return true;/设置皇后void SetQueen(int n=0) if(queen=n) printf(NO.%d: ,+count); printf(n); for(int i=0;iqueen;i+) for (int j=0;jqueen;j+) if(j=positioni) printf(* ); else printf(0 ); printf(n); printf(n); / return; else

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1