Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何添加两个数组以生成第三个数组?_C_Arrays - Fatal编程技术网

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]);
//                                         ^^^          ^^^