中国承包沙漠政策:C语言问题~?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 04:20:26
1、编程求两个矩阵A[3][4]和B[4][5]的乘积,输出结果,同时将结果的行列转置后输出。

#include<stdio.h>
void main()
{
int i,j,k;
int c[3][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
int d[5][3];
for(i=0;i<3;i++)
{
printf("shu ru 3*4 wei shu zu di %d hang yuan su\n",(i+1));
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<4;i++)
{
printf("shu ru 4*5 wei shu zu di %d hang yuan su\n",(i+1));
for(j=0;j<5;j++)
scanf("%d",&b[i][j]);
}
for(j=0;j<3;j++)
for(k=0;k<5;k++)
{
for(i=0;i<4;i++)
c[j][k]+=a[j][i]*b[i][k];
}
printf("ju zhen cheng ji\n");
for(j=0;j<3;j++)
{
for(k=0;k<5;k++)
printf("%6d",c[j][k]);
printf("\n");
}
printf("\nju zhen zhuan zhi\n");
for(j=0;j<3;j++)
for(k=0;k<5;k++)
d[k][j]=c[j][k];
for(k=0;k<5;k++)
{
for(j=0;j<3;j++)
printf("%6d",d[k][j]);
printf("\n");
}

}

/*Matrix control head file*/

#ifndef NULL
#define NULL 0;
#endif
#define TYPE long

class Matrix
{
private:
TYPE *data;
int MATRIX_H_SIZE;
int MATRIX_V_SIZE;
bool IS_EMPTY;

public:
Matrix(){IS_EMPTY=true;}

Matrix(int h_dim_size,int v_dim_size){
data=new TYPE[h_dim_size*v_dim_size];
MATRIX_H_SIZE=h_dim_size;
MATRIX_V_SIZE=v_dim_size;
IS_EMPTY=false;
}

Matrix(Matrix *matrix){
if (!matrix->IsEmpty()){
data=new TYPE[matrix->GetDimX()*matrix->GetDimY()];
MATRIX_H_SIZE=matrix->GetDimX();
MATRIX_V_SIZE=matrix->GetDimY();
IS_EMPTY=false;
TYPE t;
for(int i=0;i<MATRIX_H_SIZE;i++)
for(int j=0;j<MATRIX_V_SIZE;j++)
{
matrix->GetData(i,j,&t);
SetData(i,j,t);
}
}
else
IS_EMPTY=true;
}

~Matrix(){delete[] data;}

bool MatrixReload(int h_dim_size,int v_dim_size){
if (!IS_EMPTY) return false;
data=new TYPE[h_dim_size*v_dim_size];
MATRIX_H_SIZE=h_dim_size;
MATRIX_V_SIZE=v_dim_size;
IS_EMPTY=false;
return true;
}

bool IsEmpty(){
return IS_EMPTY;
}

int GetDimX(){return MATRIX_H_SIZE;}

int GetDimY(){return MATRIX_V_SIZE;}

bool MatrixClear(){
if (IS_EMPTY) return false;
delete [] data;
IS_EMPTY=true;
return true;
}

bool SetData(int h_index,int v_index,TYPE data)
{
if (IS_EMPTY) return false;
this->data[h_index*MATRIX_V_SIZE+v_index]=data;
return true;
}

bool GetData(int h_index,int v_index,TYPE *return_data)
{ if (IS_EMPTY) return false;
if (h_index>=MATRIX_H_SIZE || v_index>=MATRIX_V_SIZE) return false;
*return_data=data[h_index*MATRIX_V_SIZE+v_index];
return true;
}

//矩阵操作
TYPE SumHXV(int m,int n,Matrix *matrix) //m行x n列
{
TYPE sum(0);
TYPE temp[2];
for(int i=0;i<MATRIX_V_SIZE;i++){
GetData(m,i,&temp[0]);
matrix->GetData(i,n,&temp[1]);
sum+=temp[0]*temp[1];

}
return sum;
}

Matrix * HSwap(int m,int n)//行交换
{
if (IS_EMPTY) return NULL;
Matrix *temp=new Matrix(this);
TYPE t[2];
for(int i=0;i<MATRIX_V_SIZE;i++)
{
temp->GetData(m-1,i,&t[0]);
temp->GetData(n-1,i,&t[1]);
temp->SetData(m-1,i,t[1]);
temp->SetData(n-1,i,t[0]);
}
return temp;
}

Matrix * VSwap(int m,int n)//行交换
{
if (IS_EMPTY) return NULL;
Matrix *temp=new Matrix(this);
TYPE t[2];
for(int i=0;i<MATRIX_H_SIZE;i++)
{
temp->GetData(i,m-1,&t[0]);
temp->GetData(i,n-1,&t[1]);
temp->SetData(i,m-1,t[1]);
temp->SetData(i,n-1,t[0]);
}
return temp;
}

Matrix * AddMatrix(Matrix *matrix)
{
if (IS_EMPTY) return NULL;
if (matrix->IsEmpty()) return this;
if (MATRIX_H_SIZE!=matrix->GetDimX() ||
MATRIX_V_SIZE!=matrix->GetDimY())
return this;

Matrix *temp=new Matrix(MATRIX_H_SIZE,MATRIX_V_SIZE);
TYPE t[3];
for (int i=0;i<MATRIX_H_SIZE;i++)
for (int j=0;j<MATRIX_V_SIZE;j++)
{ GetData(i,j,&t[0]);
matrix->GetData(i,j,&t[1]);
t[2]=t[0]+t[1];
temp->SetData(i,j,t[2]);
}
return temp;
}

Matrix * RightXMatrix(Matrix *matrix) //矩阵右乘
{
if (IS_EMPTY) return NULL;
if (matrix->IsEmpty()) return this;
if (MATRIX_V_SIZE!=matrix->GetDimX())
return this;

Matrix *temp=new Matrix(MATRIX_H_SIZE,matrix->GetDimY());
for (int i=0;i<MATRIX_H_SIZE;i++)
for (int j=0;j<matrix->GetDimY();j++)
temp->SetData(i,j,SumHXV(i,j,matrix));

return temp;
}

Matrix * LeftXMatrix(Matrix *matrix) //矩阵左乘
{
if (IS_EMPTY) return NULL;
if (matrix->IsEmpty()) return this;
if (MATRIX_H_SIZE!=matrix->GetDimY())
return this;

Matrix *temp=new Matrix(matrix->GetDimX(),MATRIX_V_SIZE);
for (int i=0;i<matrix->GetDimX();i++)
for (int j=0;j<MATRIX_V_SIZE;j++)
temp->SetData(i,j,matrix->SumHXV(i,j,this));

return temp;
}

Matrix * NumXMatrix(TYPE num){
if (IS_EMPTY) return NULL;
Matrix *temp=new Matrix(MATRIX_H_SIZE,MATRIX_V_SIZE);
TYPE t;
for (int i=0;i<MATRIX_H_SIZE;i++)
for (int j=0;j<MATRIX_V_SIZE;j++)
{
GetData(i,j,&t);
temp->SetData(i,j,t*num);
}
return temp;
}

Matrix * ReverseMatrix() //矩阵转置
{
if (IS_EMPTY) return this;
Matrix *temp=new Matrix(MATRIX_V_SIZE,MATRIX_H_SIZE);
TYPE t;
for (int i=0;i<MATRIX_H_SIZE;i++)
for (int j=0;j<MATRIX_V_SIZE;j++)
{
GetData(i,j,&t);
temp->SetData(j,i,t);
}
return temp;
}

Matrix * GetEMatrix(int n) //得到nXn的单位矩阵
{
if(n<2) return NULL;
Matrix *temp=new Matrix(n,n);
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
(i==j)?temp->SetData(i,j,1):temp->SetData(i,j,0);
return temp;
}

Matrix * MatrixPow(int times) //矩阵幂运算
{
if (IS_EMPTY)return NULL;
Matrix *temp=new Matrix(this);
for(int i=1;i<times;i++)
temp=temp->LeftXMatrix(this);
return temp;
}
};