有关矩阵
用类和运算符重载,写矩阵乘法(一维&二维数组)
一维数组
#include<iostream>
class jz{
public:
int h,l;
int *A;
jz(int a,int b):h(a),l(b){
A = new int [h*l];
}
void set(int *a);
void print(void);
friend jz operator * (jz a1,jz a2);
};
void jz::set(int *a){
for(int i=0;i<h*l;i++){
A[i]=a[i];
}
}
void jz::print(void){
for(int i=0;i<h;i++){
for(int j=0;j<l;j++){
printf("%d ",A[i*l+j]);
}
printf("\n");
}
}
jz operator * (jz a1,jz a2){
jz C(a1.h,a2.l); //a1.h=3,a2.l=2
int a[a1.h*a2.l];
for(int i=0;i<a1.h*a2.l;i++){
int q=0,q_h,q_l;
q_h=i/a2.l;
q_l=i%a2.l;
for(int j=0;j<a1.l;j++){
q+=a1.A[q_h*a1.l+j]*a2.A[a2.l*j+q_l];
//printf("%d\n",q);
}
a[i]=q;
//printf("%d ",a[i]);
}
C.set(a);
return C;
}
int main()
{
jz a(3,4),b(4,2),c(3,2);
int S1[12]={3,0,0,7,0,0,0,-1,0,2,0,0};
int S2[8]={4,1,0,0,1,-1,0,2};
a.set(S1);
b.set(S2);
// a.print();
// b.print();
c=a*b;
c.print();
return 0;
}
二维数组
#include<iostream>
class jz{
public:
int h,l;
int **A;
jz(int a,int b);
~jz(void);
void set(int *a,int n);
void print(void);
jz operator * (jz a);
};
jz::jz(int a,int b):h(a),l(b){
A = new int*[h]; //长度为行数的数组指针空间,每一个指针都对应一个有列个数的数组
for(int i=0;i<h;i++){
A[i]= new int [l];
}
}
jz::~jz(){
for(int i=0;i<h;i++){
delete []A[i];
}
delete []A;
}
void jz::set(int *a,int n){
//printf("%d,%d\n",h,l);
int p=0;
for(int i=0;i<h;i++){
for(int j=0;j<l;j++){
A[i][j]=a[p];
p++;
}
}
}
void jz::print(){
for(int i=0;i<h;i++){
for(int j=0;j<l;j++){
printf("%d ",A[i][j]);
}
printf("\n");
}
}
jz jz::operator *(jz a){
jz c(h,a.l);
for(int i=0;i<h;i++)
{
for(int j=0;j<a.l;j++)
{
for(int k=0;k<l;k++)
{
c.A[i][j]+=A[i][k]*a.A[k][j];
//printf("%d,%d,%d\n",c.A[i][j],A[i][k],a.A[k][j]);
}
}
}
return c;
}
int main()
{
jz a(3,4),b(4,2),c(3,2);
int S1[12]={3,0,0,7,0,0,0,-1,0,2,0,0};
int S2[8]={4,1,0,0,1,-1,0,2};
a.set(S1,12);
b.set(S2,8);
a.print();
printf("\n");
b.print();
printf("\n");
c=a*b;
c.print();
return 0;
}