c语言问题。用指针(3*3)矩阵转置

#include<stdio.h>

main()
{
int *p[3];
int t;
int i,j;
printf("Input 3*3 :\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",p[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
t=p[i][j];
p[i][j]=p[j][i];
p[j][i]=t;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d",p[i][j]);
printf("\n");
}
}

#include<stdio.h>

void main()
{
int p[3][3]; //改成这样,数据才有存放地方。原的只能存3个地址值。
int t;
int i,j;
printf("Input 3*3 :\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&p[i][j]);
for(i=0;i<3;i++)
for(j=0;j<i;j++) //j<3改为j<i才行。
{
t=p[i][j];
p[i][j]=p[j][i];
p[j][i]=t;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",p[i][j]); //加上空格好些!
printf("\n");
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-15
#include<stdio.h>

main()
{
int p[3][3]; //或者分配内存,或者直接声明成数组
int t;
int i,j;
printf("Input 3*3 :\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&(p[i][j])); //要用地址

for(i=0;i<3;i++)
for(j=i+1;j<3;j++) //不要重复转置,否则又回到原来的样子了
{
t=p[i][j];
p[i][j]=p[j][i];
p[j][i]=t;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d",p[i][j]);
printf("\n");
}
}
相似回答