C语言、用指针方法实现一个3*3矩阵的转置
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
void move(int*pointer);//函数声明
int a[3][3],i,j;
int*p;
cout<<"请输入矩阵元素:"<<endl;
for(i=0;i<3;i++)//输入数组
{
for(j=0;j<3;j++)
{
cin>>a<i>[j];
}
}
cout<<"输出原矩阵:"<<endl;//输出矩阵
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
p=&a[0][0];//将数组首元素赋给指针变量p
move(p);//函数调用
cout<<"处理后的矩阵:"<<endl;
for(i=0;i<3;i++)//输出处理后的矩阵
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
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;
}
}
}
扩展资料:
用函数
#include<stdio.h>
int main()
{
void move(int*s);
int a[3][3];int i=0;
int*p=&a[0][0];
printf("请输入一个3*3的数组:\n");
for(i=0;i<3;i++)
{
scanf("%d%d%d",&a<i>[0],&a<i>[1],&a<i>[2]);
}
move(p);
printf("转置后的结果:\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*s)
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
t=*(s+3*i+j);
*(s+3*i+j)=*(s+3*j+i);
*(s+3*j+i)=t;
}
}
}
只能用指针吗?
void mtrix_reverse(int arr[][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i > j) {
//指针实现
int tmp = *(*(arr + i) + j);
*(*(arr + i) + j) = *(*(arr + j) + i);
*(*(arr + j) + i) = tmp;
}
}
}
}
void main() {
int arr[3][3] = {1,2,3,4,5,6,7,8,9};
mtrix_reverse(arr);
}
}
转置之后结果如下: