任務: 從左上角到右下角填充主對角線和次對角線左右兩側的矩陣扇區。用零填充矩陣的其余部分。

我發生什么事了:
#include <stdio.h>
int main()
{
int a[9][9], n=9, t=1, i, j;
for(j=0; j<n; j )
for(i=0; i<n; i )
if((j<i && i<n/2) || (j<n-i-1 && i>=n/2) || (j>n-i-1 && i<n/2) || (j>i && i>=n/2))
a[i][j]=t ;
else
a[i][j]=0;
for(i=0; i<n; i )
{
for(j=0; j<n; j )
printf("M", a[i][j]);
printf("\n");
}
return 0;
}

uj5u.com熱心網友回復:
您的第一對嵌套嵌套回圈是倒置的。以下
for(j=0; j<n; j )
for(i=0; i<n; i )
應該
for(i=0; i<n; i )
for(j=0; j<n; j )
更好的代碼格式和變數名有助于發現此類錯誤。
請注意,為每行中的邊緣距離引入第三個控制變數有助于從條件陳述句中消除很多復雜性。
例如:
#include <stdio.h>
#define SIZE 9
#define GROWTH 1
int main(void)
{
for (int row = 0, edge = 0, number = 1; row < SIZE; row ) {
for (int column = 0; column < SIZE; column ) {
printf("M", (column < edge || SIZE - column <= edge) ? number : 0);
}
printf("\n");
edge = row < SIZE / 2 ? GROWTH : -GROWTH;
}
}
修復for程式中的回圈順序,或使用上面的示例,都會產生以下輸出:
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 2
3 4 0 0 0 0 0 5 6
7 8 9 0 0 0 10 11 12
13 14 15 16 0 17 18 19 20
21 22 23 0 0 0 24 25 26
27 28 0 0 0 0 0 29 30
31 0 0 0 0 0 0 0 32
0 0 0 0 0 0 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537439.html
標籤:C
上一篇:如何修復此分段錯誤?
下一篇:如何索引C中的堆分配矩陣?
