📄 main.cpp
字号:
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include"rank.cpp"
#include"qiuli.cpp"
#include"change.cpp"
#include"add.cpp"
#include"det.cpp"
#include"multiply.cpp"
//******************************以下是定义矩阵类****************************************
class Matrix
{
public:
double*q;
int n;
//**************************************************
Matrix()//构造函数
{
n=0;
}
//**************************************************
void input()//输入函数
{
cout<<"请输入矩阵的阶数:"<<endl;
cin>>n;
q=new double[n*n];
for(int m1=0;m1<n;m1++)
{
for(int n1=0;n1<n;n1++)
{
int x1=m1+1;
int y1=n1+1;
cout<<"请输入第"<<x1<<"行第"<<y1<<"列的数据"<<endl;
cin>>q[m1*n+n1];//输入第m1+1行第n1+1列的数
while(!cin)//当输入的数据类型与定义的变量类型不一致
{
char str[20];
cin.clear(); //清空输入缓冲区
cin.getline(str,20);//接收原输入数据
cout<<"非法的输入,请输入一个整数或小数!"<<endl;
cin>>q[m1*n+n1];//重新输入
}
}
}
}
//**************************************************
void output(double *r,int n1)//输出函数
{
for(int m2=0;m2<n1;m2++)
{
for(int n2=0;n2<n1;n2++)
{
cout.precision(6);
cout.setf(ios::scientific,ios::floatfield); //用科学记数法输出
cout<<r[m2*n1+n2]<<" ";
}
cout<<endl;
}
}
};
//*************************以上是定义矩阵类************************************
//*****************************************************************************
void copy(double*q1,Matrix ma)//复制函数,复制矩阵
{
for(int m3=0;m3<ma.n;m3++)
{
for(int n3=0;n3<ma.n;n3++)
{
q1[m3*ma.n+n3]=ma.q[m3*ma.n+n3];
}
}
}
//*****************************************************************************
void check(Matrix &ma1)//用户输入矩阵并要求用户进行确认
{
char choice2;
int hang,lie;
cout<<"输入矩阵:"<<endl;
ma1.input();
system("cls");
do
{
cout<<"你输入的矩阵是:"<<endl;
ma1.output(ma1.q,ma1.n);
cout<<"确定吗?Y=确定,N=重新输入"<<endl;
cin>>choice2;
if(choice2=='N'||choice2=='n') //如果出现错误,可以输入错误的行列数,进行修改
{
do
{
cout<<"请输入出错的数所在的行"<<endl;
cin>>hang;
cout<<"请输入出错的数所在的列"<<endl;
cin>>lie;
if(hang>ma1.n||lie>ma1.n)//如果行列超限,输出出错提示
{
cout<<"错误的行列数!"<<endl<<endl;
}
}while(hang>ma1.n||lie>ma1.n);//重新输入出错的数所在的行列数
cout<<"请输入正确的数!"<<endl;
int m=(hang-1)*ma1.n+lie-1;
double num=ma1.q[m];
cin>>ma1.q[m];
system("cls");
cout<<"已将第"<<hang<<"行第"<<lie<<"列的数据"<<num<<"修改为"<<ma1.q[m]<<endl<<endl;
}//if
}while(choice2!='y'&&choice2!='Y');
}
//*****************************************************************************
void main()//主函数
{
Matrix ma2;//ma2用来做单矩阵运算(转置,求逆,求秩,求行列式的值)
Matrix ma3;
Matrix ma4;//ma3,ma4用来做双矩阵运算(相加,相乘)
double*p0;
double*p1;
double*p2;
double*p3;
double*p4;//p0,p1,p2,p3,p4用来做单矩阵运算(p1,p3转置,p0求逆,p2求秩,p4求行列式的值)
double*p5;
double*p6;//p5,p6用来做双矩阵运算
int choice1;
do
{
system("cls");
cout<<endl;
cout<<"1.单矩阵运算(转置,求逆,求秩,求行列式的值)"<<endl;//输出选择菜单
cout<<"2.双矩阵运算(相加,相乘)"<<endl;
cout<<"3.退出系统"<<endl;
cout<<"请选择,并在选择后按ENTER键:";//输出选择菜单
cin>>choice1;
switch(choice1)
{
case 1:
{
system("cls");
cout<<"单矩阵运算"<<endl;
cout<<endl;
check(ma2);//输入要进行运算的矩阵
system("cls");
//**************************************************
p0=new double[ma2.n*ma2.n];
p1=new double[ma2.n*ma2.n];
p2=new double[ma2.n*ma2.n];
p3=new double[ma2.n*ma2.n];
p4=new double[ma2.n*ma2.n]; //动态分配数组
//**************************************************
copy(p0,ma2);
copy(p1,ma2);
copy(p2,ma2);
copy(p4,ma2);
//**************************************************
cout<<"原矩阵是:"<<endl;
ma2.output(ma2.q,ma2.n);//输出原矩阵
cout<<endl;
//**************************************************
cout<<"转置矩阵是:"<<endl;
change(p3,p1,ma2.n);//完成转置运算
ma2.output(p3,ma2.n);//输出转置结果
cout<<endl;
//**************************************************
cout<<"矩阵的秩是:"<<rank(p2,ma2.n,ma2.n)<<endl;//求秩并输出矩阵的秩
cout<<endl;
//**************************************************
cout<<"原矩阵的逆矩阵是:"<<endl;//求原矩阵的逆矩阵
int i=rinv(p0,ma2.n);
if(i==1){ma2.output(p0,ma2.n);}
//**************************************************
double detnum=sdet(p4,ma2.n);
cout<<"\n原矩阵行列式的值是:"<<detnum<<endl;//求行列式的值
//**************************************************
delete[ma2.n*ma2.n]p4;
delete[ma2.n*ma2.n]p3;
delete[ma2.n*ma2.n]p2;
delete[ma2.n*ma2.n]p1;
delete[ma2.n*ma2.n]p0;
delete[ma2.n*ma2.n]ma2.q;//删除动态申请的空间
//**************************************************
cout<<"\n\n按任意键继续."<<endl;
getch();
break;
}
case 2:
{
system("cls");
cout<<"双矩阵运算:"<<endl;
cout<<endl;
//**************************************************
cout<<"请输入第一个矩阵:"<<endl;//输入两个矩阵
check(ma3);
system("cls");
cout<<"请输入第二个矩阵:"<<endl;
check(ma4);
//**************************************************
p6=new double[ma3.n*ma4.n];
p5=new double[ma3.n*ma4.n];
system("cls");
//**************************************************
cout<<"第一个矩阵是:"<<endl;//输出两个矩阵
ma3.output(ma3.q,ma3.n);
cout<<endl;
cout<<"第二个矩阵是:"<<endl;
ma4.output(ma4.q,ma4.n);
cout<<endl;
//**************************************************
if(ma3.n!=ma4.n)//判断是否符合相乘的条件
{
cout<<"不符合矩阵的乘法规则,无法相乘!"<<endl;
}
else
{
cout<<"第一个矩阵乘以第二个矩阵的结果是:"<<endl;
multiply(ma3.q,ma4.q,p6,ma3.n);//相乘
ma3.output(p6,ma3.n);//输出相乘结果
}
cout<<endl;
//**************************************************
if(ma3.n==ma4.n)//判断是否符合相加的条件
{
add(ma3.q,ma4.q,p5,ma3.n);//相加
cout<<"第一个矩阵加上第二个矩阵的结果是:"<<endl;
ma3.output(p5,ma3.n);//输出相加结果
}
else
{
cout<<"不符合矩阵的加法规则,无法相加!"<<endl;
}
//**************************************************
delete[ma4.n*ma4.n] ma4.q;
delete[ma3.n*ma3.n] ma3.q;
delete[ma3.n*ma4.n] p5;
delete[ma3.n*ma4.n] p6;//删除动态申请的空间
//**************************************************
cout<<"\n\n按任意键继续."<<endl;
getch();
break;
}//case2
}//switch
}while(choice1!=3);
}//main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -