问题:矩阵的数都是随机产生的,输入行数n,行数和列数一样,输出转置后的矩阵
代码:
#include <iostream>
#include <cstdlib> //进制转化 strtol和itoa 随机数rand()
#include <ctime> //随机数种子 srand((int)time(0))
#define random(x)rand()%(x); //宏定义 产生随机数
using namespace std;
void print_ju(int **p,int n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<p[i][j]<<" ";
}
cout<<endl;
}
}
void zhuanzhi(int **a,int n){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
int temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
}
int main(){
srand((int)time(0)); //产生随机数种子
int n;
cin>>n;
int i,j;
int **p=new int* [n];
for(i=0;i<n;i++){
p[i]=new int[n];
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
p[i][j]=random(100);
}
}
print_ju(p,n);
//转置
zhuanzhi(p,n);
cout<<endl;
print_ju(p,n);
return 0;
}
结果:
//行列不同的矩阵转置
代码:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void free(int **p,int n){
//释放空间
for(int i=0;i<n;i++){
delete[] p[i];
}
p=NULL;
}
int main(){
srand((int)time(0));//随机数种子
int n,m;
cin>>n>>m;
int **p=new int*[n];
for(int i=0;i<n;i++){
p[i]=new int[m];
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
p[i][j]=rand()%1000+1;//产生1到1000之内的数字
cout<<p[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
int a[m][n];//这是转置后的数组
int i=0,j=0;
while(1){
if(i==n){
break;
}
if(j==m){
j=0;i++;
continue;
}
a[j][i]=p[i][j];
j++;
}
for(int i1=0;i1<m;i1++){
for(int j1=0;j1<n;j1++){
cout<<a[i1][j1]<<" ";
}
cout<<endl;
}
//释放空间
free(p,n);
return 0;
}
结果: