某二维数组存放的数据构成一个n*n的方阵,其中n<=5。写程序,从键盘输入n的值(n<=6),该n*n矩阵中各元素的值按下面的公式计算:
a[i][j] = i * n + j + 1
其中,a[i][j]表示第i行第j列的元素。要求分别输出该矩阵和它的转置矩阵。
输入提示信息:无
输入n的输入格式:%d
输出提示:"The original matrix is:\n"
输出提示:"The changed matrix is:\n"
输出格式:对矩阵的输出要求:列与列之间为%3d,行与行之间为\n
输入样例1:
5↙
输出样例1:
The_original_matrix_is:
__1__2__3__4__5
__6__7__8__9_10
_11_12_13_14_15
_16_17_18_19_20
_21_22_23_24_25
The_changed_matrix_is:
__1__6_11_16_21
__2__7_12_17_22
__3__8_13_18_23
__4__9_14_18_24
__5_10_15_20_25
(输出样例中下划线“_”代表空格)
输入样例2:
4↙
输出样例2:
The original matrix is:
__1__2__3__4
__5__6__7__8
__9_10_11_12
_13_14_15_16
The changed matrix is:
__1__5__9_13
__2__6_10_14
__3__7_11_15
__4__8_12_16
(输出样例中下划线“_”代表空格)
#include<stdio.h>
int main()
{
int n, i, j;
scanf("%d", &n);
int arr1[n][n], arr2[n][n]; //要先确定n的值,才能定义数组,否则无法分配内存空间
printf("The original matrix is:\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
arr1[i][j] = n * i + j + 1;
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%3d", arr1[i][j]);
}
printf("\n");
}
printf("The changed matrix is:\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
arr2[i][j] = arr1[j][i];
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%3d", arr2[i][j]);
}
printf("\n");
}
return 0;
}
|