-N阶魔方课程设计报告Word下载.doc
- 文档编号:13010236
- 上传时间:2022-10-02
- 格式:DOC
- 页数:18
- 大小:336.50KB
-N阶魔方课程设计报告Word下载.doc
《-N阶魔方课程设计报告Word下载.doc》由会员分享,可在线阅读,更多相关《-N阶魔方课程设计报告Word下载.doc(18页珍藏版)》请在冰豆网上搜索。
第2章需求分析
2.1问题描述
2.1.1语言描述:
给定一奇数n,构造一个n阶魔阵。
n阶魔阵是一个n阶方阵,其元素由自然数1,2,3,…,n2组成。
魔阵的每一行元素之和,每列元素之和以及主、副对角线元素之和均相等。
即对于给定的奇数n以及i=1,2,3,…,n,魔阵a满足条件:
要求输出结果的格式要具有n阶方阵的形式。
2.1.2算法概述:
依次将自然数填入方阵中,共填n轮,每轮填n次。
第一轮的第一次,将1填如入方阵的中间一行的最后一列位置。
设前一次填入的位置是,每轮中第2至第n次将数填入,若遇到下列两种情况之一,则填写位置按以下规则调整。
l是最后一列(即j=n)位置,则将下一个数填入;
l是最后一行(即i=n)位置,则将下一个数填入;
新一轮的第一次填入。
2.1.3举例说明:
当n=3时,得到3*3魔阵:
4
3
8
9
5
1
2
7
6
具体程序实行过程如下:
图1-1在中间行最后一列的位置上插入第一个数据1;
图1-2在数据1的右下角位置上插入元素2(即i+1);
2
图1-3检查2的右下方为空,即将3插入;
图1-43的右下方有数据1,故将4插入3的左方;
1
图1-54的右下方有空位置,插入5;
5
图1-6将6插入;
图1-7将7插入;
图1-8将8插入;
6v
图1-9将9插入;
2.2基本要求
要求输出结果的格式要具有n阶魔阵的形式。
给定一奇数n,构造一个n阶魔
阵。
魔阵的
每一行元素之和,每列元素之和以及主、副对角线元素之和均相等。
遇到不合法数据时能有相应的提示并加以处理,同时保证不会出现死循环。
提供连续实现的功能。
2.3测试数据
第一组:
1,n;
第二组:
2;
第三组:
3,y;
第四组:
3,a;
第五组:
1,3;
第3章概要设计
3.1数据结构
此课程设计采用一维数组来存储二维矩阵。
利用指针和数组之间相互应用,表达矩阵。
所用一维数组来存储二维矩阵的方法能够使矩阵更容易操作,并可
在开辟的连续存储空间中能够有效的存储矩阵。
则上例n=3在一维数组中的存储为如下图:
012345678
4
3
8
9
2
7
6
图3-1n=3时在一维数组中的存储图
*具体的表示运行方法为以下程序:
int*p=newint[n*n];
inti;
for(i=0;
i<
n*n;
i++)
{
p[i]=0;
}
i=n/2;
intj=n-1;
intk=1;
p[i*n+j]=k;
while(k<
n*n)
{
if(!
p[((i+1)%n)*n+((j+1)%n)])
{
p[((i+1)%n)*n+((j+1)%n)]=k+1;
i++;
j++;
}
else
{
p[(i%n)*n+((j-1)%n)]=k+1;
j--;
}
k++;
}
*为了保证算法的健壮性,在程序的设计当中,加入了一些模块。
while
(1)
{
cout<
<
"
************n阶魔阵************"
endl;
请输入一个奇数n"
intn;
//魔阵阶数
stringnn;
//浮点数,用以判断输入数是否为整数
while(cin>
>
nn,n=ConvertStringToInt(nn),n%2==0||n<
=0||IsContainInString(nn,'
.'
))
if(IsContainInString(nn,'
{
cout<
请输入一个整数!
}
elseif(n%2==0)
{
cout<
请不要输入偶数!
}
elseif(n<
=0)
{
cout<
请输入一个大于0的数"
}
*设计模块可进行连续计算,程序如下:
stringre;
cout<
继续?
(y/n)"
while(cin>
re,!
IsContainInString(re,'
y'
)&
&
!
n'
选择无效,请重新选择!
}
if(IsContainInString(re,'
谢谢使用,再见!
break;
*如遇到特殊情况,可以用dos命令对程序进行操作,具体程序如下:
system("
pause"
);
return0;
*当遇到输入错误时,如,输入的为浮点型数据,则用一下模块进行处理:
intConvertStringToInt(stringre)
intn=re.length();
inti,t=0;
for(i=0;
n;
{
if(re[i]<
'
0'
||re[i]>
9'
)
return0;
t=t*10+re[i]-48;
}
returnt;
*IntConertStringToInt(stringre)的流程图如下:
开始
n=re.length()
t=0
i=0
N
结束
returnt
i<
n
Y
re{i}<
’0’||re{i}>
’9’
return0
t=t*10+re{i}-48
i=i+1
图3-1ConertStringToInt()函数流程图
*boolIsContainInString(string&
a,charb)的流程图如下:
n=a.length()
i=0
returnfalse
a{i}=b
returntrue
i=i+1
图3-2IsContainInString()函数流程图
第4章详细设计
#include<
iostream>
iomanip>
string>
usingnamespacestd;
intConvertStringToInt(string);
boolIsContainInString(string&
char);
intmain()
while
(1)
//魔阵阶数
while(cin>
=0||IsContainInString(nn,'
{
c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 魔方 课程设计 报告