6、 矩阵(三)
编写C++程序完成以下功能:
(1) 用类来实现矩阵,定义一个矩阵的类,属性包括:
l 矩阵大小,用 lines, rows(行、列来表示);
l 存贮矩阵的数组指针,根据矩阵大小动态申请(new)。
(2) 矩阵类的方法包括:
l 构造函数,参数是矩阵大小,需要动态申请存贮矩阵的数组;
l 析构函数,需要释放矩阵的数组指针;
l 拷贝构造函数,需要申请和复制数组;
l 输入,可以从cin中输入矩阵元素;
l 输出,将矩阵格式化输出到cout;
l 矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵类,但必须矩阵大小相同;
l 矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵类,但必须矩阵大小相同。
(3) 定义三个矩阵:A1、A2、A3;
(4) 初始化A1、A2;
(5) 计算并输出A3 = A1加A2,A3=A1减A2;
(6) 用new动态创建三个矩阵类的对象:pA1、pA1、pA3;
(7) 初始化pA1、pA2;
(8) 计算并输出pA3=pA1加pA2,pA3=pA1减pA2;
(9) 释放pA1、pA1、pA3。
#include<iostream>
#include <iomanip>
using namespace std;
class Matrix
{
private:
int lines;
int rows;
public:
int **Array;
Matrix(int Nlines=3,int Nrows=3)
{
int i;
lines=Nlines;
rows=Nrows;
Array=new int *[lines];
for(i=1;i<=lines;i++)
{
Array[i]=new int(rows);
}
}
void Setmatrix(int Nlines,int Nrows);
Matrix(Matrix &p);
int Getlines() {return lines;}
int Getrows() {return rows;}
int*GetArray() {return Array[lines];}
void putin();
void putin(int x,int y,int a);
void putout();
friend void Matrixplus(Matrix* a,Matrix* b,Matrix* c);
friend void Matrixsub(Matrix* a,Matrix* b,Matrix* c);
~Matrix()
{
int i;
for(i=1;i<=lines;i++)
{
delete [] Array[i];
}
delete [] Array;
}
};
Matrix::Matrix(Matrix &p)
{
lines=p.lines;
rows=p.rows;
Array[lines]=p.Array[p.lines];
}
void Matrix::Setmatrix(int Nlines,int Nrows)
{
int i;
lines=Nlines;
rows=Nrows;
Array=new int *[lines];
for(i=1;i<=lines;i++)
{
Array[i]=new int(rows);
}
}
void Matrix::putin()
{
int i,j;
cout<<"请输入一个"<<lines<<"*"<<rows<<"矩阵:"<<endl;
for(i=1;i<=lines;i++)
{
for(j=1;j<=rows;j++)
{
cin>>Array[i][j];
}
getchar();
}
}
void Matrix::putin(int x,int y,int a)
{
int i,j;
for(i=1;i<=x;i++)
{
for(j=1;j<=y;j++)
{
Array[i][j]=a;
}
}
}
void Matrix::putout()
{
int i,j;
for(i=1;i<=lines;i++)
{
for(j=1;j<=rows;j++)
{
cout<<setw(5)<<Array[i][j];
}
cout<<endl;
}
}
void Matrixplus(Matrix* a,Matrix* b,Matrix* c,int l,int r)
{
int i,j;
for(i=1;i<=l;i++)
{
for(j=1;j<=r;j++)
{
c->Array[i][j]=a->Array[i][j]+b->Array[i][j];
}
}
}
void Matrixsub(Matrix* a,Matrix* b,Matrix* c,int l,int r)
{
int i,j;
for(i=1;i<=l;i++)
{
for(j=1;j<=r;j++)
{
c->Array[i][j]=a->Array[i][j]-b->Array[i][j];
}
}
}
int main()
{
Matrix PA1(3,4),PA2(3,4),PA3(3,4),PA4(3,4);
int l,r;
char z;
cout<<"采用默认值(y)/手动输入(非y)?"<<endl;
cin>>z;
if(z=='y')
{
PA1.Setmatrix(3,4);
PA1.putin(3,4,3);
PA2.Setmatrix(3,4);
PA2.putin(3,4,3);
}
else
{
cout<<"请输入矩阵的行和列(用空格隔开):"<<endl;
cin>>l>>r;
PA3.Setmatrix(l,r);
PA4.Setmatrix(l,r);
PA1.Setmatrix(l,r);
PA1.putin();
PA2.Setmatrix(l,r);
PA2.putin();
}
cout<<endl<<"矩阵PA1为:"<<endl;
PA1.putout();
cout<<endl<<"矩阵PA2为:"<<endl;
PA2.putout();
if(z=='y')
{
Matrixplus(&PA1,&PA2,&PA3,3,4);
Matrixsub(&PA1,&PA2,&PA4,3,4);
}
else
{
Matrixplus(&PA1,&PA2,&PA3,l,r);
Matrixsub(&PA1,&PA2,&PA4,l,r);
}
cout<<endl<<"PA1+PA2="<<endl;
PA3.putout();
cout<<endl<<"PA1-PA2="<<endl;
PA4.putout();
system("pause");
return 0;
联系客服