您的位置:首页 > 运维架构 > Linux

Linux下的C语言编程——指针实现矩阵转置

2016-10-10 22:24 567 查看
今天我刚刚学习了指针,对它掌握的并不是很了解。现在我们来写一个通过指针来实现矩阵转置的程序。原先在学习数组的时候,我曾经练习过通过数组来实现矩阵转置。

矩阵转置的核心是如何交换a[i][j]和a[j][i]的值。下面我先附上我原先写的代码,大家可以看一下。

#include<stdio.h>

void transpos(int arr[4][4])
{
int i;
int j;
int temp;

for(i = 0; i < 4; i++)
{
for(j = i+1; j < 4; j++ )
{
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}

for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
if(j%4 == 0)
printf("\n");
printf("%4d",arr[i][j]);
}
}
printf("\n");
}

int main()
{
int arr[4][4];
int i;
int j;

printf("please input the arry!\n");

for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
scanf("%d",&arr[i][j]);
}
}

for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
{
if(j%4 == 0)
printf("\n");

printf("%4d",arr[i][j]);
}

printf("\n");

transpos(arr);
}

这是我原先写的代码,现在我再附上我用指针实现数组转置的代码

#include <stdio.h>

void move(int *p)
{
int i;
int j;
int t;

for (i = 0; i < 3; i++)

for (j = i; j < 3; j++)
{
t=*(p + 3*i + j);
*(p + 3*i+j) = *(p + 3*j + i);
*(p + 3*j + i) = t;
}

}

int main()
{
int a[3][3];
int *p;
int i;

printf("please input the matrix!\n");

for(i = 0; i < 3; i++)
{
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
}

for(i = 0; i < 3; i++)
{
printf("%d %d %d\n",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;
}

两个程序很相似,下面我附上运行图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 linux 编程 指针