C语言矩阵转换问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 00:06:36
原来的行和列互换。原来是i行j列,变成j行i列
#include<iostream>
using namespace std;
main()
{
int t[3][3]={{1,2,3},{4,5,6},{7,8,9}},um,i,j;

for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ cout<<"i shi :"<<i<<"j shi :"<<j<<" "<<t[i][j];
um=t[i][j],t[i][j]=t[j][i],t[j][i]=um;
cout<<"现在是"<<t[i][j]<<endl;
}
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
{cout<<t[i][j];}
cout<<endl;
}
}
怎么我上面一个FOR嵌套循环明明已经把它转换了啊,怎么下一个循环输出却还是原封不动?????请问怎么改?

很简单,
for(i=0;i<3;i++)
for(j=0;j<3;j++)//把j=0改成j=i+1就行
{ cout<<"i shi :"<<i<<"j shi :"<<j<<" "<<t[i][j];
um=t[i][j],t[i][j]=t[j][i],t[j][i]=um;
cout<<"现在是"<<t[i][j]<<endl;
}

给你分析下。。。。为什么前面已经换了,但后面输出却没换过来?原因很简单。。你做了两次交换。。。
例如,当i=1,j=3时,你把t[1][3]与t[3][1]做了一次交换,等程序运行到i=3,j=1时,你是不是对t[3][1]与t[1][3]又做了一次交换??
考虑下吧。。。呵呵。。。进行了两次交换,所有工作都白做了。。。
解决办法是:再定义一个二维数组来存放交换后的值。。。。
#include<iostream>
using namespace std;
main()
{
int t[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j;
int str[3][3];

for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ //cout<<"i shi :"<<i<<"j shi :"<<j<<" "<<t[i][j];
str[j][i]=t[i][j];
//cout<<"现在是"<<t[i][j]<<endl;
}
for(i=0;i<3;i++)
{ for(j