1、C+ 课程设计矩阵的旋转反射指导老师: 张微设计者: 车向前学号 0508190114程序功能介绍实现矩阵的旋转反射程序程序设计要求1)设计一个矩阵类,将相应的函数和数据封装到类中,简化程序。2)修改程序结构,使程序可以反复执行,直至按键退出为止。3)本程序用数组表示 5*5 矩阵,将其改为根据输入矩阵的大小动态分配空间nn来放置数据,其中 n 为用户可输入的任意整数。4)增加类的构造函数和成员函数,使得矩阵数据既可以用在对象初始化的赋值,也可以通过键盘赋值,还可以通过读数据文件输入。5)用模板的形式改写矩阵数据类型,使得矩阵中的数据既可以是整型数据,也可以是浮点型数据,执行程序时,分别定义一
2、个整型矩阵和一个浮点型矩阵进行验证。6)增加程序功能,除实现 n*n 矩阵的旋转反射外,还增加a 求矩阵的摸;b 可以通过键入的行号与列号,任意修改矩阵中的元素值;c 可以给定矩阵中的某一元素值,查询其所在的行号和列号, ,关键函数说明void Show(int k=1); /输出矩阵void R90(); /旋转 90 度void R180(); /旋转 180 度void R270(); /旋转 270 度void ReflectX(int k=1); /X 轴反射void ReflectY(int k=1); /Y 轴反射void ReflectO(int k=1); /对角线反射int
3、 LookForData(); /查找int ModifyData(); /修改int ModefyData(int row,int column); /修改double Range(); /求模void InputFromFile(char *filename); /从文件中输入矩阵void InputFromKeyboard(); /从键盘中输入矩阵主要思路定义出类来,紧接着把主函数弄出来,再按调用顺序把每个函数依次列出来,对教材原程序增加的很多。个人设计心得:坦白的说,上学期我的 C+成绩其实不怎么样,有很多的地方虽然能够做出来,但深究其中的缘由,我却是一知半解的,刚开始的时候,源代码需
4、要我来阅读,虽然花了很长的时间,但体会不是特别深。后来我把基础教材对照着源代码阅读,效果感觉好多了。但真正上机操作时,就在很多方面上出现了问题,虽然自己的能力最后还是解决了,但接下来的增加功能上却又感到了力不从心。在这次编程的过程中,我不断的在运行中发现自己的错误,有的检查出来的错误我一时看不出来时怎么回事,就又回归课本,深深地研究其中的关系,并问了舍友,说实话,与其他同学相比,我选的这个程序难度其实不大,但由于我上学期基础不是太好,所以大部分时间都耗在改错误上了,所以我刚开始尝试做过的四则运算课程中途无奈的放弃了。程序的思路其实很简单明确,但问题就在于难以看明白编译查错的那一堆错误怎样改动,
5、有时就那么几个错误,但绞尽脑汁花好长时间挨个试,不停 的翻书才能找出来,一次是减少到出现 14 个错误,最后实在是怎么也看不懂哪里错了,索性把标注的部分删掉重新写了一遍,居然只剩了 1 个错误,真是惊喜, 还有临近结束时本来已经零个错误了,但发现求模的要求根本没达到,所以只好再重新改下去。在课程设计创新方面,由于程序的确复杂度不高,以及时间并不是很充足,所以只是尽善尽美的完成了课程设计的基本要求。在以后的时间里还需要继续完善,毕竟一个完美的程序完成需要很长的调试时间,要付出很多精力。在此,向大四的贾磊表示谢意,他借给我他的宏基笔记本,使不用再去机房抢座位了,而且我还能在晚上下了晚自习在宿舍再次
6、修改程序,这大大增加了我的可支配时间,看着自己费尽辛劳所编的程序最后终于开花结果能够流畅的运行并满足了所有的要求,我心中的自豪感油然而生,紧接着又把界面添加了一点,使之更完美,以喜悦的心情写下了这份报告书,这么多天的辛勤和脑力折磨终于有了成果,黄天不负有心人,可以说,这次编程使我上学期很多不太明白的地方有了新的理解,比如析构函数,数组等方面,为了能取得好成绩,我花了恒多时间来做他。最后,对我的任课指导老师张微表示由衷的敬意,谢谢,程序各部分主要程序的详解如下所示:#include #include #include #include templateclass CMatrixint nNum;
7、T*Mat;T*MatR;T*MatRefl;T*Matr;T*Matre;public:CMatrix();CMatrix(int n);CMatrix();void Show(int k=1); /输出矩阵void R90(); /旋转 90 度void R180(); /旋转 180 度void R270(); /旋转 270 度void ReflectX(int k=1); /X 轴反射void ReflectY(int k=1); /Y 轴反射void ReflectO(int k=1); /对角线反射int LookForData(); /查找int ModifyData(); /
8、修改int ModefyData(int row,int column); /修改double Range(); /求模void InputFromFile(char *filename); /从文件中输入矩阵void InputFromKeyboard(); /从键盘中输入矩阵;/*/按照要求设计的那个矩阵类,将相应的函数和数据封装到类中,简化程序/void main()/这就是主函数啦/int r,c,k,n;int choice,choice1,choice2,choice3,choice4,choice5;CMatrix M;docoutchoice;switch(choice)cas
9、e 1: char Filename20;coutFilename;M.InputFromFile(Filename);break;case 2: M.InputFromKeyboard();break;case 3: coutchoice1;switch(choice1)case 1: coutchoice2;switch(choice2)case 1:M.R90();break;case 2:M.R180();break;case 3:M.R270();break;case 4:break;default:choice2=4;break;break;case 2: coutchoice3;
10、switch(choice3)case 1: coutk;if(k=1) M.ReflectX(1);else M.ReflectX(2);break;case 2: coutk;if(k=1) M.ReflectY(1);else M.ReflectY(2);break;case 3: coutk;if(k=1) M.ReflectO(1);else M.ReflectO(2);break;case 4: break;default: choice3=4; break;break;case 3: coutchoice4;switch(choice4)case 1: M.LookForData
11、();break;case 2: coutchoice5;switch(choice5)case 1: M.ModifyData();break;case 2: coutr;coutc;M.ModefyData(r,c);break;default:break;break;case 3: cout CMatrix:CMatrix()/ /析构函数/for(int i=0;ivoid CMatrix:InputFromFile(char *filename)int i,j;ifstream infile; / /从文件输入的/infile.open(filename);if(!infile)co
12、utMatij;cout/ /键盘输入的/void CMatrix:InputFromKeyboard()int i,j;coutMatij;/*/templateCMatrix:CMatrix()int i,j,k=0;T n=1.0;coutnNum;Mat=new T*nNum;MatR=new T*nNum;MatRefl=new T*nNum;for(i=0;ivoid CMatrix:Show(int k)int r,c;if(k=1) Matre=Mat;if(k=2) Matre=MatR;if(k=3) Matre=MatRefl;for(r=0;rvoid CMatrix:
13、R90()int r,c;for(r=0;rvoid CMatrix:R180()/ /转 180 度 /int r,c;for(r=0;rvoid CMatrix:R270()/ /转 270 度/int r,c;for(r=0;rvoid CMatrix:ReflectX(int k) / /函数反射/int r,c;if(k=1)for(r=0;rvoid CMatrix:ReflectY(int k)int r,c;if(k=1)for(r=0;rvoid CMatrix:ReflectO(int k)int r,c;if(k=1)for(r=0;rint CMatrix:LookFo
14、rData()/ /函数查找 /int i,j,k,l,t=0;T Data;coutl;if(l=1) Matr=Mat;if(l=2) Matr=MatR;if(l=3) Matr=MatRefl;coutk;if(k=1)couti;coutj;coutData;for(i=0;iint CMatrix:ModifyData()int i,j,k;T value,Data;couti;if(i=1) Matr=Mat;if(i=2) Matr=MatR;if(i=3) Matr=MatRefl;coutData;for(i=0;ivalue;Matrij=value;return 1;i
15、f(Matrij!=Data)coutint CMatrix:ModefyData(int row,int column)int i;T value;couti;if(i=1) Matr=Mat;if(i=2) Matr=MatR;if(i=3) Matr=MatRefl;else return 0;coutvalue;Matrrowcolumn=value;cout / /我套用的课本求模公式/ /double CMatrix:Range()int i,j,k,l;double t;coutl;if(l=1) Matr=Mat;cout“原矩阵的模为:“;elseif(l=2) Matr=MatR;cout“旋转矩阵的模为:“;elseif(l=3) Matr=MatRefl;cout“反射矩阵的模为:“;else return 0;for(k=0;knNum;k+)for(i=k+1;inNum;i+)t=Matrik/Matrkk;for(j=k+1;jnNum;j+)Matrij+=-t*Matrkj;int n=1;for(i=0;inNum;i+)n=n*Matrii; return n;/*/