我试图传递这个数组,然后将它乘以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;
}
}
答案 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
并且从不修改它。你可能想在执行乘法时增加它。