- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
矩阵的全套操作
//
// 选题二 矩阵操作
// 一、矩阵翻转
// 沿某中心轴翻转,或垂直,或水平翻转。翻转的实质是,矩阵的每行(或每列)元素进行倒序排放。
//
// 二、矩阵卷动
// 可以左右、上下卷动。如下图:
//
// 矩阵卷动涉及二个问题:
// (1)卷动方向,或左右卷动,或上下卷动。
// (2)卷动幅度T,如上下卷动行数,左右卷动列数。
// 卷动的实质是将某行或某列元素循环移位。上下卷动时,是将每列元素循环移位,左右卷动时是将每行元素循环移位,卷动方向决定是左移还是右移。
// 一维数组的循环移位问题:
// 如,已知int temp[10],将其循环右移一位。
// 显然, 移位后,
// temp[8] ~ temp[0]
// 依次存入
// temp[9] ~ temp[1]
// 而原来的temp[9] 则返回数组起始部位,存入temp[0] 。
// 那么,循环右移W位呢?循环左移W位呢?
// 了解了一维数组循环移位问题后,显然,矩阵卷动无非是多个一维数组循环移位,只要在外层加个大循环就解决了。
// 三、矩阵旋转
// 矩阵旋转(绕中心点)涉及二个方面:
// (1)旋转方向,顺时针还是逆时针。
// (2)旋转角度,如90o、180o、270o、360o等。
// 分析:
// (1)考虑旋转方向、角度
// (2)此处仅考虑方阵情况,即矩阵行、列数相同。
// (3)考虑是奇次方阵还是偶次方阵。
// (4)旋转时,实质是数组元素的重新组合,对应交换元素值。
// (5)设方阵有K圈,每圈操作过程相似。
// 因此,问题的关键是某圈元素的旋转、交换。
// 如下图。
//
//
// 考虑几种特殊情况,如90°,180 ° ,270 ° ,360 ° 等。
// (1)其它角度都是90°的整数倍。因此,设计时仅需要考虑90°情况,其它情况只需重复操作若干次即可。以顺时针旋转为例,如需旋转180 ° ,只需将旋转90 °操作连续执行两次即能实现。
// (2)逆时针旋转可以看作为过度旋转,如逆时针90°,可认为是顺时针旋转270 °。
// 当然,也可设计新的交换规则。
// 四、设计要求
// 编写代码,实现矩阵的翻转、卷动和旋转。运行程序后,随机生成一个元素为三位正整数的5×5矩阵,并显现下面的参考界面:
// 矩阵操作
// ============
// 1.矩阵翻转
// 2.矩阵卷动
// 3.矩阵旋转
// 请选择(1、2或3,0:退出):
// 选择一个菜单后,要求输入操作的方向、行数或列数或角度,输入后,显示操作结果。
#includeiostream.h // 输入输出头文件
#includestdlib.h //接收字符函数的头文件
#includeiomanip.h //setw()函数头文件
void print(int s[5][5]) //定义函数
{
for(int i=0;i5;i++)
{
for(int j=0;j5;j++)
cout s[i][j]; //输出数组
coutendl;
}
}
void turn(int s[5][5]) //翻转函数
{
int t,y; //定义变量
cout请选择一种翻转方式(1:水平翻转,2:垂直翻转):endl; //选择
ciny;
cout操作后的数组为:endl;
if(y==1) //水平翻转
{
for(int i=0;i5;i++)
for(int j=0;j2;j++)
{
t=s[i][j];
s[i][j]=s[i][4-j];
s[i][4-j]=t;
}
print(s);
coutendl;
}
if(y==2) //垂直翻转
{
for(int j=0;j5;j++)
for(int i=0;i2;i++)
{
t=s[i][j];
s[i][j]=s[4-i][j];
s[4-i][j]=t;
}
print(s);
coutendl;
}
}
void roll(int s[5][5]) //卷动函数
{
int t,m,n;
cout请输入卷动方向(1:向左卷动,2:向右卷动,3:向上卷动,4:向下卷动):endl;
cinm;
cout请输入卷动的幅度:endl;
cinn;
cout操作后的数组为:endl;
for(int k=0;kn;k++)
文档评论(0)