作业帮 > 综合 > 作业

C++程序设计题,关于数组的

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/31 08:12:33
C++程序设计题,关于数组的
1.矩阵的乘法
2.求满足三角形a*a=b(b+c)且c>b的整数解
只会前面那题.封装了一个矩阵类,运算部分只添了矩阵相乘,至于相加,转置等可自行添加.代码如下:#include <iostream>#include <fstream>#include <iomanip>using namespace std;class Matrix{public:Matrix(){row = col = 0;a = NULL;} //默认构造函数Matrix(int r,int c); //带参数的构造函数Matrix(Matrix& m);   //拷贝构造函数~Matrix();  //析构函数void Set_Row_Col(int r,int c); //设置行列void Destroy();     //销毁void Clear();       //清零void Input(istream& in);     //输入void Output(ostream& out);   //输出bool IsEmpty(){ return !a;}  //判断矩阵是否为空friend Matrix operator *(Matrix& A,Matrix& B); //重载乘法运算符private:int row;int col;int **a;};Matrix::Matrix(int r,int c):row(r),col(c){a = new int*[r];for(int i = 0;i < r;i++)a[i]  = new int[c];}Matrix::Matrix(Matrix& m){Destroy();int i,j;row = m.row;col = m.col;a = new int*[m.row];for(int i = 0;i < m.row;i++)a[i]  = new int[m.col];for(i = 0;i < row;i++)for(j = 0;j < col;j++)a[i][j] = m.a[i][j];}Matrix::~Matrix(){ Destroy();}void Matrix::Set_Row_Col(int r,int c){Destroy();row = r;col = c;a = new int*[r];for(int i = 0;i < r;i++)a[i]  = new int[c];}void Matrix::Destroy(){if(a) return;  for(int i = 0;i < row;i++)delete[] a[i];delete[] a;}void Matrix::Clear(){int i,j;for(i = 0;i < row;i++)for(j = 0;j < col;j++)a[i][j] = 0;}void Matrix::Input(istream& in){int i,j;int r,c;in>>r>>c;if(r != row || c != col) //如果输入的行列大小与原先不符,重置Set_Row_Col(r,c);for(i = 0;i < row;i++)for(j = 0;j < col;j++)in>>a[i][j];}void Matrix::Output(ostream& out){int i,j;for(i = 0;i < row;i++){for(j = 0;j < col;j++)cout<<setiosflags(ios_base::left)<<setw(4)<<a[i][j];out<<endl;}}Matrix operator *(Matrix& A,Matrix& B){if(A.col != B.row)  return Matrix();  //如果不能作乘法,返回空矩阵int i,j,k;int r,c;r = A.row;c = B.col;Matrix C(r,c);C.Clear();for(i = 0;i < r;i++)for(j = 0;j < c;j++)for(k = 0;k < A.col;k++)C.a[i][j] += A.a[i][k]*B.a[k][j]; return C;}int main(){int r,c;Matrix A,B,C;ifstream ifile;ifile.open("data.txt",ios_base::in);if(!ifile) {cout<<!"不能打开文件"<<endl;return 1;}A.Input(ifile);B.Input(ifile);C = A * B;if(!C.IsEmpty())C.Output(cout);return 0;} 一般地,矩阵的输入通过读文件比较方便,因此输入输出函数用输入输出流作参数.需要读写文件时,可通过传入ifstream/oftream 对象实现;需要从屏幕输入输出,可传入cin/cout 对象.测试数据如下时3 37 8 94 5 61 2 33 57 8 9 10 114 5 6 7 81 2 3 4 5输出到屏幕如图.封装类是为了方便使用,如果不常用到矩阵,仅为实现算法,直接截出乘法实现的函数即可.