俺自己做的两个整型矩阵相乘的C++实现
///////////////////////////////////////////////
// 两整型矩阵相乘 //
// //
///////////////////////////////////////////////
#include <iostream.h>
#include <math.h>
#include<iomanip.h>//使用setw()的头文件
void AB(int A[],int B[],int C[],int a,int b,int c);//矩阵相乘的函数 a,b分别为第一个矩阵的行数和列数 c为第二个矩阵的列数
void main()
{
int i,j,a,b,c;
cout<<"请输入第一个矩阵:"<<endl;
cout<<"请输入行数a"<<"=";
cin>>a;
cout<<"请输入列数b"<<"=";
cin>>b;
int* A=new int[a*b];
//输入矩阵
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
cout<<"A["<<i+1<<"]["<<j+1<<"]=";
cin>>A[i*b+j];
}
//输出矩阵
cout<<"你输入的矩阵是:"<<endl;
for (i = 0; i < a; i ++)
{
for (j = 0; j < b; j ++)
{
cout << setw(3) << A[i * b + j];
}
cout << endl;
}
cout << endl;
cout<<"请输入第二个矩阵:"<<endl;
cout<<"请输入列数c"<<"=";
cin>>c;
int* B=new int[b*c];
for(i=0;i<b;i++)
for(j=0;j<c;j++)
{
cout<<"B["<<i+1<<"]["<<j+1<<"]=";
cin>>B[i*c+j];
}
cout<<"你输入的矩阵是:"<<endl;
for (i = 0; i < b; i ++)
{
for (j = 0; j < c; j ++)
{
cout << setw(3) << B[i * c + j];
}
cout << endl;
}
cout << endl;
int* C=new int[a*c];
cout<<"矩阵AB相乘结果是:"<<endl;
AB(A,B,C,a,b,c);
delete A;
delete B;
delete C;
}
//-----------------------------------------------------
void AB(int A[],int B[],int C[],int a,int b,int c)
{
int i,j,k;
int s=0;//s为中间存储变量
//矩阵相乘利用三层循环实现
for(i=0;i<a;i++)
for (k=0;k<c;k++)
{
for (j=0;j<b;j++)
{
s+=A[i*b+j]*B[j*c+k];
}
C[i*c+k]=s;
s=0;
}
for (i = 0; i < a; i ++)
{
for (j = 0; j < c; j ++)
{
cout << setw(3) << C[i * c + j];
}
cout << endl;
}
}
[解决办法]
写得可以吧,提点意思。
虽说是c++的实现,但代码的风格都是c语言的,而且最好按c++标准的,如用<iostream> 而不是<iostream.h>,用int main而不是void main, 新的编译器如vc2005是不让上面的代码通过的
还有一个错误,delete A; 要改成delete []A;B、C的处理同样