C 如何添加两个数组以生成第三个数组?
这是我的密码:C 如何添加两个数组以生成第三个数组?,c,arrays,C,Arrays,这是我的密码: #include <stdio.h> int main() { int integer1[10], integer2[10], integertotal[10]; int i, j, index; for (i = 0; i < 10; i++) integer1[i] = 2 * (i + 4); for (i = 0; i < 10; i++) printf(" %d", int
#include <stdio.h>
int main()
{
int integer1[10], integer2[10], integertotal[10];
int i, j, index;
for (i = 0; i < 10; i++)
integer1[i] = 2 * (i + 4);
for (i = 0; i < 10; i++)
printf(" %d", integer1[i]);
printf("\n");
for (j = 0; j < 10; j++)
integer2[j] = 3 * (j + 3);
for (j = 0; j < 10; j++)
printf(" %d", integer2[j]);
printf("\n");
for (index = 0; index < 10; index++)
integertotal[index] = integer1[i] * 12 + integer2[j] * 10;
for (index = 0; index < 10; index++)
printf(" %d", integertotal[index]);
printf("\n\n");
for (index = 0; index < 10; index++)
printf("%d %d+%d=%d\n", index, integer1[i], integer2[j], integertotal[index]);
}
但实际结果是:
(Integer1) 8 10 12 14 16 18 20 22 24 26
(Integer2) 9 12 15 18 21 24 27 30 33 36
(Integertotal) 80 92 104 116 128 140 152 164 176 188
我认为您之前输入的“预期输出”是错误的(我认为应该是:186240 294 348 402 456 510 564 618 672
),并且您有不必要的循环和额外的索引变量。再查一遍。这是我认为你想做的事情的方法:
int main() {
int integer1[10], integer2[10], integertotal[10];
int i;
for (i = 0; i < 10; i++) {
integer1[i] = 2 * (i + 4);
printf(" %d", integer1[i]);
}
printf("\n");
for (i = 0; i < 10; i++) {
integer2[i] = 3 * (i + 3);
printf(" %d", integer2[i]);
}
printf("\n");
for (i = 0; i < 10; i++) {
integertotal[i] = integer1[i] * 12 + integer2[i] * 10;
printf(" %d", integertotal[i]);
}
printf("\n");
for (i = 0; i < 10; i++)
printf("%d %d+%d=%d\n", i, integer1[i], integer2[i], integertotal[i]); //I don't understand the output you want. 8+9=186? Why?
printf("\n");
return 0;
}
intmain(){
整数1[10],整数2[10],整数总数[10];
int i;
对于(i=0;i<10;i++){
整数1[i]=2*(i+4);
printf(“%d”,整数1[i]);
}
printf(“\n”);
对于(i=0;i<10;i++){
整数2[i]=3*(i+3);
printf(“%d”,整数2[i]);
}
printf(“\n”);
对于(i=0;i<10;i++){
整数总数[i]=整数1[i]*12+整数2[i]*10;
printf(“%d”,整数总数[i]);
}
printf(“\n”);
对于(i=0;i<10;i++)
printf(“%d%d+%d=%d\n”,i,integer1[i],integer2[i],integertotal[i]);//我不理解您想要的输出。8+9=186?为什么?
printf(“\n”);
返回0;
}
在第三个循环中,您使用i和j作为整数1和整数2的索引,因此您试图访问这两个数组中不存在的11项。所以你的代码应该是这样的
#include <stdio.h>
int main()
{
int integer1[10], integer2[10], integertotal[10];
int i, j, index;
for (i = 0; i < 10; i++)
integer1[i] = 2 * (i + 4);
for (i = 0; i < 10; i++)
printf(" %d", integer1[i]);
printf("\n");
for (j = 0; j < 10; j++)
integer2[j] = 3 * (j + 3);
for (j = 0; j < 10; j++)
printf(" %d", integer2[j]);
printf("\n");
for (index = 0; index < 10; index++)
integertotal[index] = integer1[index] * 12 + integer2[index] * 10;
for (index = 0; index < 10; index++)
printf(" %d", integertotal[index]);
printf("\n\n");
for (index = 0; index < 10; index++)
printf("%d %d+%d=%d\n", index, integer1[index], integer2[index], integertotal[index]);
}
#包括
int main()
{
整数1[10],整数2[10],整数总数[10];
int i,j,索引;
对于(i=0;i<10;i++)
整数1[i]=2*(i+4);
对于(i=0;i<10;i++)
printf(“%d”,整数1[i]);
printf(“\n”);
对于(j=0;j<10;j++)
整数2[j]=3*(j+3);
对于(j=0;j<10;j++)
printf(“%d”,整数2[j]);
printf(“\n”);
对于(索引=0;索引<10;索引++)
整数总数[指数]=整数1[指数]*12+整数2[指数]*10;
对于(索引=0;索引<10;索引++)
printf(“%d”,整数总[索引]);
printf(“\n\n”);
对于(索引=0;索引<10;索引++)
printf(“%d%d+%d=%d\n”,索引,整数1[index],整数2[index],整数总数[index]);
}
如何添加两个数组以生成第三个数组
我们可以编写这样的函数
void sum_arrays(size_t n, int *src_1, int *src_2, int *dest)
{
for (size_t i = 0; i < n; ++i)
{
// Note that 'i' is local, initialized and it is used for all the arrays
dest[i] = src_1[i] + src_2[i];
}
}
void sum_数组(大小n,int*src_1,int*src_2,int*dest)
{
对于(尺寸i=0;i
当然,这并不能产生OP所期望的输出,但感谢他,显然是他反向设计了“正确”的公式,我们可以使用它
void calc_array(size_t n, int *src_1, int *src_2, int *dest)
{
for (size_t i = 0; i < n; ++i)
{
dest[i] = (src_1[i] * 12 + src_2[i] * 10 + (i + 1)) * 2;
// ^^^ ^^^ ^^^^^
}
}
void计算数组(size\t n,int*src\u 1,int*src\u 2,int*dest)
{
对于(尺寸i=0;i
可测试的
在asker发布的代码中,除了使用错误的公式外,数组还使用错误的变量进行索引
int integer1[10], integer2[10], integertotal[10];
int i, j, index; // <---
for (i = 0; i < 10; i++)
// ...
for (j = 0; j < 10; j++)
// ...
// Now both 'i' and 'j' are equal to 10
// ...
for (index = 0; index < 10; index++)
integertotal[index] = integer1[i] * 12 + integer2[j] * 10;
// Those are out of bounds now ^^^ ^^^
// ...
// Same later
for (index = 0; index < 10; index++)
printf("%d %d+%d=%d\n", index, integer1[i], integer2[j], integertotal[index]);
// ^^^ ^^^
int integer1[10],integer2[10],integertotal[10];
int i,j,index;//在为integertotal[index]
赋值的循环中,您正在使用i
和j
作为integer1[i]
和integer2[j]
。但是i
和j
来自前面的循环。尚未为它们提供与新循环相关的值。不清楚您要计算什么,因为预期的总数374484594…没有解释规则,也与代码不匹配。如果您只是尝试添加两个数组中的相应元素,请对每个数组下标使用相同的索引。不要像在int i,j,index
中那样单独声明循环计数器,如i
和j
。相反,将它们写入循环中,就像for(inti=0;i<10;i++)
一样。这使它保持在循环的局部;它将在循环后消失,这将防止您意外地重用它。(有时循环后需要或需要一个值,并且不能使用这种形式的本地声明。但您应该使用它作为默认值。)而不是integertotal[index]=integer1[i]*12+integer2[j]*10
尝试使用:integertotal[index]=((integer1[i]*12)+(integer2[j]*10)+(index+1))*2也是常见的做法,在C和C++中增加操作符之前和之后的空间以增加可读性。我期望输出应该是[…] - 8×12 + 9×10=186,而不是374。整数= [I] =整数1 [i] * 12 +整数2 [i] *10;答案应该是8*12+9*10=186@CodingFarmer的确如此。有什么问题吗?如果有任何答案有用,请说明@CodingFarmeral那么,你能告诉我原因吗,为什么只使用i,而不是i,j和index?只使用尽可能少的变量@CodingFarmer
int integer1[10], integer2[10], integertotal[10];
int i, j, index; // <---
for (i = 0; i < 10; i++)
// ...
for (j = 0; j < 10; j++)
// ...
// Now both 'i' and 'j' are equal to 10
// ...
for (index = 0; index < 10; index++)
integertotal[index] = integer1[i] * 12 + integer2[j] * 10;
// Those are out of bounds now ^^^ ^^^
// ...
// Same later
for (index = 0; index < 10; index++)
printf("%d %d+%d=%d\n", index, integer1[i], integer2[j], integertotal[index]);
// ^^^ ^^^