基本上,我已經撰寫了一些代碼來轉置矩陣,并且對于某些輸入它有效,對于某些輸入它不起作用,我不知道我在哪里犯了錯誤。
這是代碼
#include <stdio.h>
int main() {
int WIDTH, HEIGHT, i, j;
int matrix[100][100];
do {
printf("Enter height and width: ");
scanf("%d %d", &HEIGHT, &WIDTH);
if ((WIDTH > 100 || HEIGHT > 100) || (WIDTH < 1) || (HEIGHT < 1))
printf("Dimensions incorrect!\n");
else
break;
} while (1);
int vel = WIDTH * HEIGHT;
printf("Enter elements: ");
for (i = 0; i < HEIGHT; i )
for (j = 0; j < WIDTH; j )
scanf("%d", &matrix[i][j]);
int temp;
for (i = 0; i < HEIGHT; i ) {
for (j = i; j < WIDTH; j ) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
printf("Transposed matrix: \n");
for (i = 0; i < WIDTH; i ) {
for (j = 0; j < HEIGHT; j )
printf("]", matrix[i][j]);
printf("\n");
}
return 0;
}
我的尺寸為 3 2,元素 {1,2,3,4,5,6} 的輸出:(示例 1)
1 3 0
2 4 0
想要的輸出:(示例 1)
1 3 5
2 4 6
我的尺寸為 5 1,元素 {1,2,3,4,5} 的輸出:(示例 2)
1 0 0 0 0
想要的輸出:(示例 2)
1 2 3 4 5
uj5u.com熱心網友回復:
考慮 5,1 的情況,所以:
for (i = 0; i < 5; i ) {
for (j = i; j < 1; j ) { // for j>=1 the condition will always fail
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
內回圈的主體將只運行 for [0][0]。
該回圈僅在HEIGHT<=WIDTH. 如果HEIGHT>=WIDTH,你應該這樣做:
for (i = 0; i < HEIGHT; i ) {
for (j = 0; j < i; j ) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
換句話說,如果矩陣是不對稱的,您希望基于其較長邊的交換次數。
如果 HEIGHT==WIDTH,你可以做任何一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366232.html
上一篇:如何剪輯影像以洗掉其填充
下一篇:從函式中傳遞指標什么時候有效?
