#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
template<class T>
class CMatrix
{
T* *Mat;//矩阵的头指针
int nNum;//矩阵的行数或列数
T**MatR;//旋转后的矩阵
T**MatRefl;//反射后的矩阵
public:
CMatrix();//缺省的构造函数
CMatrix(T**Mat,int n);//构造函数
CMatrix(int n);//构造函数
//~CMatrix();//解析函数
void show(int k,int choice);//输出,K=0为原矩阵,K=1为旋转后的矩阵,K=2为反射后的矩阵
void R90();
void R180();
void R270();
void ReflectX(int t);
void ReflectY(int t);
void ReflectXY(int t);
int LookForData();//查找矩阵中的数据
//int ModifyData(int i,int j,int s);
int ModefyData(int row,int column);//修改所查找的数据
double Range();//求行列式的值
};
template<class T>//摸板的使用,需做此说明
CMatrix<T>::CMatrix(int n)
{
int i,j;
nNum=n;
Mat=new T*[nNum];//分配矩阵每一行的空间
MatR=new T*[nNum];
MatRefl=new T*[nNum];
for(i=0;i<nNum;i++)
{
Mat[i]=new T;//分配矩阵每一行的空间
MatR[i]=new T;
MatRefl[i]=new T;
}
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++)
Mat[i][j]=i*nNum+j+1;
}
template<class T>
void CMatrix<T>::R90()//旋转90度
{
int i,j,k=0;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatR[i][j]=Mat[j][nNum-1-i];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatR[i][j]<<" ";
}
}
template<class T>
void CMatrix<T>::R180()//旋转180度
{
int i,j,k=0;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatR[i][j]=Mat[nNum-1-i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatR[i][j]<<" ";
}
}
template<class T>
void CMatrix<T>::R270()//旋转270度
{
int i,j,k=0;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatR[i][j]=Mat[nNum-1-j][i];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatR[i][j]<<" ";
}
}
template<class T>
void CMatrix<T>::ReflectX(int t)//关于X轴反射
{
int i,j,k=0;
if(t==0){
cout<<"对旋转后的矩阵轴X反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=MatR[nNum-1-i][j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
if(t!=0){
cout<<" 对原矩阵轴X反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=Mat[nNum-1-i][j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
}
template<class T>
void CMatrix<T>::ReflectY(int t)//关于Y轴反射
{
int i,j,k;
if(t==0){
cout<<" 对旋转过的矩阵轴Y反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=MatR[i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
if(t!=0){
cout<<" 对原矩阵Y轴反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=Mat[i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
}
template<class T>
void CMatrix<T>::ReflectXY(int t)//关于XY轴反射
{
int i,j,k;
if(t==0){
cout<<"对旋转过的矩阵轴XY反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
MatRefl[i][j]=MatR[nNum-1-i][nNum-1-j];
if(k%nNum==0)cout<<'\n';
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
if(t!=0){
cout<<"对旋转过的矩阵轴XY反射"<<endl;
for(i=0;i<nNum;i++)
for(j=0;j<nNum;j++){
if(k%nNum==0)cout<<'\n';
MatRefl[i][j]=MatR[nNum-1-i][nNum-1-j];
if(k%nNum==0)cout<<"\n";
k++;
cout<<" "<<MatRefl[i][j]<<" ";
}
}
}
template<class T>
int CMatrix<T>::LookForData()
{
int i,j;
cout<<"输入您的要求"<<'\n';
cin>>i>>j;
cout<<"查询第"<<i<<"行"<<j<<"列数据为"<<Mat[i][j]<<'\n';
return Mat[i][j];
}
//template<class T>
//int CMatrix<T>::ModifyData(int i,int j)
//{
//int t,s;
//cin>>s;
//void LookForData(i,j);
//t=Mat[i][j],Mat[i][j]=s;
//return Mat[i][j];
//}
template<class T>
int CMatrix<T>::ModefyData(int i,int j)
{
int m,n,k,t,l=0;
cout<<"输入要替换的数"<<'\n';
cin>>k;
t=Mat[i][j];
Mat[i][j]=k;
for(m=0;m<nNum;m++)
for(n=0;n<nNum;n++){
if(l%nNum==0)cout<<'\n';
l++;
cout<<Mat[m][n]<<" ";
}
return 2;
}
template<class T>
double CMatrix<T>::Range()
{
int i,j,k;
double t;
for(k=0;k<nNum;k++)
for(i=k+1;i<nNum;i++)
{
t=double(Mat[i][k])/double(Mat[k][k]);//用高斯消去法求行列式的值
for(j=k+1;j<nNum;j++)
Mat[i][j]+=-t*Mat[k][j];
}
t=1;
for(i=0;i<nNum;i++)
t=t*Mat[i][i];
return t;
}
template<class T>
void CMatrix<T>::show(int k,int choice)
{
int t=0;
if(k==0){
cout<<"输出原矩阵"<<endl;
for(int i=0;i<nNum;i++)
for(int j=0;j<nNum;j++){
if(t%nNum==0)cout<<'\n';
t++;
cout<<" "<<Mat[i][j]<<" ";
}
cout<<'\n';
}
if(k==1){
cout<<"输出旋转后的矩阵"<<endl;
switch(choice){
case 1:R90();break;
case 2:R180();break;
case 3:R270();break;
case 4:cout<<"退出程序";break;
}
}
if(k==2){
int m;
cin>>m;
cout<<"输出反射后的矩阵"<<endl;
switch(choice){
case 1:ReflectX(m);break;
case 2:ReflectY(m);break;
case 3:ReflectXY(m);break;
case 4:cout<<"退出程序";break;
}
}
if(k==3){
cout<<"其他功能"<<endl;
switch(choice){
case 1:LookForData();break;
case 2:ModefyData(2,3);break;
case 3:cout<<Range()<<'\n';break;
case 4:cout<<"退出程序";break;
}
}
}
void main()
{
int i,j,c=0,m(2);
do{
system("cls");
cout<<"\n 1.从文件中输入矩阵"
<<"\n 2.从键盘中输入矩阵"
<<"\n 3.使用默认的矩阵形式"
<<"\n 4.退出"
<<"\n 输入矩阵后的菜单:"
<<"\n 1.旋转 1)90 2)180 3)270 4)退出"
<<"\n 2.反射 1)X轴 2)y轴 3)对角线 4)退出"
<<"\n 3.其他功能 1)查找 2)替换 3)模 4)退出"
<<"\n 4.输入矩阵的阶数\n";
cin>>m;
CMatrix<int>M(m);
M.show(0,0);
cout<<"\n 请输入选择.\n";
cin>>i>>j;
if(i==2)cout<<"输入1或0\n";
//for(;i!=4&&j!=4;)
M.show(i,j);
if(i==4||j==4)cout<<"退出系统"<<'\n';
cout<<"\n want to continue?Y(1),N(0):";
cin>>c;
}
while(c!=0);
}
为什么它无法实现从键盘中输入矩阵,如何从文件中输入矩阵呀,该怎么修改程序
[求助]跪求各位大哥帮忙~~~