C++中的矩阵向量乘法
问题描述:
我有一个将矩阵和向量相乘的代码。但是,它并没有在for
循环中输入好友功能calc()
。你能发现错误吗?C++中的矩阵向量乘法
#include<iostream>
using namespace std;
class vector;
class matrix
{
public:
int r,c,ma[10][10];
void get(int r, int c=3)
{
int i,j;
cout<<"Enter the matrix elements\n";
for(i=0; i<r; i++)
for(j=0; j<c; j++)
{
cin>>ma[i][j];
}
cout<<"Your input: ";
for(i=0; i<r; i++)
{
cout<<"\n";
for(j=0; j<c; j++)
{
cout<<ma[i][j]<<"\t";
}
}
}
friend void calc(matrix m,vector v);
};
class vector
{
public:
int val,va[10];
void get(int v=3)
{
int i;
cout<<"\nEnter the vector values\n";
for(i=0; i<v; i++)
{
cin>>va[i];
}
cout<<"\nYour input:\n";
for(i=0; i<v; i++)
{
cout<<va[i]<<"\t";
}
}
friend void calc(matrix m,vector v);
};
void calc(matrix m,vector v)
{
int c[10],i,j;
if(m.c == v.val)
{
for(i=0; i<v.val; i++)
{
cout<<"Entered 1st loop";
c[i] = 0;
for(j=0; j<m.r; j++)
{
c[i] = c[i]+(m.ma[i][j] * v.va[j]);
}
}
}
cout<<"\nThe result is :\n";
for(i=0; i<m.r; i++)
{
cout<<"Entered for";
cout<<"\n"<<c[i];
}
}
int main()
{
int r;
matrix m1;
vector v1;
cout<<"Enter the number of rows = ";
cin>>r;
m1.get(r);
v1.get();
calc(m1,v1);
return 0;
}
答
你从来没有在vector
类初始化val
,无论你在matrix
类做r
和c
。因此,支票if(m.c == v.val)
永远不会通过,因为这些成员的值是undefined(包含随机垃圾)。
我建议你看看The Definitive C++ Book Guide and List;一本好书可以帮助你掌握基本知识。
使用调试器,单步执行代码。查看无法输入for循环时的值以及原因。 – David 2013-04-24 14:03:43
@Dave是的,我试过,这就是为什么我用循环内的一些输出代码,但没有任何工作... – 2013-04-24 14:05:30
你不初始化一些类成员变量。 – 2013-04-24 14:06:39