C语言如何将二维数组中两个元素交换位置

比方说一个二维数组:
BHP
DIN
怎么样把I和H的位置互换变成:
BIP
DHN
调用函数怎么做?

可以让数组进行转置来实现,参考如下:
public class TestTransposition {
int col;
int row;
/**转换方法 将一个数组进行转置
* 原理很简单
*
* @param input
* @return
*/
public int[][] trans(int[][] input) {
int[][] output = null;
row = input.length;
if (row $amp;>amp;$nbsp;0) {
col = input[0].length;
}
output = new int[col][row];
for (int i = 0; i $amp; for (int j = 0; j $amp; output[j][i] = input[i][j];
}
}
return output;
}
public static void main(String[] args){
//若是需要得到转置数组,应该调用上面的转置方法
// int[][] in={{1,2,3},{3,4,5}};
// int[][] out=new TestTransposition().trans(in);
// for (int i = 0; i $amp; // for (int j = 0; j $amp; // System.out.print(out[i][j]);
// }
// System.out.println("");
// }
//若只是想输出得到效果 这应该是可以的
int[][] in={{1,2,3},{3,4,5}};
for(int i=0;i<in[0].length;i++){
for(int j=0;j<in.length;j++){
System.out.print(in[j][i]);
}
System.out.println("");
}
}
/*a[2][3]---->a[3][2]
* a[0][0]---->a[0][0]
* a[0][1]---->a[1][0]
* a[0][2]----->a[2][0]
* a[1][0]---->a[0][1]
* a[1][1]---->a[1][1]
* a[1][2]----->a[2][1]
*/
//故此 初步想法应是通过反向循环,即先循环列,在循环行来实现。

}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-07
t=array[0][1];
array[0][1]=array[1][1];
array[1][1]=t;
跟一维数组的元素交换是一样的啦追问

把它写成函数在主程序中调用该怎么做?

追答

void func(char array[2][3],int x1,int y1,int x2,int y2){
char t;
t=array[x1][y1];
array[x1][y1]=array[x2][y2];
array[x2][y2]=t;

}
调用时func(array,0,1,1,1);

追问

在定义和声明这个函数的时候提示“对于所有类型'void'非法”,我的二维数组里面的元素是字母。这是什么情况?

追答

//运行没问题……

#include
char array[2][3];
void func(char array[2][3],int x1,int y1,int x2,int y2){
char t;
t=array[x1][y1];
array[x1][y1]=array[x2][y2];
array[x2][y2]=t;
}

int main(){
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%c",&array[i][j]);//注:连续输入二维数组的值,不用加回车
func(array,0,1,1,1);
for(i=0;i<2;i++){
for(j=0;j<3;j++)
printf("%c ",array[i][j]);
printf("\n");
}
return 0;
}

本回答被提问者采纳
第2个回答  2014-06-22
用一个变量,如交换a和b,加一个t。。 t=a;a=b;b=t; 就交换好了追问

呃,抱歉,假如要调用函数解决这个问题怎么做?
char am(P[2][3],int m,int n)

{
char t;
t=P[0][1];
P[0][1]=P[1][1];
P[1][1]=t;
}
这样对不对啊?

追答

调用的话要用指针,不然没用的

相似回答