矩阵的全套操作.doc_第1页
矩阵的全套操作.doc_第2页
矩阵的全套操作.doc_第3页
矩阵的全套操作.doc_第4页
矩阵的全套操作.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

/ / 选题二矩阵操作/ 一、矩阵翻转/ 沿某中心轴翻转,或垂直,或水平翻转。翻转的实质是,矩阵的每行(或每列)元素进行倒序排放。/ / 二、矩阵卷动/ 可以左右、上下卷动。如下图:/ / 矩阵卷动涉及二个问题:/ (1)卷动方向,或左右卷动,或上下卷动。/ (2)卷动幅度T,如上下卷动行数,左右卷动列数。/ 卷动的实质是将某行或某列元素循环移位。上下卷动时,是将每列元素循环移位,左右卷动时是将每行元素循环移位,卷动方向决定是左移还是右移。/ 一维数组的循环移位问题:/ 如,已知int temp10,将其循环右移一位。/ 显然, 移位后,/ temp8 temp0 / 依次存入/ temp9 temp1 / 而原来的temp9 则返回数组起始部位,存入temp0 。 / 那么,循环右移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 。/ 当然,也可设计新的交换规则。/ 四、设计要求/ 编写代码,实现矩阵的翻转、卷动和旋转。运行程序后,随机生成一个元素为三位正整数的55矩阵,并显现下面的参考界面:/ 矩阵操作/ =/ 1矩阵翻转/ 2矩阵卷动/ 3矩阵旋转/ 请选择(1、2或3,0:退出):/ 选择一个菜单后,要求输入操作的方向、行数或列数或角度,输入后,显示操作结果。#include / 输入输出头文件 #include /接收字符函数的头文件 #include/setw()函数头文件void print(int s55) /定义函数 for(int i=0;i5;i+)for(int j=0;j5;j+)cout sij; /输出数组coutendl;void turn(int s55) /翻转函数int t,y; /定义变量cout请选择一种翻转方式(1:水平翻转,2:垂直翻转):y;cout操作后的数组为:endl;if(y=1) /水平翻转for(int i=0;i5;i+) for(int j=0;j2;j+)t=sij;sij=si4-j;si4-j=t;print(s);coutendl;if(y=2) /垂直翻转for(int j=0;j5;j+)for(int i=0;i2;i+)t=sij;sij=s4-ij;s4-ij=t;print(s);coutendl;void roll(int s55) /卷动函数int t,m,n;cout请输入卷动方向(1:向左卷动,2:向右卷动,3:向上卷动,4:向下卷动):m;cout请输入卷动的幅度:n;cout操作后的数组为:endl;for(int k=0;kn;k+)if(m=1) /向左卷动for(int i=0;i5;i+)t=si0;for(int j=0;j4;j+)sij=sij+1;si4=t;if(m=2) /向右卷动for(int i=0;i0;j-)sij=sij-1;si0=t;if(m=3) /向上卷动for(int j=0;j5;j+)t=s0j;for(int i=0;i4;i+)sij=si+1j;s4j=t;if(m=4) /向下卷动for(int j=0;j0;i-)sij=si-1j;s0j=t;print(s);coutendl;void pc(int s55) /顺时针90旋转int b55;for(int i=0;i5;i+)for(int k=0;k5;k+)bik=sik;for(i=0;i5;i+)for(int k=0;k5;k+)sik=bk4-i;void eddy(int s55) /旋转函数int m,n,r;cout请输入旋转方向(1:顺时针旋转,2:逆时针旋转):r; cout请输入要旋转的角度(90,180,270,360):m;cout操作后的数组为:endl;if(r=1) /顺时针旋转m=360-m; /如逆时针旋转90,可以认为是顺时针旋转270if(r=2) /逆时针旋转m=m;if(m%90=0)n=m/90; /求出nfor(int w=0;wn;w+) /根据n来确定调用函数的次数pc(s); print(s);coutendl; void main()int n,x,a55;/定义5*5的二维数组char p;loop: coutsetw(29) *矩阵操作* endl;/输出选择界面 coutsetw(29) = endl; coutsetw(29) 1.矩阵翻转 endl; coutsetw(29) 2.矩阵卷动 endl; coutsetw(29) 3.矩阵旋转 endl; coutsetw(29) 4.退出 endl; coutsetw(29) 请选择(1、2,3, 4):x;/输入选择变化方式 if(x=1)/矩阵翻转for(int i=0;i5;i+)for(int k=0;k5;k+)aik=(int) (rand()%(999-100)+100;/产生随机数cout原数组为:endl;print(a);/调用输出函数turn(a);/调用翻转函数goto loop;if(x=2)/矩阵卷动for(int i=0;i5;i+)for(int k=0;k5;k+)aik=(rand()%(999-100)+100; /产生随机数cout原数组为:endl;print(a); /调用输出函数roll(a);/调用矩阵卷动函数goto loop;if(x=3)/矩阵旋转for(int i=0;i5;i+)for(int k=0;k5;k+)aik= (rand()%(999-100)+100; /产生随机数cout原数组为:endl;print(a);/调用输出函数eddy(a);/调用旋转函数goto l

温馨提示

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

评论

0/150

提交评论