vaghxc 2024-05-01 20:57 采纳率: 88.2%
浏览 2
已结题

求答疑重载加减法问题

题目是创3*3矩阵类(9个数或者二维数组实现),并用重载 "+"、 "-"运算符实现矩阵加减法
疑惑是为什么我用scanf加循环输入数据后结果成这样

#include <iostream>
using namespace std;
class Matrix {
    public:
        double data[3][3]; // 存储矩阵元素的二维数组
    // 默认构造函数,初始化所有元素为0
    Matrix() {
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                data[i][j] = 0.0;
            }
        }
    }

    // 重载"+"运算符
    Matrix operator+(const Matrix& other) const {
        Matrix result;
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                result.data[i][j] = data[i][j] + other.data[i][j];
            }
        }
        return result;
    }

    // 重载"-"运算符
    Matrix operator-(const Matrix& other) const {
        Matrix result;
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                result.data[i][j] = data[i][j] - other.data[i][j];
            }
        }
        return result;
    }

    // 打印矩阵的成员函数
    void print() const {
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                cout << data[i][j] << " ";
            }
            cout << endl;
        }
    }
};

int main() {
    Matrix m1, m2, sum, difference;
    printf("请输入数据");
     for(int i=0;i<3;i++)
    {
        for(int t=0;t<3;t++)
        {
            scanf("%d",&m1.data[i][t]);
        }
    }
    printf("请输入数据");
    for(int i=0;i<3;i++)
    {
        for(int t=0;t<3;t++)
        {
            scanf("%d",&m2.data[i][t]);
        }
    }
    
    // 计算矩阵和差
    sum = m1 + m2;
    difference = m1 - m2;

    // 打印结果
    cout << "Sum of m1 and m2:" << endl;
    sum.print();

    cout << "Difference of m1 and m2:" << endl;
    difference.print();

    return 0;
}

img

  • 写回答

6条回答 默认 最新

  • 专家-皆知 2024-05-01 20:57
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    在您的代码中,您使用了 %d 格式化字符来读取用户输入的数据,这会导致问题,因为 %d 是用于整型数据(例如 int)而非双精度浮点数(double)。由于矩阵中的元素类型是 double,应该使用 %lf 来读取用户的输入。

    以下是修复后的代码:

    #include <iostream>
    using namespace std;
    class Matrix {
    public:
        double data[3][3]; // 存储矩阵元素的二维数组
        // ...
    };
    
    int main() {
        Matrix m1, m2, sum, difference;
        printf("请输入数据");
        for(int i=0;i<3;i++) {
            for(int t=0;t<3;t++) {
                scanf("%lf",&m1.data[i][t]); // 使用 %lf 读取 double 类型数据
            }
        }
        printf("请输入数据");
        for(int i=0;i<3;i++) {
            for(int t=0;t<3;t++) {
                scanf("%lf",&m2.data[i][t]); // 使用 %lf 读取 double 类型数据
            }
        }
    
        // ...
    
        return 0;
    }
    

    现在,当您运行程序时,它会正确地从用户那里获取双精度浮点数,并且计算和打印的结果应该是正确的。注意,如果您想让用户输入小数,他们应该输入带有小数点的数字,比如 1.23 而不是 123

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 5月1日

悬赏问题

  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统