【问题标题】:A C++ program that inputs two 3*3 matrice and display the sum and product of the matrices输入两个 3*3 矩阵并显示矩阵的和和乘积的 C++ 程序
【发布时间】:2020-12-17 16:21:32
【问题描述】:

这是一个 c++ 程序,它接受 3*3 矩阵的输入并显示这些矩阵的和和乘积。现在我已经改进了这个程序,它按预期工作,那么这个程序有什么可以改进的地方吗?

#include <stdio.h>

//function prototypes

获取数组的输入。

void getarr(int *x);

将两个矩阵相加。


void addm(int *x, int *y, int *z);

打印一个数组。

void displaym(int *x);

两个数组相乘。

void multm(int *x, int *y, int *z);

主要功能

int main() {

    //declaring arrays for matrices
    int a[3][3];
    int b[3][3];
    int c[3][3];
    int d[3][3];

    //getting input from user
    printf("\nEnter nine numbers as the values for first matrix:\n");
    getarr(a[0]);
    printf("\nThe matrix you entered is:\n");
    displaym(a[0]);
    printf("\nEnter nine numbers as the values for second matrix:\n");
    getarr(b[0]);
    printf("\nThe matrix you entered is:\n");
    displaym(b[0]);
    
    //calling function for addition
    addm(a[0], b[0], c[0]);

    //calling function for multiplication
    multm(a[0], b[0], d[0]);

    //printing the matrices
    printf("\nThe sum of the matrices is:\n");
    displaym(c[0]);
    printf("\nThe product of the matrices is:\n");
    displaym(d[0]);

    return 0;
}

函数定义

void getarr(int *x) {
    for (int j = 0; j < 9; j++) {
        printf("%d:", j);
        scanf("%d", x);
        x++;
    }
}

void addm(int *x, int *y, int *z) {
    for (int i = 0; i < 9; i++) {
        *z = *x + *y;
        z++;
        x++;
        y++;
    }
}

void multm(int *x, int *y, int *z) {
    for(int j=0;j<3;j++){
    for (int i = 0; i < 3; i++, z++) {
        *z = (*x++)*(*y)+(*x++)**(y + 3)+(*x)**(y + 6);
        x -= 2, y += 1;
    }
    x += 3, y -= 3;
    }
}

void displaym(int *x) {
    printf("\n\n");
    for (int i = 0; i < 9; i++) {
        printf("%d  ", *x++);
        if (i == 2 || i == 5)
            printf("\n");
    }
}

【问题讨论】:

  • 这个程序运行在什么样的环境中? RUN FAILED 这样的消息不熟悉。
  • 您是否尝试过使用调试器?我的怀疑是 multm 超出数组范围
  • dmain 中未初始化
  • sigesgv 表示分段错误,这意味着您可能正在尝试访问一些未初始化的指针数据
  • multm 是(a)错误和(b)atrociuos。你有要求这样写吗?请使用索引。顺便说一句,[9] 数组与[3][3] 数组不同,程序具有未定义的行为。它也看起来像一个 C 程序。 C 和 C++ 是不同的语言。 C++ 有一组不同的原生习语。

标签: c++ pointers matrix matrix-multiplication


【解决方案1】:

这是未初始化指针的常见错误。你在程序前面声明了int * d;,但你从来没有给它一个d应该指向的内存。你需要初始化那个内存。

您可以在main 中添加以下行,但在任何使用d 之前,

d = new int[9];
memset(d, 0, 9);

【讨论】:

  • 你是对的,在这种情况下,d 应该是一个数组。我会更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多