我的问题是如何获取3X3矩阵的输入并显示所有9个次要矩阵。我最大的问题是如何在删除特定的行和列时迭代所有元素,然后将剩余的元素复制到2X2矩阵中。
作业指示:
确定输入矩阵的每个元素(i,j)的次要矩阵-M(i,j)。 3X3输入矩阵中有9个元素。因此,将有9个小矩阵 在此步骤中生成。每个次要矩阵的维数是2X2。 元素(i,j)的次要矩阵 - 从原始矩阵中删除第i行和第j列。该 剩余的元素构成元素(i,j)的次要矩阵。 请注意,不需要实际删除原始输入矩阵的行和列。 只跟踪哪些元素必须从中复制到2X2次要矩阵中 基于元素索引(i,j)的原始输入矩阵。 声明一个2x2矩阵以将次矩阵存储在main函数中。使用此矩阵 对于此步骤中的9个次要矩阵中的每一个。 创建一个函数定义,它将采用3X3原始输入矩阵,元素索引 (i,j)和2X2次矩阵作为参数。该函数复制适当的元素 对于输入矩阵的给定元素索引(i,j),从3x3矩阵到2x2矩阵。
代码:
#include <stdio.h>
int DET(int matrix[3][3]);
int main() {
int matrix[3][3];
int minor[2][2];
int i = 0;
int j = 0;
printf("Enter 9 elements for a 3X3 matrix.\n");
for(i = 0; i < 3; ++i) {
for(j = 0; j < 3; ++j) {
printf("Enter element:");
scanf("%d", &matrix[i][j]);
}
}
for (i = 0; i < 3; ++i) {
for (j = 0; j < 3; ++j) {
printf(" %d ", matrix[i][j]);
}
printf("\n");
}
if(DET(matrix) == 0){
printf("Matrix is not invertible.\n");
}
else{
printf("The determinant of the matrix is %d\n", DET(matrix));
}
}
int DET(int matrix[3][3]) {
int x, y, z, u, v, w, p, q, r, d;
x = matrix[0][0];
y = matrix[0][1];
z = matrix[0][2];
u = matrix[1][0];
v = matrix[1][1];
w = matrix[1][2];
p = matrix[2][0];
q = matrix[2][1];
r = matrix[2][2];
d=x*(v*r-w*q)-y*(u*r-w*p)+z*(u*q-v*p);
return d;
}
答案 0 :(得分:1)
我认为有很多方法可以做到这一点。以下只是一个例子。 (可能效率低下) 我只是通过保存次要矩阵的时间行和列来复制它们。
void createMinor(int matrix[][3], int minor[][2], int row, int col) { int minor_row, minor_col; for (int i = 0; i < 3; i++) { minor_row = i; if (i>row) minor_row--; for (int j = 0; j < 3; j++) { minor_col = j; if (j>col) minor_col--; if (i != row && j != col) minor[minor_row][minor_col] = matrix[i][j]; } } }