【发布时间】:2021-10-10 15:31:22
【问题描述】:
我设法输入 M,N,并接受它的条件(0 最后一个是转置,我看过一些网站,但由于它们的方式与我的不同,所以我不喜欢只是“直接”复制粘贴。 这是我的代码: 最后一个“反向列和行”是错误的,我不知道为什么,从我的思维方式来说,我正在切换M和N,然后将之前的矩阵C应用到一个新的变量中,即reverseMatrixC,然后把 i 和 j 颠倒过来。 例如,我选择 M = 2,N = 3。
然后我选择 matrixA 和 matrixB 这些值: 矩阵C将显示: 但是当我转置它时,它会显示: 我想要的是这样的:#include <stdio.h>
int main()
{
int M, N, i, j;
printf ("Enter number M: ");
scanf("%d", &M);
printf ("Enter number N: ");
scanf("%d", &N);
if (0 < N && M <= 10) {
printf ("Accepted number M: %d\n", M);
printf("Accepted number N: %d\n", N);
}
else printf("Please enter valid number, which is 0 < N and M <= 10!");
int matrixA[M][N], matrixB[M][N], matrixC[M][N];
printf ("Enter matrix A: \n");
for (i=0; i<M; i++){
for (j=0; j<N; j++){
scanf("%d", &matrixA[i][j]);
}
}
printf ("Enter matrix B: \n");
for (i=0; i<M; i++){
for (j=0; j<N; j++){
scanf("%d", &matrixB[i][j]);
}
}
printf("Matrix A: \n");
for (i=0; i<M; i++){
for (j=0; j<N; j++){
printf("%d ", matrixA[i][j]);
}
printf("\n");
}
printf("Matrix B: \n");
for (i=0; i<M; i++){
for (j=0; j<N; j++){
printf("%d ", matrixB[i][j]);
}
printf("\n");
}
for (i=0; i<M; i++){
for (j=0; j<N; j++){
matrixC[i][j] = matrixA[i][j] + matrixB[i][j];
}
}
printf("Sum of matrix A and matrix B => Matrix C is: \n");
for (i=0; i<M; i++){
for (j=0; j<N; j++){
printf("%d ", matrixC[i][j]);
}
printf("\n");
}
int reverseMatrixC[N][M];
for (i=0; i<M; i++){
for (j=0; j<N; j++){
reverseMatrixC[j][i] = matrixC[i][j];
}
}
printf("Reverse columns and rows in matrix C: \n");
for (i=0; i<M; i++){
for (j=0; j<N; j++){
printf("%d ", reverseMatrixC[i][j]);
}
printf("\n");
}
}
1 2 3
4 5 6
2 4 6
8 10 12
2 8 4
4 10 6
2 8
4 10
6 12
【问题讨论】:
-
如果用户输入的数字超出范围,您会打印出错误,然后继续执行程序,就好像没有问题一样。如果输入验证失败,您需要一个循环返回输入提示。此外,您只检查 N的下限和M的上限也很奇怪。您不应该检查两个值的两个界限吗?就目前而言,N可能很大,M可能是否定的,您的验证将通过。 -
是的,这就是我在最后一步时的想法,我也尝试切换M和N,并注意到这一点,但我想不出任何正确的解决方案现在,我几天前刚刚学会了如何使用 Array :D.
-
您有
N导致堆栈溢出的危险;在这种情况下,您需要测试N和M的下限和上限;那是 4 个谓词。
标签: c