c++⼆维数组的两种传参⽅式实现矩阵的转置
以下实现的是矩阵的转置
⼀、数组的维度已知时
1. ⽤普通⽅法定义,是以⼆维的⽅式定义的,可以⽤ a [ i ] [ j ] 这种⼆维的⽅式访问数组的数据,传参时发送数组名,接收时写完整数组的形式。
#include<iostream>
using namespace std;
void reverse(int a[3][3] ){
int c=0;
for(int i=0;i<3;i++){
for(int j=i;j<3;j++){
c = a[i][j];
a[i][j]=a[j][i];
a[j][i]=c;
}
}
}
void main(){
int a[3][3];
cout<<"请输⼊数据:"<<endl;
int i,j;
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<<a[i][j]<<" ";
}
cout<<endl;
}
reverse(a);
cout<<"----------------转置后数组为------------------"<<endl;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
2. 动态定义数组
也是以⼆维的动态⽅式定义的数组,所以访问时可以⽤ a [ i ] [ j ] 这种⼆维的⽅式访问数组的数据
int c=0;
for(int i=0;i<3;i++){
for(int j=i;j<3;j++){
c = a[i][j];
a[i][j]=a[j][i];
a[j][i]=c;
}
}
}
void main(){
int(*a)[3]=new int[3][3];//指针数组,左边的数字同列相同(三维数组等号左边的数字是等号右边的两个数字)
cout<<"请输⼊数据:"<<endl;
int i,j;
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<<a[i][j]<<" ";
}
cout<<endl;
}
reverse(a);
cout<<"----------------转置后数组为------------------"<<endl;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
⼆、数组维度未知时
这种⽅法允许⽤户定义数组维度,普通数组在定义时,⽅括号内的必须是常数,所以此处必须动态定义数组
并且要以⼀维的⽅式定义,因为动态定义的⼆维数组指针要返回到⼀个⼀维指针数组中,但是这个⼀维指针数组定义时⽅括号内也需要常数,如果将此数组指针也动态定义,⽐较复杂。所以⼀个n阶矩阵的元素个数就是n * n 个。
既然是⼀维数组访问数据 a [ i ] [ j ] 时就要⽤ a [ i * n + j ] 的⽅法,传递和接收参数时,⽤指针,并且同时传递维度 n
int c=0;
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
c = *(p + i*n + j);
*(p + i*n + j) = *(p + j*n + i);
*(p + j*n + i) = c;
}
}
}
void main(){
int row;
cout<<"矩阵维度:";//矩阵是正⽅形
cin>>row;
int *a = new int[row*row];
cout<<"请输⼊数据:"<<endl;
int i,j;
for(i=0;i<row;i++){
for(j=0;j<row;j++){
cin>>a[i*row+j];
}
}
cout<<"----------------原数组为------------------"<<endl;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
cout<<a[i*row+j]<<" ";
}
cout<<endl;
}
reverse(a,row);
cout<<"----------------转置后数组为------------------"<<endl; for(i=0;i<3;i++){
for(j=0;j<3;j++){
cout<<a[i*row+j]<<" ";
}
cout<<endl;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。