C语言输入一个3*3矩阵转置后输出,大家看下我的哪里不对?

2024-11-21 21:31:44
推荐回答(5个)
回答1:

#include
int main()
{
int a[3][3],(*p)[3],i,j,temp;//q指针是多余的
printf("请输入3*3矩阵:\n");
p=a;
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{temp=*(*(p+i)+j); //这里面是两个值交换
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=temp;
}
for(i=0;i<3;i++) //输出我帮你改的容易看一点
for(j=0;j<3;j++)
printf("%d\t",*(*(p+i)+j));
printf("\n");
}
return 0;
}

回答2:

#include
int main()
{
int a[3][3],(*p)[3],*q,i,j;
printf("请输入3*3矩阵:\n");
p=a;q=a;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",*(*(p+i)+j));//scnaf(%d",(*(p+i)+j));去掉外面的*
if((i*3+j)%3==0)//这里和下一行相当的奇妙啊,应该不用的吧
printf("\n");//和下面的一样啊,先这样吧
}
int tmp;
for(i=0;i<3;i++)
for(j=0;j<=i;j++)
{
temp=*(*(p+i)+j); //这里面是两个值交换
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=temp;
}

for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%d",*(*(p+i)+j));
if((i*3+j)%3==0)
printf("\n");
}
return 0;
}

这一段
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%d",*(*(p+i)+j));
if((i*3+j)%3==0)
printf("\n");
}
可以改成:
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",*(*(p+i)+j));//如果数字不大的话,可以限定打印距离的。
printf("\n");
}

回答3:

上面错在了q=a;q只是指针,而 a[][]其实是指针的指针。两者是有区别的。要不就写成
q=a[3]不过后面不知道好不好用

回答4:

p=a;q=a; C 语言中的数组名 是不能不能复制的,因为C 语言中的数组名是一个常量

回答5:

......