(实验四)(5阶幻方)《数据结构》第四章:字符串和多维数组

时间:2023-01-07 16:09:01

《数据结构》实验四:    字符串和多维数组 实验

一..实验目的

     巩固字符串和多维数组相关知识,学会运用灵活应用。

1.回顾字符串和多维数组的逻辑结构和存储操作特点,字符和数组的物理存储结构和常见操作。

2.学习运用字符串和和数组的知识来解决实际问题。

3.进一步巩固程序调试方法。

4.进一步巩固模板程序设计。

二.实验时间

   准备时间为第9周到第10前半周,具体集中实验时间为10周周四。2个学时。

三..实验内容

1.从键盘输入一些文本,统计文本单词的个数。

2.写程序输出一个5阶幻方:每一行每一列每一个对角线和均相等。

3.  自己设计一个字符加密算法,并设计程序验证:输入文本,解后加密并输出。在些基础上设计一个你算法的解密程序。

    前两题是必做题,第3题是选做题。

四.参考资料

    实验教材P197到206

五.实验报告

1.在博客中先写上实习目的和内容,画出主要操作运算算法图,然后分别上传程序代码。插入调试关键结果截图。

2.写一个博文,比较总结字符串和数组知识。建议从知识点角度和应用角度两个方面各陈述。

五阶幻方代码如下:

<pre name="code" class="cpp">#include<iostream>
using namespace std;

class Square{
public:
	void HuanFang(int n);
	void ShuChu(int n);
private:
	int n;
	int i;
	int j;
	int y;
	int z;
	int w;
	int a[9][9];
};

void Square::HuanFang(int n)
{
	i=0;
	j=n/2;
	int itemp,jtemp;
	int k;
	a[i][j]=1;
	for(k=2;k<=n*n;k++)
	{
		itemp=i;
		jtemp=j;
		i=(i-1+n)%n;
		j=(j-1+n)%n;
		if(a[i][j]>0)
		{
			i=itemp+1;
			j=jtemp;
		}
		a[i][j]=k;
	}
}

void Square::ShuChu(int n)
{
	y=0;z=0;w=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			y=a[i][j]+y;
			cout<<a[i][j];
			cout<<"    ";
		}
		cout<<"| ";
		cout<<y<<endl;
		y=0;
	}
	cout<<"-----------------------------"<<endl;
	for(j=0;j<n;j++)
	{
		for(i=0;i<n;i++)
		{
			z=z+a[i][j];
			if(i==j)
				w=a[i][j]+w;
		}
		cout<<z<<"    ";
		z=0;
	}
	cout<<w<<endl;
}

void main(){
	Square S;
	int x;
	int p;
	cout<<"请输入幻方阶数(阶数小于9的奇数):";
	cin>>x;
	if(x>9||x%2==0)
		cout<<"出错啦!"<<endl;
	else
		S.HuanFang(x);
		S.ShuChu(x);

}


 结果如下: 

(实验四)(5阶幻方)《数据结构》第四章:字符串和多维数组

流程图:

(实验四)(5阶幻方)《数据结构》第四章:字符串和多维数组

总结:幻方是个比较有意思的东西,完成之后感觉很神奇。字符串和多维数组在程序编写中都是常常得到广泛应用,本幻方实验用到的是左上斜行法,适用于任意奇数阶幻方,所以当你输入了偶数的时候呢就有一下结果了:
(实验四)(5阶幻方)《数据结构》第四章:字符串和多维数组

这里还有一个问题要请教老师和各位大神的,那就是书上那个void Square(int a[][],int n)中的数组在类中或者在主函数中是怎么去定义的,这个我忘了实参形参的格式和一些用法了,求解答实参和形参的格式和用法?程序输出了“出错了”这句话然后还继续输出错误的结果,明明就是有设置if条件语句的,为啥还继续输出?