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个元素中减去第二个数组的第一个元素,依此类推...如何实现?
答案 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
关闭
您可以按照以下步骤进行操作。
维护两个索引i
和j
。
i
将索引较大的数组,而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];
}
}