C语言二维数组如何交换两行或者两列?

比如现在有一个二维数组125753802479需要比较每一行第一个数字的大小,按照每一行第一个数字从大到小排列,只是比较第一个数字,后面的数字不动的,上面这个输出之后就是... 比如现在有一个二维数组
1 2 5 7
5 3 8 0
2 4 7 9
需要比较每一行第一个数字的大小,按照每一行第一个数字从大到小排列,只是比较第一个数字,后面的数字不动的,上面这个输出之后就是
5 3 8 0
2 4 7 9

1 2 5 7
我不知道在二维数组里面怎么整行移动,也不知道能不能做到整行移动,如果需要用到指针,麻烦多解释一下指针的用法,我刚开始学C语言,对指针的使用不太熟练,谢谢大家。
补充:不好意思,上面输出的二维数组第二行和第三行之间多打了一行,这个是没有的,应该是这样的:
5 3 8 0
2 4 7 9
1 2 5 7
展开
 我来答
问明6E
高粉答主

2019-06-21 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:13万
展开全部

代码:

#include<stdio.h>

int main()

{

int i, j, a[2][3] = { {1,2,3},{4,5,6} },b[3][2];

printf("array a:\n");

for (i = 0; i <=1; i++)//处理a数组中的一行中各元素

{

for (j = 0; j <= 2; j++)//处理a数组中的某一列元素

{

printf("%5d", a[i][j]);

b[j][i] = a[i][j];

}

printf("\n");

}

printf("array b:\n");

for (i = 0; i<=2; i++)

{

for (j = 0; j <=1; j++)

{

printf("%5d", b[i][j]);

}

printf("\n");

}

return 0;

}

扩展资料:

1、return在函数中的作用

我们如果将函数看做一个加工厂,参数就是我们向加工厂投入的原料,具体的函数功能实际上就是加工的过程,而return语句代表返回值,就是加工厂在实现加工之后给“投资人”的成品。

2、return语句的特点

a、在函数当中,遇到return语句之后就意味着函数运行的结束,在此之后的代码是不运行的。

b、它不支持任何运算也没有任何内建方法,和任何其他的数据类型比较是否相等时永远返回false,也可以将None赋值给任何变量。

c、执行到return语句时,会退出函数,return之后的语句不再执行。但将return语句放在try语句块中,是个例外。

3、return的默认值:return函数默认的返回值为undefined。

zy1404
2014-11-12 · TA获得超过1387个赞
知道小有建树答主
回答量:784
采纳率:100%
帮助的人:476万
展开全部
#include<iostream>
using namespace std;
void show (int a[3][4])
{
  int i,j;
  for(i=0;i<3;i++)
    {
      for(j=0;j<4;j++)
        {
          cout<<a[i][j]<<"\t";
        }
      cout<<endl;
    }
}
int main()
{
  int a[3][4],i,j,k;
  for(i=0;i<3;i++)
    for(j=0;j<4;j++)
      cin>>a[i][j];
  show(a);
  for(i=0;i<3;i++)
    {
      for(j=i+1;j<3;j++)
        {
          if(a[i][0]<a[j][0])
            {
              for(k=0;k<4;k++)
                {
                  int p;
                  p=a[i][k];
                  a[i][k]=a[j][k];
                  a[j][k]=p;
                }
            }
        }
    }
    cout<<endl;
  show(a);
  return 0;
}

 

更多追问追答
追问
谢谢回复
我查了一下cout和endl,这都是C++里面的,我还没有学C++,希望能用C语言写,C语言也是这样子的么?
追答
#include
void show (int a[3][4])
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[3][4],i,j,k;
for(i=0;i<3;i++)
for(j=0;j<4;j++) scanf("%d",&a[i][j]);
show(a);
for(i=0;i<3;i++)
{
for(j=i+1;j<3;j++)
{
if(a[i][0]<a[j][0])
{
for(k=0;k<4;k++)
{
int p;
p=a[i][k];
a[i][k]=a[j][k];
a[j][k]=p;
}
}
}
}
printf("\n");
show(a);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风雷九州
推荐于2017-09-12 · TA获得超过3025个赞
知道大有可为答主
回答量:1127
采纳率:100%
帮助的人:433万
展开全部

可以整一个临时的数组交换就行了。一维数组就相当于一个指针,二维数组就相当于指针的指针。

即int a[10],a其实就是一个int *。int b[10][10],b就是一个int **,而b[0]就是一个int *。

比如你的数组a[0] = {1 2 5 7}  a[1] = {5 3 8 0} a[2] = {2 4 7 9},其实就是一个指针。如果这个整明白了,就好操作了。

    int i,j;

    int a[3][4] ={ 1,2,5,7, 5, 3, 8, 0, 2, 4, 7, 9};

    int b[4]; /* 临时保存交换的数据 */

    for(i = 0; i < 3; i ++)
    {
        for(j = i; j < 2; j ++)
        {
            /* 冒泡排序,把最小的放到最后 */
            if (a[j][0] < a [j + 1][0])
            {
                memcpy(b,a[j], sizeof(b));
                memcpy(a[j], a[j + 1], sizeof(b));
                memcpy(a[j + 1], b, sizeof(b));
            }
        }
    }
更多追问追答
追问

谢谢回复。

有三个问题:

  1. 关于指针,你说int a[10],a其实就是一个指针,如果int *a[10],这里该怎么理解?

  2. memcpy我之前没有用过,为什么要加sizeof(b)?这儿能用strcpy么?

  3. 老师现在经常用malloc和free,这个有必要么

追答
  1. int * a = malloc(10 * sizeof(int)),也可以a[0],a[1]这种方式使用,和int b[10]这种一样,a和b的类型是一致的。 int * a[10]就不是这个意思了,这个是10个int *的指针,a[1] = malloc(10 * sizeof(int))来用,a[1][0],就可以代表其中的元素。 int * a[10]就代表二维数组了。

  2. 不能用strcpy,memcpy是内存拷贝,直接向地址里面拷贝一定长度的内存。strcpy只能拷贝字符串,要求必须要有\0.这种数组不是字符串,不能用strcpy。

  3. malloc只是申请一块内存,内存申请和释放比较浪费性能。malloc一般用在使用大内存的时候,或者需要向另一个函数传递地址的时候用。一般局部变量能搞定的,就没必要malloc。这里malloc也是可以实现的。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
推荐于2017-09-20 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3484万
展开全部

在数组int a[M][N]中,如需交换i(0 <= s < M)行和t(0 <= t < M)行,s != t,代码如下。

for(i = 0; i < N; ++i) { tmp = a[s][i]; a[s][i] = a[t][i];  a[t][i] = tmp; }

在数组int a[M][N]中,如需交换i(0 <= s < M)列和t(0 <= t < M)列,s != t,代码如下。

for(i = 0; i < M; ++i) {  tmp = a[i][s]; a[i][s] = a[i][t];  a[i][t] = tmp; }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式