谭浩强C语言程序设计第八章指针9.写一函数,将一个3乘3的整型矩阵转置
开始自己写的一直转置不成功,因为在转置第二层循环那里写的j<3这样前面转置的又转回去了,把那个条件改一下就好了。
#include<stdio.h>
//自己写的
//#if 0
int main()
{
void change(int (*p)[3]);
int a[3][3],*p, i, j;
printf("请输入9个整数:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
scanf("%d", &a[i][j]);
printf("\n");
}
p = &a[0][0];
change(p);
printf("转置后的矩阵为:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d\t", a[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
void change(int(*p)[3])
{
int i, j, t;
for(i=0;i<3;i++)
for (j = 0; j < i; j++)
{
t = *(*(p + i) + j);
*(*(p + i) + j) = *(*(p + j) + i);
*(*(p + j) + i) = t;
}
}
//#endif
运行结果:
参考答案:
//答案:
//#if 0
int main()
{
void move(int *pointer);
int a[3][3], *p, i;
printf("input matrix:\n");
for (i = 0; i < 3; i++)
scanf("%d %d %d", &a[i][0], &a[i][1], &a[i][2]);
p = &a[0][0];
move(p);
printf("Now,matrix:\n");
for (i = 0; i < 3; i++)
printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);
return 0;
}
void move(int *pointer)
{
int i, j, t;
for (i = 0; i < 3; i++)
for (j = i; j < 3; j++)
{
t = *(pointer + 3 * i + j);
*(pointer + 3 * i + j) = *(pointer + 3 * j + i);
*(pointer + 3 * j + i) = t;
}
}
//#endif
不知道为什么答案里面的转置循环可以写j<3是成功的,等等再用笔写一下吧。