贵州大学OJ c++ 第四章 Matrix

这篇博客介绍了如何用C++编程实现一个Matrix类,该类包含设置3x3矩阵、矩阵乘法和打印矩阵的方法。通过示例输入输出展示了如何使用这个类进行矩阵相乘操作。

记录学习日常 代码可能有错 大家多多包涵 有好的建议提出的话 我会开心接纳 初学阶段 

构造一个Matrix类,有一个private的3x3矩阵,和void setMatrix()输入矩阵方法,Matrix mutipleMatrix(Matrix b)矩阵乘法方法,void printMatrix()输出矩阵方法。

输入描述两个3x3的矩阵a,b。

输出描述运用Matrix类的方法输出a和b矩阵相乘的结果。

提示​你只需要写出Matrix类即可,主函数已给出//除主函数定义的方法名及参数名外,其余名称或方法可自行添加或修改

class Matrix{
private:
    
public:
    void setMatrix(){
        for(int i=0;i<3;++i)
        {
            
        }
    }
    Matrix mutipleMatrix(Matrix b)
    {
      
    }
    void printMatrix()
    {
       
    }
};
int main()
{
    Matrix a,b,c;
    a.setMatrix();
    b.setMatrix();
    c=a.mutipleMatrix(b);
    c.printMatrix();
    return 0;
}
样例输入输出
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9

30 36 42
66 81 96
102 126 150
#include<iostream>

using namespace std;

class Matrix {
private:
int **arr;
public:
    Matrix() {
        arr = new int *;
        for (int i = 0; i <3; i++) {
            arr[i] = new int[3];
        };
    }

    void setMatrix() {
        for (int i = 0; i < 3; ++i) {
            for(int j=0;j<3;j++){
                cin>>arr[i][j];
            }
        }
    }

    Matrix mutipleMatrix(Matrix b) {
        Matrix y;   //声明一个暂存数据的矩阵
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                int sum = 0;
                for (int k = 0; k < 3; k++) {
                    sum = sum + arr[i][k] * b.arr[k][j];

                }
                y.arr[i][j] = sum;
            }
        }return y;
    }

    void printMatrix() {
        for(int i=0;i<3;i++){
            for (int j=0;j<3;j++){
                cout<<arr[i][j]<<" ";
            }cout<<endl;
        }
    }
};

### 贵州大学 OJ C++ 题库及答案解析 关于贵州大学OJ平台上的C++题库,通常情况下,OJ平台的题目设计是为了帮助学生巩固编程基础、掌握特定知识点以及提高算法能力。以下是对C++题库中可能涉及的内容及其解答思路的分析。 #### 1. **运算符重载** 在C++中,运算符重载是一种重要的特性,允许用户定义或修改某些运算符的行为。例如,`<<` 运算符可以被重载为输出自定义对象的格式[^1]。以下是 `operator<<` 的一个典型实现示例: ```cpp class Matrix { private: int rows, columns; int** arr; public: Matrix(int r, int c) : rows(r), columns(c) { arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[columns]; } } ~Matrix() { for (int i = 0; i < rows; ++i) { delete[] arr[i]; } delete[] arr; } int getRows() const { return rows; } int getColumns() const { return columns; } int** getData() { return arr; } friend std::ostream& operator<<(std::ostream& out, const Matrix& m); }; std::ostream& operator<<(std::ostream& out, const Matrix& m) { for (int i = 0; i < m.rows; ++i) { for (int j = 0; j < m.columns; ++j) { out << m.arr[i][j] << " "; } out << std::endl; } return out; } ``` 上述代码展示了如何通过友元函数重载 `<<` 运算符,以便以特定格式输出矩阵内容[^1]。 #### 2. **常见题型及解答思路** - **输入输出流重载**:如上所述,可以通过重载 `<<` `>>` 运算符实现自定义对象的输入输出。 - **构造与析构函数**:确保动态分配内存时正确管理资源,避免内存泄漏。 - **拷贝构造函数与赋值运算符**:当对象之间进行复制操作时,需要深拷贝以避免浅拷贝带来的问题。 - **模板与泛型编程**:使用模板实现通用数据结构,如栈、队列等。 #### 3. **查找具体题目与答案** 由于贵州大学OJ平台的具体题目可能需要登录账号访问,以下是一些可能的题目型及其解答思路: ##### 示例题目 1:矩阵加法 给定两个矩阵,编写程序实现它们的加法操作,并输出结果。 ```cpp #include <iostream> using namespace std; class Matrix { private: int rows, columns; int** arr; public: Matrix(int r, int c) : rows(r), columns(c) { arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[columns]; } } ~Matrix() { for (int i = 0; i < rows; ++i) { delete[] arr[i]; } delete[] arr; } void setElement(int i, int j, int value) { arr[i][j] = value; } int getElement(int i, int j) const { return arr[i][j]; } int getRows() const { return rows; } int getColumns() const { return columns; } friend Matrix operator+(const Matrix& m1, const Matrix& m2); friend ostream& operator<<(ostream& out, const Matrix& m); }; Matrix operator+(const Matrix& m1, const Matrix& m2) { Matrix result(m1.rows, m1.columns); for (int i = 0; i < m1.rows; ++i) { for (int j = 0; j < m1.columns; ++j) { result.setElement(i, j, m1.getElement(i, j) + m2.getElement(i, j)); } } return result; } ostream& operator<<(ostream& out, const Matrix& m) { for (int i = 0; i < m.rows; ++i) { for (int j = 0; j < m.columns; ++j) { out << m.getElement(i, j) << " "; } out << endl; } return out; } int main() { Matrix m1(2, 2), m2(2, 2); m1.setElement(0, 0, 1); m1.setElement(0, 1, 2); m1.setElement(1, 0, 3); m1.setElement(1, 1, 4); m2.setElement(0, 0, 5); m2.setElement(0, 1, 6); m2.setElement(1, 0, 7); m2.setElement(1, 1, 8); Matrix sum = m1 + m2; cout << "Sum of matrices:\n" << sum; return 0; } ``` ##### 示例题目 2:字符串比较 编写程序实现两个字符串的比较功能,支持大小写敏感或不敏感选项。 ```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; bool compareStrings(const string& s1, const string& s2, bool caseSensitive = true) { if (!caseSensitive) { string lowerS1 = s1, lowerS2 = s2; transform(lowerS1.begin(), lowerS1.end(), lowerS1.begin(), ::tolower); transform(lowerS2.begin(), lowerS2.end(), lowerS2.begin(), ::tolower); return lowerS1 == lowerS2; } return s1 == s2; } int main() { string str1, str2; cout << "Enter first string: "; getline(cin, str1); cout << "Enter second string: "; getline(cin, str2); bool caseInsensitive; cout << "Case insensitive comparison? (1 for yes, 0 for no): "; cin >> caseInsensitive; if (compareStrings(str1, str2, !caseInsensitive)) { cout << "Strings are equal." << endl; } else { cout << "Strings are not equal." << endl; } return 0; } ``` #### 注意事项 - 提交代码时,请确保遵守OJ平台的编码规范,包括但不限于命名规则、注释要求等。 - 测试用例应覆盖所有边界条件,例如空矩阵、不同维度的矩阵相加等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值