c语言中二维数组如何交换行?

如一矩阵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<stdio.h>
#include<string.h>
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];
}
第3个回答  2010-10-27
可以的,需要先定义相同类型的临时整型变量或地址指针变量!本回答被提问者采纳
第4个回答  2018-02-12
你可以用一个4个指针的数组来指向这四个向量,这样交换两个指针的位置就可以了
相似回答