我需要一些帮助来减去C中的两个数组,而不是C++;

我需要一些帮助来减去C中的两个数组,而不是C++;,c,C,这应该是一项简单的任务,但我就是做不到。程序必须创建一个原型函数subtract,该函数计算两个数组之间的差,并在第三个数组中返回结果。基本上,它必须将数组的值传递给原型函数,然后打印三个数组的值。以下是我到目前为止所做的 #include <stdio.h> #define NUM 10 int subtract (int [], int [], int); int main() { int x[NUM] = {1, 2 , 3, 4, 5, 6, 7, 8, 9, 10}

这应该是一项简单的任务,但我就是做不到。程序必须创建一个原型函数subtract,该函数计算两个数组之间的差,并在第三个数组中返回结果。基本上,它必须将数组的值传递给原型函数,然后打印三个数组的值。以下是我到目前为止所做的

#include <stdio.h>
#define NUM 10
int subtract (int [], int [], int);
int main()
{
    int x[NUM] = {1, 2 , 3, 4, 5, 6, 7, 8, 9, 10};
    int y[NUM] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    int result[NUM];
    int i;
    result[NUM] = subtract( x, y, NUM);

    printf("The numbers in the first array are:\n");
    for (i=0; i < NUM; i++)
    {
        printf("%d", x[i]);
    }
    printf("The numbers in the second array are: %d\n", y[NUM]);
    for (i=0; i < NUM; i++)
    {
        printf("%d", y[i]);
    }
    printf("The the first array subtracted from the second array is: %d\n", result[NUM]);
    for (i=0; i < NUM; i++)
    {
        printf("%d", result[i]);
    }
    return 0;
}
#包括
#定义数字10
int减法(int[],int[],int);
int main()
{
intx[NUM]={1,2,3,4,5,6,7,8,9,10};
int y[NUM]={11,12,13,14,15,16,17,18,19,20};
int结果[NUM];
int i;
结果[NUM]=减去(x,y,NUM);
printf(“第一个数组中的数字为:\n”);
对于(i=0;i
我想您对C很陌生。我可以提出以下建议:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define NUM 10
int *subtract (int x[], int y[], int size);
int main()
{
    int x[NUM] = {1, 2 , 3, 4, 5, 6, 7, 8, 9, 10};
    int y[NUM] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    int result[NUM];
    int *ret;
    int i;
    ret=subtract(x,y,NUM);
    if( NULL == ret )
    {
        printf("Failure\n");
        exit(1);
    }
    memcpy(result,ret, sizeof(int)*NUM);

    printf("The numbers in the first array are:\n");
    for (i=0; i < NUM; i++) {
        printf(" %d", x[i]);
    }
    printf("\n");

    printf("The numbers in the second array are:\n");
    for (i=0; i < NUM; i++) {
        printf(" %d", y[i]);
    }
    printf("\n");

    printf("The the first array subtracted from the second array is:\n");
    for (i=0; i < NUM; i++) {
        printf(" %d", result[i]);
    }
    printf("\n");
    return 0;
}
int *subtract (int x[], int y[], int size)
{
    static int result[100];
    int ii;
    if( size > sizeof(result)/sizeof(result[0]) )
    {
        printf("Error on subtract: oversize input\n");
        return(NULL);
    }
    for(ii=0; ii<size; ii++)
    {
        result[ii]=y[ii]-x[ii];
    }
    return(result);
}
void subtract(int x[], int y[], int result[], int num) {
    for (int ii = 0; ii < num; ii++) {
        result[ii] = x[ii] - y[ii];
    }
}
#包括
#包括
#包括
#定义数字10
整数*减法(整数x[],整数y[],整数大小);
int main()
{
intx[NUM]={1,2,3,4,5,6,7,8,9,10};
int y[NUM]={11,12,13,14,15,16,17,18,19,20};
int结果[NUM];
int*ret;
int i;
ret=减法(x,y,NUM);
if(NULL==ret)
{
printf(“失败\n”);
出口(1);
}
memcpy(结果、ret、sizeof(int)*NUM);
printf(“第一个数组中的数字为:\n”);
对于(i=0;isizeof(结果)/sizeof(结果[0]))
{
printf(“减法错误:输入过大\n”);
返回(空);
}

对于(ii=0;ii而言,最好的解决方案是将数组传递给函数,如下所示

#include <stdio.h>
#define NUM 10

void subtract (int *, int *, int *, int);
int main()
{
    int x[NUM] = {1, 2 , 3, 4, 5, 6, 7, 8, 9, 10};
    int y[NUM] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    int result[NUM];
    int i;

    subtract(x, y, result, NUM);

    printf("The numbers in the first array are\n");
    for (i = 0 ; i < NUM ; i++)
        printf("%d ", x[i]);
    printf("The numbers in the second array are\n");
    for (i = 0 ; i < NUM ; i++)
        printf("%d ", y[i]);
    printf("The the first array subtracted from"
        " the second array is\n");
    for (i = 0 ; i < NUM ; i++)
        printf("%d ", result[i]);
    return 0;
}

void subtract(int *x, int *y, int *result, int size)
{
    for (int i = 0 ; i < size ; ++i)
        result[i] = y[i] - x[i];
}
int *
subtract(int *x, int *y, int size)
{
    int *result;
    result = malloc(size * sizeof(*result));
    if (result == NULL)
        return NULL;
    for (int i = 0 ; i < size ; ++i)
        result[i] = y[i] - x[i];
    return result;
}
然后在
main()

int
主(空)
{
intx[NUM]={1,2,3,4,5,6,7,8,9,10};
int y[NUM]={11,12,13,14,15,16,17,18,19,20};
int*结果;
int i;
结果=减去(x,y,NUM);
如果(结果==NULL)
return-1;//分配内存失败
printf(“第一个数组中的数字为\n”);
对于(i=0;i

第二种解决方案在您的情况下并不真正需要。它只是向您展示如何做到这一点。最好的方法是第一种解决方案。

您可以尝试这样做:

int *subtract (int a[], int b[], int sz)
{
    int *output;
    int i;
    output = malloc(sizeof(int) * sz);
    if (output == NULL)
        return NULL;
    for (i = 0 ; i < sz ; ++i)
    {
        output[i] = a[i] - b[i];
    }
    return output;
}

int main()
{
    int x[NUM] = {1, 32 , 43, 45, 55, 66, 78, 658, 9, 101};
    int y[NUM] = {31, 12, 13, 14, 15, 16, 17, 18, 199, 290};
    int *result;
    int i;

    result = subtract(x, y, NUM);
    if (result == NULL)
        return -2;    
    printf("The numbers in the first array are\n");
    for (i = 0 ; i < NUM ; i++)
        printf("%d ", x[i]);    
    printf("The numbers in the second array are\n");
    for (i = 0 ; i < NUM ; i++)
        printf("%d ", y[i]);    
    printf("The the first array subtracted from"
        " the second array is\n");
    for (i = 0 ; i < NUM ; i++)
        printf("%d ", result[i]);    
    free(result);
    return 0;
}
int*减法(inta[],intb[],intsz)
{
int*输出;
int i;
输出=malloc(sizeof(int)*sz);
if(输出==NULL)
返回NULL;
对于(i=0;i

您必须记住,每次调用
subtract()
函数时,它都会动态分配内存。完成后释放内存是您的工作。

这是毫无意义的(在C中)(对于您的目标而言)

原因是函数可以返回一个值,它将该值分配给
result
数组的
NUM
元素。但是您要做的是将
x
y
的每个元素的差分分配给
result
数组的相应元素

一种方法是将
结果
数组作为参数传递给
subtract()
函数

void subtract(int x[], int y[], int result[], int num);
然后
subtract()
函数可以执行如下操作:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define NUM 10
int *subtract (int x[], int y[], int size);
int main()
{
    int x[NUM] = {1, 2 , 3, 4, 5, 6, 7, 8, 9, 10};
    int y[NUM] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    int result[NUM];
    int *ret;
    int i;
    ret=subtract(x,y,NUM);
    if( NULL == ret )
    {
        printf("Failure\n");
        exit(1);
    }
    memcpy(result,ret, sizeof(int)*NUM);

    printf("The numbers in the first array are:\n");
    for (i=0; i < NUM; i++) {
        printf(" %d", x[i]);
    }
    printf("\n");

    printf("The numbers in the second array are:\n");
    for (i=0; i < NUM; i++) {
        printf(" %d", y[i]);
    }
    printf("\n");

    printf("The the first array subtracted from the second array is:\n");
    for (i=0; i < NUM; i++) {
        printf(" %d", result[i]);
    }
    printf("\n");
    return 0;
}
int *subtract (int x[], int y[], int size)
{
    static int result[100];
    int ii;
    if( size > sizeof(result)/sizeof(result[0]) )
    {
        printf("Error on subtract: oversize input\n");
        return(NULL);
    }
    for(ii=0; ii<size; ii++)
    {
        result[ii]=y[ii]-x[ii];
    }
    return(result);
}
void subtract(int x[], int y[], int result[], int num) {
    for (int ii = 0; ii < num; ii++) {
        result[ii] = x[ii] - y[ii];
    }
}
void减法(int x[],int y[],int result[],int num){
for(int ii=0;ii

当然,您应该确保所有数组的大小都相同,这样就不会有内存访问错误。然后您可以在
main()

中打印所有三个数组。您尝试写入
减法的地方在哪里?“我做不到”。这不是一个问题。我们不会为您做所有的工作。如果您不理解某些特定的内容,请提出该特定的问题。否则这只是一个“给我codz”类型的问题,将在短时间内结束。术语挑剔:您不减去数组。您减去数组元素。更改为
void