【发布时间】: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超出数组范围 -
d在main中未初始化 -
sigesgv 表示分段错误,这意味着您可能正在尝试访问一些未初始化的指针数据
-
multm是(a)错误和(b)atrociuos。你有要求这样写吗?请使用索引。顺便说一句,[9]数组与[3][3]数组不同,程序具有未定义的行为。它也看起来像一个 C 程序。 C 和 C++ 是不同的语言。 C++ 有一组不同的原生习语。
标签: c++ pointers matrix matrix-multiplication