c语言读取txt指定行列,用C++编写一个友元函数来读取矩阵指定所在行列的值。...

int det(matrix);

//matrix.h

//*******************************

# ifndef matrix_h

# define matrix_h

class matrix

{

private:

int m;

int n;

double arr[8][8];

public:

matrix();

matrix(double);

void set();// 对矩阵的赋值;

void show();//在屏幕上显示矩阵;

friend int homotype(matrix,matrix);//是否同型;

friend int multipliable(matrix,matrix);

//判断矩阵是否可相乘

friend matrix operator +(matrix,matrix);

//矩阵相加,对加号重载;

friend matrix operator -(matrix,matrix);

//矩阵机减,对减号重载;

friend matrix add(matrix,matrix);

//矩阵相加;

friend matrix minus(matrix,matrix);

//矩阵相减

friend matrix multiply(matrix,matrix);

//矩阵相乘

friend matrix operator *(matrix,matrix);

//矩阵相乘,对乘号重载;

friend double det(matrix);

//求方阵的行列式;

int issquare()

{

return m==n;

}

//判断是否为方阵;

matrix left(int x,int y);

//求元素arr[x][y](x,y从0开始)的余子式;

};

# endif

//*******************************

//matrix.cpp

//下面是对类中成员及友元函数的实现

//*******************************

# include

# include "matrix.h"

matrix::matrix()

{

m = 8;

n = 8;

for(int i=0;i

{

for(int j=0;j

arr[i][j] = 0;

}

}

matrix::matrix(double x)

{

m = 1;

n = 1;

arr[0][0] = x;

}

void matrix::set()

{

cout<

cin>>m>>n;

cout<

for(int i=0;i

{

for(int j=0;j

cin>>arr[i][j];

}

}

void matrix::show()

{

cout<

for(int i=0;i

{

for(int j=0;j

{

cout<

}

cout<

}

}

int homotype(matrix x,matrix y)

{

if(x.m==y.m&&x.n==y.n)

return 1;

else

return 0;

}

int multipliable(matrix x,matrix y)

{

if(x.n==y.m)

return 1;

else

return 0;

}

matrix add(matrix x,matrix y)

{

matrix z;

if(homotype(x,y))

{

z.m = x.m;

z.n = x.n;

for(int i=0;i

for(int j=0;j

z.arr[i][j] = x.arr[i][j] + y.arr[i][j];

return z;

}

else

{

cout<

return z;

}

}

matrix operator +(matrix x,matrix y)

{

return add(x,y);

}

matrix minus(matrix x,matrix y)

{

matrix z;

if(homotype(x,y))

{

z.m = x.m;

z.n = x.n;

for(int i=0;i

for(int j=0;j

z.arr[i][j] = x.arr[i][j] - y.arr[i][j];

return z;

}

else

{

cout<

return z;

}

}

matrix operator -(matrix x,matrix y)

{

return minus(x,y);

}

matrix multiply(matrix x,matrix y)

{

matrix z;

if(x.n!=y.m)

{

cout<

return z;

}

for(int i=0;i

{

for(int j=0;j

{

for(int k=0;k

z.arr[i][j] += x.arr[i][k]*y.arr[k][j];

}

}

z.m = x.m;

z.n = y.n;

return z;

}

matrix operator *(matrix x,matrix y)

{

matrix z;

z = multiply(x,y);

return z;

}

matrix matrix::left(int x,int y)

{

matrix leftmatrix;

if((x>=m)||(y>=n))

{

cout<

return leftmatrix;

}

/* if(!issquare())

{

cout<

return *this;

}//*/

leftmatrix.m = m - 1;

leftmatrix.n = n - 1;

int testx = 0;

int testy = 0;

for(int i=0;i

{

testy = 0;

for(int j=0;j

{

if(i==x)

testx = 1;

if(j==y)

testy = 1;

if((!testx)&&(!testy))

leftmatrix.arr[i][j] = this->arr[i][j];

else if(testx&&(!testy))

leftmatrix.arr[i][j] = this->arr[i+1][j];

else if((!testx)&&testy)

leftmatrix.arr[i][j] = this->arr[i][j+1];

else

leftmatrix.arr[i][j] = this->arr[i+1][j+1];

}

}

return leftmatrix;

}

double det(matrix x)//递归算法

{

if(!x.issquare())

{

cout<

return 9.99;

}

if(x.m==0)

return 0;

else if(x.m==1)

return x.arr[0][0];

else if(x.m==2)

return (x.arr[0][0]*x.arr[1][1] - x.arr[0][1]*x.arr[1][0]);

else

{

double num = 0;

int a = 1;

for(int i=0;i

{

num = num + a*x.arr[0][i]*det(x.left(0,i));

//按第0行展开

a = -a;

}

return num;

}

}

//**************************************

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值