#include<stdioh>
int main()
{
int i,j,sum1=0,sum2=0;
int d;
int a[4][4],b[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]); //转换前
for(i=0;i<4;i++)
for(j=0;j<4;j++)
b[j][i]=a[i][j]; //转换后
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",b[i][j]);
if(i==j)
sum1+=a[i][j];
else if(i+j==3)
sum2+=a[i][j];
}
}
printf("\n");
d=sum1+sum2;
printf("%d\n",d);
return 0;
}
望采纳,已运行
#include <stdioh>
int fun(int array[3][3])
{
int i,j,temp;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
return 0;
}
int main()
{
int i,j;
int array[3][3]={{100,200,300}, {400,500,600}, {700,800,900}};
for (i=0;i<3;i++)
{ for (j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("Converted array:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%7d",array[j][i]);
printf("\n");
}
return 0;
}
公式错了:应是b[i最大列数+j]。
一句话解释:二维数组内元素地址是连续的,在内存中就是一维数组。
所以反过来也是一样,公式a[i][j]=b[i行+j]。就是按照二维数组的行列值在一维数组中取值。
比如定义二维数组a[2][3]在内存中等同于定义一维数组b[23];
而取a[1][2]值,对应一维数组下标5的元素,相当于取b[13+2](a[1][2]按连续地址数就是1行加3个元素)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)