gpt4 book ai didi

c - 如何将二维数组的每一行循环移动两个位置?

转载 作者:行者123 更新时间:2023-11-30 16:01:03 26 4
gpt4 key购买 nike

首先我想向你展示我真正想要的......

如果输入是...

  2  3  4 
5 6 6
7 5 4

输出应该是...

 7  5  4
2 3 4
5 6 6 /*Each row is shifted circularly left by two positons */

我尝试了这个代码。据我所知(我是 C 初学者)并写了这个东西..

 /*To shift row of a 4 * 5 matrix by 2 positons left*/

#include<stdio.h>

int main() {

int a[4][5],i,j,k,(*temp)[5];

for(i=0;i<=3;i++) {
for(j=0;j<=4;j++)
scanf("%d",*(a+i)+j);
}


for (k=1;k<=2;k++) {

for(i=0;i<=3;i++) {

temp = (a+i); /*I thought that *(a+i) will point to the address of each row and so I should take it in a variable which is capable of pointing to a row of 5 variables that why TEMP */
(a+i) = (a+i+1);
(a+i+1) = temp;
}

}


for(i=0;i<=3;i++) {

for(j=0;j<=4;j++)
printf("%d\t",*(*(a+i)+j));


printf("\n");

}


return 0;

}

哪里错了……请指正???

最佳答案

  1. 您的示例输出看起来像是沿着列移动的:)
  2. scanf("%d",*(a+i)+j); 不是一个好方法,使用scanf("%d",&a[i][j]); 改为
  3. 您尝试复制 temp = *(a+i); 处的行,但只能在这里复制地址。 temp 将指向 a[i],但不会复制这是数据。

下面的代码给出了输入

1 1 1 1 1 
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4

输出

3   3   3   3   3   
4 4 4 4 4
1 1 1 1 1
2 2 2 2 2

我已经像您的示例一样移动了列,并使用了新的数组 b 而不是 temp

#include<stdio.h>

int main() {

int a[4][5],i,j,b[4][5];

for(i=0;i<=3;i++) {
for(j=0;j<=4;j++)
scanf("%d",(*(a+i)+j));
}


for(i=0;i<=3;i++)
for(j=0;j<=4;j++)
{
*(*(b+i)+j)=*(*(a+((i-2+4)%4))+j);
}


for(i=0;i<=3;i++) {
for(j=0;j<=4;j++)
printf("%d\t",*(*(b+i)+j));
printf("\n");
}

return 0;

}

关于c - 如何将二维数组的每一行循环移动两个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7147022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com