您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > n阶奇数魔方阵课程设计说明书
届课程设计《n阶奇数魔方阵问题》课程设计论文学生姓名学号所属学院信息工程学院专业计算机科学与技术班级计算机指导教师教师职称讲师塔里木大学教务处制塔里木大学信息工程学院课程设计第1页共12页目录前言..............................................................2正文..............................................................32.1设计思路与方案.................................................32.1.1算法.....................................................32.2详细实现......................................................32.2.1数据结构与数据存储表示...................................32.2.2功能函数.................................................42.2.3函数逻辑功能调用图.......................................62.2.4程序执行流程图...........................................62.3运行环境与结果.................................................72.3.1程序运行结果.............................................72.4改进程序分析...................................................92.5小结.........................................................10参考文献.........................................................11附录.............................................................124.1二维数组概述..................................................124.2二维数组基本运算算法..........................................12塔里木大学信息工程学院课程设计第2页共12页前言本课程设计主要解决设计一个n×n的方阵中填入1到n2(n为奇数)的数字,使得每一行、每一列、每条对角线上各个数字累加的和都相等的问题。1.1课程设计目的通过这次课程设计进一步了解了二维数组的使用方法和一些基本的设计思路。对于一个n×n的方阵,其中n为奇数,在n×n的魔方阵中,填入1到n2的整数,使得其各每一行、每一列、每条对角线上各个数字累加和皆相等[1]。1.2课程设计内容本次课程设计内容主要是利用二维数组输出正确的n阶魔方矩阵。n阶魔方,又叫幻方阵,在我国古代称为“纵横图”,是一个比较有趣的游戏。[2]n阶魔方就是用1到n2的数字不重复的填入方阵中。每一行中n个数之和,共得n个和;每一列中n个数之和,共得n个和;每一条对角线n个数之和,共得两个和,每一个和称为魔数。魔方阵中的每个魔数都相等。如图1.2就是一个3阶魔方阵,它是用数字1到9不重复的填入3*3的方阵中,使得各行、各列及对角线的魔数都等于15。[3]图1.13阶魔方阵618753294塔里木大学信息工程学院课程设计第3页共12页正文2.1设计思路与方案首先,输入一个数字n(1≤n≤99),则输出对应的n阶魔方阵,并输出每一行、每一列、每条对角线上各个数字累加和。若输入数字n超出要求范围,则提醒用户重新输入n。但若输入数字0时,操作结束,退出程序。使用多维数组输出魔方阵,分别用3个子函数实现相应的功能。输入形式:数字n(1≤n≤99)。输出形式:(1)以矩阵形式输出n(1≤n≤99)阶魔方阵;(2)输出每一行、每一列、每条对角线上各个数字累加和;(3)输出程序运行时间。2.1.1算法(1)将1填入第一行中间;(2)将每个数填在前一个数的右上方。(3)若该位置超出最上行,则改填在最下行的对应位置;(4)若该位置超出最右列,则该填在最左列的对应行位置;(5)若某元素填在第一行最右列,下一个数填在该数同列的下一行;(6)若某数已填好,但其右上角已填了其他数据,则下一个数填在该数同列的下一行位置。2.2详细实现2.2.1数据结构与数据存储表示这方面使用二维数组n[MAX][MAX]来静态存储不超过MAX行MAX列的数组方阵,其中n(1=n=99)为满足条件的数。塔里木大学信息工程学院课程设计第4页共12页2.2.2功能函数主要使用与实现如下函数:(1)voidmain()函数,主函数,调用以下子函数,实现魔方阵填充与输出,实现问题要求功能;(2)#includetime.h函数,用以计算程序运行时间函数;(3)voidjishu(intn)函数,n为奇数实现n阶魔方阵,实现思想如下;a.在1到n2的数字中,选择1开始填充魔方,将数字1填入第一行的中间方格中,即(0,n/2)的位置。b.向已填充的前一个数字位置(p,q)的左上角(p-1,q-1)填入下一个数字,如果出现以下情况,则修改填充位置:i)若填充位置超出上边界,则修改为下边界的相应位置,即把p-1修改为n-1;ii)若填充位置超出左边界,则修改为最右边的相应位置,即把q-1改为n-1;iii)若填充位置已有数字,则填充位置修改为下一行的同一位置。c.重复以上步骤,直至将n2个数字全部填入魔方中。最后调用函数函数out(n,a)和check(n,a),实现魔方阵的输出,检验魔方阵的准确性。具体实现代码如下:voidjishu(intn)/*奇数*/{intp,q,i,a[MAX][MAX];p=0;q=(n-1)/2;a[0][q]=1;/*第一个数字的填入位置*/for(i=2;i=n*n;i++){p=(p-1+n)%n;/*计算填入的位置*/q=(q-1+n)%n;if(a[p][q]0)/*如果填入位置已有数字,则重新计算填入位置*/{p=(p+2)%n;/*由于前面p减了1,因此p应该加1,才能表示下一行*/q=(q+1)%n;/*由于前面q减了1,因此q应该加1,才能表示同一列*/}a[p][q]=i;/*填入数字*/}out(n,a);/*调用输出函数*/check(n,a);/*调用验证函数*/}(4)voidout(intn,inta[MAX][MAX])函数,此函数用以调整方阵元素位置,实现魔方阵n*n形式输出。具体实现代码如下:voidout(intn,inta[MAX][MAX])/*魔方矩阵输出函数*/{塔里木大学信息工程学院课程设计第5页共12页intp,q;for(p=0;p=n-1;p++){for(q=0;q=n-1;q++){Printf(setw(4),a[p][q])/*输出魔方矩阵的结果*/}Printf(endl,endl);}}(5)voidcheck(intn,inta[MAX][MAX])函数,计算并输出n阶魔方阵每行、每列以及每条对角线上各个数字的累加和,同时验证魔方阵的准确性。具体实现代码如下:voidcheck(intn,inta[MAX][MAX])/*魔方矩阵验证函数*/{intp,q,sum1=0,sum2=(n*n+1)*n/2,k;printf(此魔方阵的每行、每列、两条对角线的和为:(sum2,endl);/*输出标准魔方阵的每行、每列、两条对角线的和*/for(p=0;pn;p++){for(q=0;qn;q++){sum1=a[p][q]+sum1;/*计算矩阵横行纵行的和*/}if(sum1!=sum2)/*判断矩阵横行纵行的和是否与标准相同*/{Printf(横行纵行计算结果与标准不符,请修改程序错误,endl);break;}sum1=0;}for(k=0;kn;k++){sum1=a[k][k]+sum1;/*计算矩阵主对角线的和*/}if(sum1!=sum2)/*判断矩阵主对角线的和是否与标准相同*/printf(主对角线计算结果与标准不符,请修改程序错误,endl);sum1=0;for(k=0;kn;k++)塔里木大学信息工程学院课程设计第6页共12页{sum1=a[k][n-k-1]+sum1;/*计算矩阵次对角线的和*/}if(sum1!=sum2)/*判断矩阵次对角线的和是否与标准相同*/printf(次对角线计算结果与标准不符,请修改程序错误,endl);}2.2.3函数逻辑功能调用图图3.1逻辑功能调用图2.2.4程序执行流程图voidmain()voidjishu(intn)out(n,a)check(n,a)塔里木大学信息工程学院课程设计第7页共12页图3.2程序流程图2.3运行环境与结果2.3.1程序运行结果(1)运行程序,根据提示输入指令,当n=3时,程序运行结果如图4.2.1所示开始输入nn在允许的范围内调用jishu(intn)调用out(n,a)调用check(n,a)输出n阶魔方阵每行、每列以及每条对角线上各数字的累加和结束NY塔里木大学信息工程学院课程设计第8页共12页图4.1n=3阶魔方阵(2)当n=7时即n为奇数时,程序运行结果如图4.2.2所示图4.2n=7阶魔方阵(3)当输入n=101即n超出所给范围1到99时,运行结果如图4.2.3所示图4.3n=101阶魔方阵塔里木大学信息工程学院课程设计第9页共12页(4)当输入n=0时,程序运行结束,运行结果如图4.2.4所示图4.4n=0程序结束2.4改进程序分析if((i1)&&(jn))/*上一个数是第一行第n列时,则把下一个数放在上一个数的下面*/{i=i+2;j=j-1;}else{if(i1)i=n;/*上一个数的行数为1,则下一个数的行数为n,上一个数的列数的n时,下一个数的列数为1*/if(jn)j=1;}if(a[i][j]==0)a[i][j]=k;else{i=i+2;/*如果按上面的规则确定的位置上已有数,则把下一个数放在上一个数的下面*/j=j-1;a[i][j]=k;}塔里木大学信息工程学院课程设计第10页共12页2.5小结本次课程设计我选择了一个古老的书序趣味问题——魔方阵,通过我的努力与探索,终于解决了奇数阶魔方阵的算法——左上斜行法。在编程实现的过程中,我进一步掌握和熟悉了而为数组的应用,并熟悉了将问题分解在组装的解决方法和函数的调用。编程过程中,使用另外完成输出功能的子函数voidout(intn,inta),通过对其调用,大大节省了程序编写的复杂度,提高了效率。在实现奇数阶魔方阵时,遇到了一点问题,请教了同学,一起进行了讨论研究,最终解决了问题。通过这次课程设计,使我们学到了一些以前没有学过的知识,使我们对程序设计有了更深层次的认识和理解,懂得了灵活运用。最后,由衷的向我的指导老师表示衷心的感谢,是她的指导和要求,才使我的课程设计有了较为完善的一面,才有了我能力的提高,并使我得到了充分的锻炼,同时也感谢我的同学,是他们帮助我解决了一些问题。塔里木大学信息工程学院课程设计第11页共12页参考文献[1]严蔚敏,吴伟民.数据结构.北京:清华大学出版社,2007.4[2]耿国华等.数据结构,西安:西安电子科技大学出版社,2002[3]许卓群等.数据结构与算法,北京:高等教育出版社,2005[4]张乃孝等.算法与数据结构,北京:高等教育出版社,2001[5]范策等编著.算法与数据结构,北京:机械工业出版社,2004[6]黎明志.数据结构—用
本文标题:n阶奇数魔方阵课程设计说明书
链接地址:https://www.777doc.com/doc-7267558 .html