在c中减去大小不同的数组

时间:2018-10-06 18:17:56

标签: c arrays

void function(int first[], int second[], int third[]) {
       int i;
       for(i=0;i<64;i++) {
          third[i] = first[i] - second[i];
       }
    }

我想从第一个数组中减去第二个数组。第一个包含32个数字,第二个包含13个数字。它对前13个数字有效。一旦第二个数组的元素“用完”,我想使用第二个数组开头的数字。所以我想从第一个数组的第14个元素中减去第二个数组的第一个元素,依此类推...如何实现?

3 个答案:

答案 0 :(得分:1)

您可以使用%从数组的长度中获取索引的其余部分,这样,您可以循环方式遍历第二个数组! 我更改了您的代码以按照您的要求进行操作

// get the length of array before you pass it to the function like this:
// int second_len = sizeof(second) / sizeof(second[0]);
void function(int first[], int second[], int third[], int second_len) {
    int i;
    for(i=0;i<64;i++) {
        third[i] = first[i] - second[i % second_len];
    }
}

答案 1 :(得分:0)

一种选择是添加一个附加的循环变量:

void function(int first[], int second[], int third[], 
                int first_size, int second_size) 
{
    int i=0, k=0;
    for(i=0; i<first_size; i++) {
        third[i] = first[i] - second[k];
        k++;
        if (k==second_size)
            k = 0;  
    }
}

i跟踪第一个数组的大小和输出,就像在程序中一样,k跟随第二个数组的大小,并在达到该大小时重置。现在,该函数不再使用硬编码的数组大小,而是增加了两个参数:第一个和第二个数组的大小。

为将来参考,此代码的其余部分可能如下所示:

#include <stdio.h>

void print_array(int arr[], int);
void function(int arr_1[], int arr_2[], int arr_3[], int, int);

int main()
{
    int arr_1[] = {1,2,3,4,5};
    int arr_2[] = {1,2};

    int n_1 = sizeof(arr_1)/sizeof(arr_1[0]);
    int n_2 = sizeof(arr_2)/sizeof(arr_2[0]);  

    int arr_out[n_1]; 

    function(arr_1, arr_2, arr_out, n_1, n_2);

    print_array(arr_1, n_1);
    print_array(arr_2, n_2);
    print_array(arr_out, n_1);

    return 0;
}

void print_array(int arr[], int n_elem)
{
    int i = 0;
    for (i=0; i<n_elem; i++)
        printf("%d ", arr[i]);
    printf("\n");
}

使用print_array作为函数,以避免为每份打印重复相同的代码行。

对于示例输入,输出将为0 0 2 2 4

答案 2 :(得分:0)

  

第一个数组和第二个数组的元素是正数序列   数字,并且都以-1

关闭

您可以按照以下步骤进行操作。

维护两个索引iji将索引较大的数组,而j将索引较小的数组,并且一旦较小的数组达到-1,则将j重置为0,一旦较大的数组达到-1,则中断循环。

void function(int first[], int second[], int third[]) {
   int i =0,j=0;

   for(i=0; i<64 ; i++;j++) {

       if(second[j] == -1)
       {
          j =0; //Reset the j=0 to start from beginning 
       }

       if (first[i] == -1)
       {
          third[i] = -1; //Terminate third with -1
          break; //Break the loop
       }

      third[i] = first[i] - second[j];
   }
}