数据结构课程设计报告

发布 2022-10-05 19:14:28 阅读 1028

一、题目。

奇数阶幻方求解。

问题描述】

幻方是一种很有意思的数字矩阵,在很早著名的九宫八卦阵就与幻方有关。幻方的定义为: 1 到 n*n 的整数填入n*n的方格中,每行和每列以及对角线的数字之和必须是相等的。

你作为八卦公司的顶级程序员,现在需要你解决一个问题,将任意奇数阶的幻方找出来。

基本要求】输入包括多个测试集,每行为一个正奇数n(1 <=n < 1000),0作为输入的结束且不需要处理 ,对于输入的每一个n, 输出一个它所对应的n阶幻方,如果存在多个,任意一个即可,每个幻方为n*n的矩阵,对于每个幻方,每行输出幻方的一行,每行中的数字之间用一个或多个空格分开。不同的幻方之间用一个空行分开。

二、问题分析及任务定义。

问题分析】1、本程序要求输出奇数n阶幻方,其重点应该就是在求幻方的算法上,我们。

可以通过二维数组的方法来定义存储幻方。

2、本程序要输入多个测试集,可通过一位数组来存储,可通过查找算法在测试集中找出是否有你要的幻方。

任务定义】通过对初始化的二维数组值的重新编排,用几个判断语句来实现幻方的输出。

三、数据结构的选择和概要设计。

1、采用一个子函数实现测试集的输入,并存储在数组中,同时定义一个数组指针,存储完成后返回指向该数组的指针。

2、采用另外一个子函数判断你要找的幻方是否在测试集中,形参为1中指向数组的指针和来自主函数中你要查找的幻方的阶数。如果查找成功返回1,否则返回0;

3、基本操作:int input()

操作结果:实现测试集的输入,并返回。

int search(int *p,int m)

操作结果:确定你要查找的幻方是否在测试集中,如果在返回1,否则返回0;

void main()

操作结果:主函数,实现你要幻方的阶数的输入,同时实现幻方初始化后数据的重新编排,使之成为幻方并输出。

4、核心程序的算法。

奇数阶幻方的构造方法很简单,我们先来看一个三阶幻方。

各数在方阵中的位置可以这样确定:

首先把1放在最上一行正中间的方格中,然后把下一个整数放置到右上方,如果到达最上一行,下一个整数放在最后一行,就好像它在第一行的上面,如果到达最右端,则下一整数放在最左端,就好像它在最右一列的右侧,当到达的方格中已填上数值时,下一个整数就放在刚填上数码的方格的正下方。照着三阶幻方,从1至9走一下,就可以明白它的构造方法。

四、详细设计和编码。

1、主函数:

void main()

int m,mm,i,j,ni,nj,s,*h;

int magic[max][max];

先输入你要查找幻方的阶数。

然后调用input()

最后调用search()

输出。 2、input函数:int input()

int i[max],*p=null,j=0;

返回指针p3、search()函数:int search(int *p,int m)

通过判断*p是否为0来结束查找,因为输入时是以0结束的。

返回0或1.

4、幻方的求解 :先用if判断你你输入的阶数是否为奇数,如果是,继续判断search的返回值是否为1,如果是,则开始重新编排数组的值。首先,将1放在第一行的正中间的空格中,然后把2放在1空格的右上方,像田字的对角一样,如果1刚好是最后一列,则2放在第一列,1的上一行;如果1刚好在第一行,则2放在最后一行。

如果1的右上方位置已经有数,则把2放在该数的正下方一行。其他数同理。

5、具体**:

#include<>

#define max 100

int input()

int i[max],*p=null,j=0;

p=i;printf("输入多个测试集,以0结束……");

i[j]=-1;

while(i[j]!=0)

return p;

int search(int *p,int m)

while(*p!=0)

return 0;

void main(void)

int m,mm,i,j,k,ni,nj,s,*h;

int magic[max][max];

h=input();

printf("请输入你要查找的幻方的阶数:")

scanf("%d",&m);

for(i=0;i for(j=0;j magic[i][j]=0;

if((m>0)&&m%2!=0))

else//右上方方格已经填上了数。i++;

printf("查找成功!幻方如下");

for(i=0;i

elseprintf("在测试集中没有找到你要的幻方!!!n");

else//偶数和非正数情况。

printf("输入错误,该程序只能查抄奇数阶幻方!!!")

五、测试结果及分析。

分析:先是输入一连串的测试集,并以0结束,然后输入你要查找的幻方的阶数,11阶,因为11在测试集中,所以表示查找成功,并且输出11阶幻方,可以检测到该幻方符合要求。

分析:15不在测试集中,由主程序中的search()函数的返回值可以判断,15不等于数组i【】中的任一个值,所以返回0给主函数,故提示在测试集中没有找到你要找的幻方,并且无法输出幻方。

六、用书使用说明。

1、本程序运行的环境为window操作系统。

2、运行的工具为vc++6.0。

3、在dos的页面下,请按要求输入。

七、参考文献。

1】王昆仑李红《数据结构与算法》。北京。中国铁道出版社。2007.6

2】谭浩强 《c程序设计》。北京。清华大学出版社。2010.6

3】严蔚敏吴伟明 《数据结构》 北京。清华大学出版社2002.9

八、附录。源程序文件清单:

#include<>

#define max 100

int input()

int i[max],*p=null,j=0;

p=i;printf("输入多个测试集,以0结束……");

i[j]=-1;

while(i[j]!=0)

return p;

int search(int *p,int m)

while(*p!=0)

return 0;

void main(void)

int m,mm,i,j,k,ni,nj,s,*h;

int magic[max][max];

h=input();

printf("请输入你要查找的幻方的阶数:")

scanf("%d",&m);

for(i=0;i for(j=0;j magic[i][j]=0;

if((m>0)&&m%2!=0))

else//右上方方格已经填上了数。i++;

printf("查找成功!幻方如下");

for(i=0;i

elseprintf("在测试集中没有找到你要的幻方!!!n");

else//偶数和非正数情况。

printf("输入错误,该程序只能查抄奇数阶幻方!!!")

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...

数据结构课程设计报告

设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...

数据结构课程设计报告

河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...