将2D数组传递给函数并将其乘以2

时间:2017-06-27 08:35:41

标签: c++ c++11

我试图传递这个数组,然后将它乘以2.我的代码工作,但它将它乘以4而不是我认为它是因为for循环在另一个for循环中。有人可以解释如何解决这个问题吗?

5x5阵列:

int numbers  [5][5] = { {  1,    3,    5,    7,    9},
                        { -2,   -4,   -6,   -8,  -10},
                        {  3,    3,    3,    3,    3},
                        { 55,   77,   99,   22,   33},
                        {-15, -250, -350, -450, -550} };

// function
int multiply_bytwo(int n[5][5])
{
    int total_times = 0;
    for (int row = 0; row < 5; row++)
    {
        for (int col = 0; col < 5; col++)
        {
            n[row][col] = n[row][col] * 2;
        }

        return total_times;
    }
}

3 个答案:

答案 0 :(得分:0)

目前你的return total_times除了返回0之外什么都不做 我假设您想要计算循环运行的次数,可以使用total_times++;来完成

移动循环的返回侧使函数返回最终所需的数组

我建议在许多地方添加打印件以解决此类问题,以便您可以随时调试问题,例如:

expected = VALUE
actual = VALUE

这可以帮助您找到出错的地方。

int numbers  [5][5] = { {  1 ,  3,   5,   7,   9},
                        { -2,  -4,  -6,  -8, -10},
                        {  3,   3,   3,   3,   3},
                        { 55,  77,  99,  22,  33},
                        {-15,-250,-350,-450,-550} 
                      };



// function
int multiply_bytwo(int n[5][5])
{

    int total_times = 0;
    for (int row = 0; row < 5; row++)
    {


        for (int col = 0; col < 5; col++)
        {
            n[row][col] = n[row][col] * 2;
            total_times ++;
        }


    }
   return total_times;
}

答案 1 :(得分:0)

试试这个:

Limit 1

答案 2 :(得分:0)

我将您的代码编入MCV示例:

#include <stdio.h>

// function
int multiply_bytwo(int n[5][5])
{
    int total_times = 0;
    for (int row = 0; row < 5; row++)
    {
        printf("\n");
        for (int col = 0; col < 5; col++)
        {
            n[row][col] = n[row][col] * 2;
            printf("%d\n", n[row][col]);
        }
        return total_times;
    }
}

int main(int argc, char *argv[])
{
    int numbers  [5][5] = { { 1,3,5,7,9},{-2,-4,-6, -8, -10},{3,3,3,3,3},{ 55, 77, 99, 22, 33 },{ -15, -250, -350, -450, -550 } };
    multiply_bytwo(numbers);
}

另外,请注意添加的printf()调用,这些调用在生成时会输出计算值。

输出:

$ gcc temp.c -std=c99 && ./a.exe

2  6  10  14  18

我们在这看到什么?好吧,第一行乘以2({1,3,5,7,9} - > {2,6,10,14,18}),然后函数退出。

当我们将return语句移出循环时会得到什么结果?

代码:

int multiply_bytwo(int n[5][5])
{
    int total_times = 0;
    for (int row = 0; row < 5; row++){
        printf("\n");
        for (int col = 0; col < 5; col++){
            n[row][col] = n[row][col] * 2;
            printf("%d  ", n[row][col]);
        }
    }
    return total_times;
}

结果:

  2    6   10   14    18
 -4   -8  -12  -16   -20
  6    6    6    6     6
110  154  198   44    66
-30 -500 -700 -900 -1100

我冒昧地手动对齐输出,但数字完全符合您的要求。

我不知道你从哪里得到*4

您实际上也没有返回任何内容 - 您在开头设置total_times = 0并且从不修改它。你可能想在执行乘法时增加它。