如一矩阵nArry= {{1,2,3,4}{2,3,4,5}{3,4,5,6}{4,5,6,7}}; 如何交换其中两行 比如将第一行和第四行交换变为 {{4,5,6,7}{2,3,4,5}{3,4,5,6}{1,2,3,4}}; 如何用C语言来实现,是否可以用交换地址的方法实现? 谢谢~~
方法有很多:
1、可以直接找到数组对应行的元素,进行交换数据,改变原数组内容。
2、可以定义指针数组指向每行的首地址,交换指针地址,按顺序打印每个指针为首的行数据,得到数据交换效果,原数组内容不变。
我这里用第2种方法给你写了一个,你参考吧。
#include <stdio.h>int main ()
{
int nArry[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}};
int *p[4],i,j,*psave,index[2];//p[]分别指向每行首地址
printf("打印原数组:");
i=16; p[0]=&nArry[0][0];
while(i-->0)
{
if((i+1)%4==0)
printf("\n");
printf("%d ",*(p[0]));
p[0]++;
}
while(1)
{
printf("\n\n输入2个你要交换的行号:");
scanf("%d%d",&index[0],&index[1]);
for(i=0;i<4;i++)
{
p[i]=&nArry[i][0];
}
psave=p[index[0]-1];
p[index[0]-1]=p[index[1]-1];
p[index[1]-1]=psave;
printf("第%d行和第%d行调换后的数组为:\n",index[0],index[1]);
for(i=0;i<4;i++) //按顺序打印 首地址指针开头的行数字
{
for(j=0;j<4;j++)
{
printf("%d ",*(p[i]+j));
}
printf("\n");
}
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2018-05-06
1.使用循环语句对于指定行的每列的数一个一个进行交换即可。
2.例程:
#include<>
int s[1000][1000];
int n,m,i,j,k,temp;
int main(){
scanf("%d%d,&n,&m); //的行数n,列数m
for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",s[i]+j) //得到二维数组
for(j=0;j<m;j++){ //交换第三行和第五行的数
temp=s[3][j];
s[3][j]=s[5][j];
s[5][j]=temp;
}
for(i=0;i<n;i++) {
for(j=0;j<m;j++) printf("%d",s[i][j]) //输出交换后的数组
printf("\n")
}
return 0;
}本回答被网友采纳
第2个回答 2010-10-12
可以啊,给你写了个完整的程序,为了比较好理解,就把循环分开写了,实现就是这个意思,如果你想扩展的话可以用宏定义来实现。
#include <stdio.h>
void _swap(int p[4][4], int a, int b);
int main()
{
int a[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}};
int j=0,i=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");
}
_swap(a,1,4);
printf("\n\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
void _swap(int p[4][4], int a, int b)//交换二维数组(4*4)的a、b行
{
int aa[4];
int i;
for(i=0;i<4;i++)
aa[i]=p[a-1][i];
for(i=0;i<4;i++)
p[a-1][i]=p[b-1][i];
for(i=0;i<4;i++)
p[b-1][i]=aa[i];
}
#include <stdio.h>
void _swap(int p[4][4], int a, int b);
int main()
{
int a[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}};
int j=0,i=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");
}
_swap(a,1,4);
printf("\n\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
void _swap(int p[4][4], int a, int b)//交换二维数组(4*4)的a、b行
{
int aa[4];
int i;
for(i=0;i<4;i++)
aa[i]=p[a-1][i];
for(i=0;i<4;i++)
p[a-1][i]=p[b-1][i];
for(i=0;i<4;i++)
p[b-1][i]=aa[i];
}
第3个回答 2010-10-27
可以的,需要先定义相同类型的临时整型变量或地址指针变量!本回答被提问者采纳
第4个回答 2018-02-12
你可以用一个4个指针的数组来指向这四个向量,这样交换两个指针的位置就可以了