数据结构课程设计之奇数魔方阵_第1页
数据结构课程设计之奇数魔方阵_第2页
数据结构课程设计之奇数魔方阵_第3页
数据结构课程设计之奇数魔方阵_第4页
数据结构课程设计之奇数魔方阵_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、长沙理工大学数据结构课程设计报告蜩皂醪當舞锲魔步阵闻遞田晓辉学 院计算机与通信工程班 级 计08-01学生姓名田晓辉课程成绩 专业计算机科学与技术学号 200850080110指导教师陈倩诒完成日期 2010年7月10日课程设计成绩评定学 院 计算机与通信工程专 业 计算机科学与技术班 级 计 08-01 学 号 200850080110学生姓名田晓辉指导教师陈倩诒完成日期2010年7月10日指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综

2、合成绩 指导教师签字2010年7月10日课程设计任务书计算机与通信工程学院计算机科学技术专业课程名称数据结构课程设计时间2010学年第2学期1819周学生姓名田晓辉指导老师陈倩诒题目用C语言解决魔方阵问题主要内容:建立一个n*n阶的矩阵,在这个矩阵中填入1到n2( n为 奇数)个数,使得每行、每列以及每条对角线的和相等。要求:(1)通过实际项目的分析、设计、编码、测试等工作,掌握用C语言来开发和维护软件。(2)按要求编写课程设计报告书,能正确编写分析、设计、编 码、测试等技术文档和用户使用手册。应当提交的文件:(1)课程设计学年论文。(2)课程设计附件(主要是源程序)。用C语言解决魔方阵的问题

3、学生姓名:田晓辉指导老师:陈倩诒摘 要 本课程设计主要解决设计一个nxn的矩阵中填入1到n2的数字(n为奇数),使得每一行、 每一列、每条对角线的累加和都相等的问题。在课程设计中,系统开发平台为Windows 7程序设计语言采用Visual C+6.0程序运行平台为Windows 98/2000/XP/7在程序设计中,采用了 C 语言结构化程序设计思想和过程设计方法,以功能函数为基本结构,对问题中的要求做出了准 确的实现。程序通过调试运行,初步实现了设计目标。关键词 程序设计;C+6.0;结构化;过程设计;功能函数目录1. 引言 11.1课程设计目的 11.2课程设计内容 12. 设计思路与方

4、案 23. 详细实现 33.1数据结构与数据存储表示 33.2功能函数 33.3函数逻辑功能调用图 53.4本程序执行流程图 64. 运行环境与结果 74.1程序运行环境 74.2程序运行结果 75. 结束语 9参考文献 10附录源程序代码 11田晓辉 用C语言解决魔方阵问题第2页共14页1引言本课程设计主要解决设计一个nM的方阵中填入1到n2 (n为奇数)的数字,使得每 行、每一列、每条对角线上各个数字累加的和都相等的问题。1.1课程设计目的通过这次课程设计进一步了解了二维数组的使用方法和一些基本的设计思路。对于一 个nM的方阵,其中n为奇数,在n呦的魔方阵中,填入1到n2的整数,使得其各每

5、一行、 每一列、每条对角线上各个数字累加和皆相等 。1.2课程设计内容本次课程设计内容主要是利用二维数组输出正确的n阶魔方矩阵。n阶魔方,又叫幻方阵,在我国古代称为“纵横图”,是一个比较有趣的游戏。2n阶魔 方就是用1到n2的数字不重复的填入方阵中。每一行中 n个数之和,共得n个和;每一列 中n个数之和,共得n个和;每一条对角线n个数之和,共得两个和,每一个和称为魔数。 魔方阵中的每个魔数都相等。各行、各列及对角线的魔数都等于如图1.2就是一个3阶魔方阵,它是用数字1到9不重复的填入3*3的方阵中,使得61875329415。32设计思路与方案首先,输入一个数字n (Kn<99),则输出

6、对应的n阶魔方阵,并输出每一行、 列、每条对角线上各个数字累加和。若输入数字n超出要求范围,则提醒用户重新输入 n0但若输入数字0时,操作结束,退出程序。使用多维数组输出魔方阵,分别用 3个子函数实现相应的功能。输入形式:数字n (K nW 99)。输出形式:(1) 以矩阵形式输出n (1W nW 99)阶魔方阵;(2) 输出每一行、每一列、每条对角线上各个数字累加和;(3) 输出程序运行时间。田晓辉 用C语言解决魔方阵问题第3页 共14页3详细实现3.1数据结构与数据存储表示这方面使用二维数组nMAXMAX来静态存储不超过 MAX行MAX列的数组方阵, 其中n(1<=*=99)为满足条

7、件的数。3.2功能函数主要使用与实现如下函数:(1)void mai n()函数,主函数,调用以下子函数,实现魔方阵填充与输出,实现问题要求功能;(2)#include<time.h>函数,用以计算程序运行时间函数;(3)void jishu (int n)函数,n为奇数实现n阶魔方阵,实现思想如下;a.在1到 n2的数字中,选择1开始填充魔方,将数字1填入第一行的中间方格中,即(0,n/2)的 位置。b.向已填充的前一个数字位置(p,q)的左上角(p-1,q-1 )填入下一个数字,女口 果出现以下情况,则修改填充位置:i )若填充位置超出上边界,则修改为下边界的相应 位置,即把p

8、-1修改为n-1 ; ii )若填充位置超出左边界,则修改为最右边的相应位置, 即把q-1改为n-1 ; iii )若填充位置已有数字,则填充位置修改为下一行的同一位置。c.重复以上步骤,直至将n2个数字全部填入魔方中。最后调用函数函数out (n,a)和check(n, a),实现魔方阵的输出,检验魔方阵的准确性。具体实现代码如下:void jishu(i nt n)/*奇数 */in t p,q,i,aMAXMAX;P=0;q=( n-1)/2;a0q=1;/*第一个数字的填入位置*/for(i=2;i<=n*n ;i+)p=(p-1+ n)%n;/*计算填入的位置*/q=(q-1+

9、 n)%n;田晓辉 用C语言解决魔方阵问题第18页共14页if(apq>0)/*如果填入位置已有数字,则重新计算填入位置*/p=(p+2)%n;/*由于前面p减了 1,因此p应该加1,才能表示下一行*/q=(q+1)%n;/*由于前面q减了 1,因此q应该加1,才能表示同一列*/apq=i;/* 填入数字 */out(n,a);/*调用输出函数*/check(n,a);/*调用验证函数*/(4)void out ( int n,int aMAXMAX)函数,此函数用以调整方阵元素位置,实现魔方阵n*n形式输出。具体实现代码如下:void out(int n,int aMAXMAX)/*魔

10、方矩阵输出函数 */in t p,q;for(p=0;p<=n-1;p+)for(q=0;qv=n-1;q+)cout<vsetw(4)v<apqvv""/*输出魔方矩阵的结果 */cout«e ndl«e ndl;(5)void check (intn,int aMAXMAX)函数,计算并输出n阶魔方阵每行、每列以及每条对角线上各个数字的累加和,同时验证魔方阵的准确性。具体实现代码如下:void check(int n,int aMAXMAX)/*魔方矩阵验证函数 */in t p,q,sum 仁 0,sum2=( n*n+1)* n

11、/2,k;cout«"此魔方阵的每行、每列、两条对角线的和为:"<<sum2<<endl;/*输出标准魔方阵的每行、每列、两条对角线的和*/for(p=0;p <n ;p+)for(q=0;q<n; q+)sum仁apq+sum1;/* 计算矩阵横行纵行的和*/if(sum1!=sum2)/* 判断矩阵横行纵行的和是否与标准相同coutvv"横行纵行计算结果与标准不符,请修改程序错误break;sum1=0;for(k=0;k< n;k+)sum1=akk+sum1;/*计算矩阵主对角线的和*/if(sum1!=

12、sum2)/*判断矩阵主对角线的和是否与标准相同*/coutvv"主对角线计算结果与标准不符,请修改程序错误" sum1=0;for(k=0;k< n;k+)sum1=akn-k-1+sum1;/*计算矩阵次对角线的和*/if(sum1!=sum2)/* 判断矩阵次对角线的和是否与标准相同*/ coutvv"次对角线计算结果与标准不符,请修改程序错误'*/"<<e ndl;<<e ndl;<<e ndl;3.3函数逻辑功能调用图3.4程序执行流程图图3.1逻辑功能调用图图3.2程序流程图4运行环境与结果4

13、.1程序运行环境:Windows 7系统,VC+ 6.0开发平台。4.2程序运行结果(1)运行程序,根据提示输入指令,当n=3时,程序运行结果如图421所示图4.1 n=阶魔方阵(2)当n=6时即n为偶数时,程序运行结果如图422所示的方阵中驻字之和相呈序结束651 3 的为 出阵1入的薯172131111误误误 为ittyt 也告汪呈L - I C - - C - - - E Z 禾盖累J厂 的改改改 帥请请请 t t V 两不不不每与与与亠、果果果:1 基结薪 的、厂厂L时 阵g线的 方鳖角豊 厲仃环辿 比黄王盅mlrlll图4.2 n=6阶魔方阵 当输入n=101即n超出所给范围1到99

14、时,运行结果如图4.2.3所示图4.3 n=101 阶魔方阵(4)当输入n=0时,程序运行结束,运行结果如图4.2.4所示图4.4 n=0程序结束5结束语本次课程设计我选择了一个古老的书序趣味问题一一魔方阵,通过我的努力与探索, 终于解决了奇数阶魔方阵的算法一一左上斜行法。在编程实现的过程中,我进一步掌握和熟悉了而为数组的应用,并熟悉了将问题分解 在组装的解决方法和函数的调用。编程过程中,使用另外完成输出功能的子函数void out(i nt n,i nt a),通过对其调用,大大节省了程序编写的复杂度,提高了效率。在实现奇数阶魔方阵时,遇到了一点问题,请教了同学,一起进行了讨论研究,最终 解

15、决了问题。通过这次课程设计,使我们学到了一些以前没有学过的知识,使我们对程序设计有了 更深层次的认识和理解,懂得了灵活运用。最后,由衷的向我的指导老师表示衷心的感谢,是她的指导和要求,才使我的课程设 计有了较为完善的一面,才有了我能力的提高,并使我得到了充分的锻炼,同时也感谢我 的同学,是他们帮助我解决了一些问题。最后预祝陈老师以及我的同学暑假快乐! ! !参考文献1黎明志.数据结构一用C语言描述.北京:中国水利水电出版社,2006,12 ice7733.魔方阵(magic square)人教论坛,2010, 7, 73 winice82.谁对魔方阵感兴趣.Csdn, 2010, 7, 7附录

16、源程序代码/程序名称:MAGIC.c/程序功能:输出魔方阵/程序作者:田晓辉/最后修改日期:2010-7-8#i nclude<iostream.h>#i ncludevioma nip.h>#in clude<time.h>#define MAX 99/*矩阵最大为 99*99*/void jishu(i nt n);void out(int n,int aMAXMAX);/* 魔方矩阵输出函数*/void check(int n,int aMAXMAX);/* 魔方矩阵验证函数*/void main()clock_t start,e nd;int n;whil

17、e(n!=0)/*判断输出的数n是否为0*/cout<v"*"vven dl;coutvv"*本程序用于输出1到99阶魔方阵,即将1到n平方的数填入n*n(n为奇数)的方阵 中 *"vve ndl;coutvv"*使所有的横行,纵行以及对角线上所有数字之和相等*"vve ndl;coutvv"*当输入0时本程序结束*"vve ndl;cout<v"*"vven dl;coutvve ndlvv'请输入所输出的魔方阶数:";cin>>n;while( *

18、1| n> 99)if(n=0)break;/* n=0本程序结束*/coutvv"超出范围,请重新输入:";cin>>n;if(n=0)break;/* n=0本程序结束*/coutvv'所得的魔方阵为:"vvendl;start=clock();jishu (n);en d=clock();coutvv'所花费的时间为:"vve nd-startvv 毫秒"vve ndl;coutvv'谢谢您的使用!"vvendl;void jishu(i nt n)/*奇 数 */in t p,q,i,

19、aMAXMAX;P=0;q=( n-1)/2;a0q=1;/*第一个数字的填入位置*/for(i=2;iv=n*n ;i+)p=(p-1+ n)% n;/*计算填入的位置*/q=(q-1+ n)% n;if(apq>0)/*如果填入位置已有数字,则重新计算填入位置*/p=(p+2)%n;/*由于前面p减了 1,因此p应该加1,才能表示下一行*/q=(q+1)%n;/*由于前面q减了 1,因此q应该加1,才能表示同一列*/apq=i;/* 填入数字 */out( n, a);/*调用输出函数*/check( n, a);/调用验证函数*/void out(int n,int aMAXMAX)/* 魔方矩阵输出函数 */in t p,q;for(p=0;p<=n-1;p+)for(q=0;qv=n-1;q+)cout<vsetw(4)v<apqvv&quo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论