




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、吉林工程技术师范学院信息工程学院 数据结构 课程设计报告题 目: 拉丁方阵 专 业: 软件工程 班 级: R1241 姓 名: 冮冶 学 号: 03号 指导教师: 刘明 时 间: 摘 要拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,并且每种元素在一行和一列中恰好出现一次。例如下图是一个3×3的拉丁方阵:3 2 12 1 31 3 2如果一个拉丁方阵的第一行和第一列按照元素的先后顺序来排列,那么这称为拉丁方阵的标准型,例如下图就是一个3x3的拉丁方阵标准型,第一行和第一列都是”1 2 3”。1 2 32 3 13 1 2编写一个程序读入一个方阵,判断
2、其是否为拉丁方阵;进一步地,判断是否为标准型。(1)输入包含多组数据。每组数据第一行为正整数n,表示方阵的大小。其后n行,每行有n个1到n之间的整数,整数之间恰有一个空格,表示方阵的内容。输入保证1n100输入以n=0结束,不要处理这个数据。(2)每组数据对应于一行输出。如果输入是拉丁方阵,但不是标准型则输出1;如果输入是标准型则输出2;如果输入不是拉丁方阵则输出0。(3)应用“数据结构与算法”课程知识建立该问题的数据结构模型;关键字:拉丁方阵 ,比较,数据结构与算法22目 录一、课程设计的目的 二、设计方案的论证(背景、意义、技术路线) 三、设计实现过程四、调试运行及结果分析 五、测试及问题
3、探讨 六、课设总结与体会 .七、致谢八、参考文献 九、附录 一、 课程设计的目的数据结构课程设计的目的是使同学们能够根据数据对象的特性,合理的组织数据并能综合运用数据结构与程序设计基本知识解决实际问题,培养基本的、良好的程序设计技能。明确题目要求、确定数据的逻辑结构和存储结构;完成核心算法的设计、编码与调试;准备测试数据,对软件进行测试与调试并撰写课程设计报告;,验收及答辩。通过实践操作,能熟练运用C语言实现逻辑结构、存储结构及核心算法;掌握书写程序设计说明文档的能力和工程软件设计的基本方法。二、 设计方案的论证(背景、意义、技术路线)据说普鲁士的腓特列大帝曾组成一支仪仗队,仪仗队共有36名军
4、官,来自6支部队,每支部队中,上校、中校、少校、上尉、中尉、少尉各一名。他希望这36名军官排成6×6的方阵,方阵的每一行,每一列的6名军官来自不同的部队并且军衔各不相同。令他恼火的是,无论怎么绞尽脑汁也排不成。后来,他去求教瑞士著名的大数学家欧拉。欧拉发现这是一个不可能完成的任务。来自n个部队的n种军衔的n×n名军官,如果能排成一个正方形,每一行,每一列的n名军官来自不同的部队并且军衔各不相同,那么就称这个方阵叫正交拉丁方阵。欧拉猜测在n=2,6,10,14,18,时,正交拉丁方阵不存在。然而到了上世纪60年代,人们用计算机造出了n=10的正交拉丁方阵,推翻了欧拉的猜测。现
5、在已经知道,除了n=2,6以外,其余的正交拉丁方阵都存在,而且有多种构造的方法。意义:熟悉运用C语言实现数据结构的运算技术路线:工具WinTC三、 设计实现过程3.1 概要设计开始判断阶数是否超出范围输出方阵结束输入方阵阶数否是输入方阵的数字图3.1-1开始判断第一行,列判断每行数据方阵判断每列数据输出结束图3.1-23.2 详细设计1)定义数组a100100。2)输入方阵for (i=0;i<n;i+) for(j=0;j<n;j+) scanf("%d",&aij); 输出方阵for(i=0;i<n;i+) printf("n&quo
6、t;); for(j=0;j<n;j+) printf("%d",aij);3)判断各行是否有相等数据for (i=0;i<n;i+) for (j=i;j<n;j+) for (k=j+1;k<n;k+) if(aij=aik) ch=0; return ch;/行数中有相等数据返回L=0 return ch;/符合数组各行无相等数据返回L=14)判断各列是否有相等数据for(i=0;i<n;i+)for(j=i;j<n;j+)for(k=j+1;k<n;k+)if(aji=aki)/(不无法比较相邻的行列)ch=0;return
7、 ch;/列数中有相等数据返回M=0 return ch;/符合数组各列无相等数据返回M=15)判断有序for(i=0;i<n;i+) /第一行有序 if(a0i<a0i+1) flag1=0; break;for(j=0;j<n;j+) /第一列有序 if(aj0<aj+10) flag2=0;break; 6)判断条件若有序情况下继续判断行列是否相等if(flag1=0)&&(flag2=0) for (i=1;i<n;i+) if(a0i=ai0) ch=0; return ch;/各行各列均有序且行与列相等返回N=0 return ch;/
8、行与列不相等则不是标准型返回N=17)输出判断的方阵类型if(k=1&&s=1) if(m=1) printf("2 ");/是拉丁方阵但不是标准拉丁方阵 else printf("1阵");/是标准拉丁方 else printf("0 ");/不是拉丁方阵四、 调试运行及结果分析图4-1图4-2图4-3图4-4图4-5图4-6图4-7图4-8五、 测试及问题探讨我们是通过在主函数中输入方阵数据,并调用子函数运行,输出结果,来实现的。第一次运行时,出现了很多错误。在我的逐条分析下,发现很多是语法错误。例如在语句后面没有
9、加“;”,或是在输出的部分弄错了字符的表示格式等错误。我便仔细查看,一一改正过来。开始时,我所编写的程序,不能判断当输入的数大于n的情况。编写不符合要,我在主函数中添加了一条比较语句,得以实现。在编程序之前,我不知该如何实现方阵的排列,找到了C语言的课本,然后决定用二维数组来实现,在对方阵进行判断时,由于if语句比较多,运行时发现与要求不符,便重新对if语句进行排序,嵌套等操作,最终得以实现六、 课设总结与体会通过这次课设我学会了如何利用C语言数组,在C语言的环境下实现方阵的形成,比较和判断,拉丁方阵具有悠久的历史,用现代的计算机编程语言,通过数据结构进行实现。在数据结构的课堂上有关数组我们学
10、过了很多,例如:数组的定义。有关方阵,矩阵,我们也学过了很多例如方阵,矩阵的存储等知识,在这节课程设计之前,我花费了一些时间看书上的这些内容,以便我能更好的进行课程设计。这节课程设计不仅让我们巩固数据结构了知识,还让我们对C语言编程的实现,及语法进行了很好的巩固。不仅如此,也增强了我们的编程调试的能力,让我们能熟练的来运用C语言环境的各种工具。七、致谢在这次课程设计中,我要感谢我的课程设计老师帮助我完成了这次的课程设计,在许多技术性的问题上给予我帮助,在设计过程中给了我很多的意见和建议,在调试的时候也帮助我,把一些不晚上的想法完善了。还有,我要感谢我的同学们,在最早的选题时,都是同学们帮助我,
11、geile我很多建议。最后我要感谢我的学校,给我们提供了一个良好的课程设计环境,在这次课设中我学到了很多,得到了很多,所以我还要再次感谢这些我要感谢的人八、参考文献1 王昆仑,李红. 数据结构与算法. 北京:中国铁道出版社,2006年5月。2 胡学钢. 数据结构与算法指导.北京:清华大学出版社,1999。3 胡学钢. 数据结构.北京:高等教育出版社,2006。4王红梅,胡明,王涛编著.数据结构(C+版). 北京:清华大学出版社,2005.7.5谭浩强编著.C+面向对象程序设计.北京:清华大学出版社,2006.1.九,附录源程序:#include "stdio.h"#incl
12、ude"stdlib.h"int panduan1(int a100100,int n)/判断各行是否有相等数int ch=1;int i,j,k; for (i=0;i<n;i+)for (j=0;j<n;j+) for (k=j+1;k<n;k+) if(aij=aik) ch=0;return ch;/行数有相等 k=0 return ch;/符合数组各行不相等返回 K=1 int panduan2(int a100100,int n)/判断各列是否有相等数int ch=1; int i,j,k; for(i=0;i<n;i+)for(j=0;
13、j<n;j+)for(k=j+1;k<n;k+)if(aji=aki)ch=0;return ch;/列数有相等 s=0return ch;/符合数组各列不相等返回 S=1int panduan3(int a100100,int n)/判断首行首列是否相等int ch=1,flag1=1,flag2=1;int i,j;for(i=0;i<n;i+) /第一行有序if(a0i<a0i+1)flag1=0;break;for(j=0;j<n;j+) /第一列有序if(aj0<aj+10)flag2=0;break;if(flag1=0&&fla
14、g2=0)for (i=1;i<n;i+)if(a0i=ai0)/有序且行列相等 m=0 ch=0;return ch; return ch;/不相等不是标准 m=1void main() int n,i,j;int k,s,m;int a100100;printf("请输入方阵阶数:n");scanf("%d",&n);if(n<=1|n>=100)printf("此数据不符合要求n");elseprintf("输入矩阵的数据%d个n",n*n);k=panduan1(a,n);for (i=0;i<n;i+)for(j=0;j<n;j+) scanf("%d",&aij);if(aij>n)k=0;for(i=0;i<n;i+) printf("n"); for(j=0;j<n;j+) printf(&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论