【问题标题】:Incrementing and decrementing a matrix in C在 C 中递增和递减矩阵
【发布时间】:2021-06-01 20:29:02
【问题描述】:

我遇到了一个我想解决但没有弄清楚的问题。

供您参考。在我的大学中,我们使用教授自己编写的 .h 文件,以便我们更轻松地创建矩阵和向量。

矩阵如下所示:

  |1|2|3|4|
1.|5|4|3|1|
2.|2|1|8|4|
3.|3|0|7|6|

我现在要做的是从row1column1开始,到row1column4。从那里开始,我不想做行主要顺序。相反,我想去 row2 column4 并向后移动直到 row2 column1。

我的代码如下所示:

int i,j;

for (i = 1; i <= 3; i++)
{
   for (j = 4; j <= 1; --j)
   {
     printf("j: %d", j);
   }
}

但这给了我:

i = 1
j= 4,3,2,1
i = 2
j= 4,3,2,1
.....

但我希望它是这样的:

i = 1
j = 1,2,3,4
i = 2
j = 4,3,2,1
.....

我怎样才能得到我想要的样子?

干杯!

【问题讨论】:

  • 不会进入这个循环for (j = 4; j &lt;= 1; --j),因为在循环开始之前就满足了停止条件。
  • @jxh 为什么? j 将从 4 开始递减到 1。还是我不明白你的答案?
  • 4 &lt;= 1 计算结果为 false,因此循环停止。
  • @jxh 但循环对我有用。 j 不必为 1 即可开始。我将 j 设置为 4,因为我有 4 列并且 --j 将其递减为 1。当它达到 1 时,循环停止。
  • @Lionel Ronaldo 那么 i 等于 3 呢?

标签: c matrix vector row


【解决方案1】:

这对我有用。

for(i=0;i<m;i++)
{
    if(i%2==0)
        for(j=0; j<n; j++)
            printf(" %d",a[i][j]);
    else
        for(j=n-1; j>=0; j--)
            printf(" %d",a[i][j]);
}

m 和 n 是 mxn 矩阵的维度。基本上,您必须检查该行是偶数还是奇数,并基于此从该行的开头或结尾移动。 编辑:澄清一下,a 是之前创建的矩阵的名称,其值由用户输入。在这里,如果它有助于您进一步理解。

int i, j, m, n, a[MAX][MAX];
printf(" m= ");
scanf("%d", &m);
printf(" n= ");
scanf("%d", &n);
printf(" Matrix:\n");
for(i=0; i<m; i++)
    for(j=0; j<n; j++)
        scanf("%d", &a[i][j]);

MAX 在 main 函数之外定义,在它之前,带有

#define MAX 100

【讨论】:

  • 你把m维度放在哪里了?我在代码中找不到它
  • 我的错,它应该在第一个循环中。我现在将对其进行编辑。
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2015-10-03
  • 2017-07-05
  • 2016-01-31
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多