こんにちは、次のコードがうまくいくことを願っています。printf
正しい値が格納されているかどうかを示すステートメントを保持しました。
#include<stdio.h>
#define MAT_DIM 4
int main()
{
int loop1,loop2;
int number = 0;
int array[MAT_DIM][MAT_DIM];
for(loop1 = 0; loop1 < MAT_DIM; loop1++)
{
for(loop2 = 0; loop2 <= loop1; loop2++)
{
array[loop2][loop1] = ++number;
printf("%d %d %d \n", loop2, loop1, array[loop2][loop1]);
}
for(loop2 = loop1-1; loop2 >= 0; loop2--)
{
array[loop1][loop2] = ++number;
printf("%d %d %d \n", loop1, loop2, array[loop1][loop2]);
}
}
return 0;
}
編集
コードは次のように機能します。loops
- 行列の次元を増やす (外側のインクリメンタル ループ)
- 次元が固定されると、2 番目のループが次の列に進むのに役立ちます。(内側のインクリメンタル ループ)
- 最初の行に戻るには、3 番目のループが必要です。(内側の減分ループ)
For First Interation: 1*1 次元の配列を格納しています。ここで、内側の減分ループは機能しません
For Second Interation:
loop1
が1になるため、2 番目の行に到達するまで 2 番目の列に次の値が入力されます。ここで 2 番目の内部ループが表示されます。このループは、現在の行から値を格納し、loop2
値をデクリメントし始めます。ゼロになるとすぐ壊れます。
したがって、列を最初にインクリメントする loop で格納し、次に行をデクリメントする loop で格納しています。外側のループがループ内の次元に達するまで、同じことが続きます。ここでは、行列の次元として最大4になります。