我需要一些帮助来减去C中的两个数组,而不是C++;
这应该是一项简单的任务,但我就是做不到。程序必须创建一个原型函数subtract,该函数计算两个数组之间的差,并在第三个数组中返回结果。基本上,它必须将数组的值传递给原型函数,然后打印三个数组的值。以下是我到目前为止所做的我需要一些帮助来减去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}
#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