VC++ 求矩阵的转置和行列式的值(线性代数)

来源:互联网 发布:公众号矩阵什么意思 编辑:程序博客网 时间:2024/05/05 17:46

C++和线代无疑是天作之合,线代里的矩阵内容很多都能用C++求解,冥冥之中这两者的联系还会有更深层次的不为人知的秘密。目前利用C++求线代里的东西无疑是行列式的值、矩阵的转置、伴随矩阵、逆矩阵,这里先给出用C++求矩阵的转置和求行列式的值。

 

请输入矩阵的行数和列数:4 5

请输入矩阵:
1 2 3 4 6

4 3 5 7 8
8 4 2 1 0
3 2 1 1 6
1、求该矩阵的转置;
2、求行列式;
请输入要计算项目前的代码:1
转置后的矩阵为:
      4       8       3
      3       4       2
      5       2       1
      7       1       1
      8       0       6
Press any key to continue

 

请输入矩阵的行数和列数:4 4

请输入矩阵:
  1 -1 2
-1 -1 -4 1
  4 -6 1
  2  4 2
1、求该矩阵的转置;
2、求行列式;
请输入要计算项目前的代码:2
57
Press any key to continue

 

下面是程序的源代码:

#include<iostream>
using namespace std;
int Fun(int n1,int a1[10][10]);     //声明一个函数
int main()
{

   //以下部分实现了将一位数组转化为二维数组进行使用
   int m,n,i,j;
   cout<<"请输入矩阵的行数和列数:";
   cin>>m>>n;
   cout<<endl;
   cout<<"请输入矩阵:"<<endl;
   int *p=new int[m*n];
   for(i=0;i<m*n;i++)
     cin>>p[i];
   int a[10][10];
   for(i=0;i<m;i++)
     for(j=0;j<n;j++)
     a[i][j]=p[n*i+j];
  

   //求转置
   int k=0;
   cout<<"1、求该矩阵的转置;"<<endl<<"2、求行列式;"<<endl;
   cout<<"请输入要计算项目前的代码:";
   cin>>k;
   if(k==1)
   {
       int b1[10][10];
       for(i=0;i<m;i++)
         for(j=0;j<n;j++)
        {
             b1[j][i]=a[i][j];
         }
       cout<<"转置后的矩阵为:"<<endl;
       for(i=0;i<n;i++)
         for(j=0;j<m;j++)
        {
            cout<<b1[i][j]<<"\t";
           if((j+1)%m==0)  cout<<endl;
        }
     }
    //求矩阵的行列式
    else if(k==2)
    cout<<Fun(n,a)<<endl;
    return 0;
}


//求矩阵行列式的递归函数
int Fun(int n1,int a1[10][10])
{
   int i_1,j_1,c;            //c为数组b的行
   int b[10][10];            //用于存放余子式
   int p=0,q=0;
   int sum=0;
   if(n1==1) return a1[0][0];
   for(i_1=0;i_1<n1;i_1++)
  {
     for(c=0;c<n1-1;c++)
    {
       if(c<i_1)  p=0;
       else  p=1;
       for(j_1=0;j_1<n1-1;j_1++)
      {
         b[c][j_1]=a1[c+p][j_1+1];
       }

     }
  if(i_1%2==0)  q=1;
  else q=(-1);
  sum=sum+a1[i_1][0]*q*Fun(n1-1,b);
 }

    return sum;

}

0 0