В C итеративная функция не выдает правильный вывод, который должен быть числом не в сумме (из данных, введенных пользователем) или в массиве данных?

#c #arrays #function #math #iteration

#c #массивы #функция #математика #итерация

Вопрос:

Я работаю над назначением. Мое задание состоит в том, чтобы: Написать программу для поиска наименьшего положительного целого числа, которое не отображается в массиве и не может быть сформировано суммой двух чисел в массиве.Используйте функции-
int issumof2(int data[], int size, int number)
int inarray(int data[], int size, int number)
(размер — это количество элементов в массиве, а данные берутся у пользователя)
Я действительно застрял на том, как это исправить. Я не знаю, как использовать обе функции вместе, чтобы найти число. На этом p

 #include <stdio.h>
//function declaration
int issumof2(int data[], int size, int number);
int inarray(int data[], int size, int number);
int i, data[7], size = 7, sum, n=0 number=0;

int main()
{
    printf("Enter 7 numbers ");
    for (i = 0; i < size; i  )
        scanf("%d", amp;data[i]);
    //function call
    inarray(data, size, number);
    issumof2(data, size,number);
    printf("Number is %dn", issumof2(data, size,number));//this is most likely wrong
    return 0;
}
int issumof2(int data[], int size, int number)//add all combinations of data
{
    inarray(data, size, number); //calling inarray to check that number isn't in data
    {
        for (j = i   1; j < size; j  )//professor told me to use j<i but it doesn't work for some reason
        {
            sum = data[i]   data[j];//gets the sum
            if (number != sum amp;amp; number != data[i])
            {
                number = data[i] 1 number; 
                number  ;
                data[i]  ;//moving on to the next data
            }

        }

    }

    return number;//this is also returning number??
}
int inarray(int data[], int size, int number)//check if number is in array
{
    if (n <=size)
    {
        if (number != data[i])
            number = data[i]   1   n;
            n  ;
            data[i]  ;//moving on to the next data
    }   
    return number;//this is returning number
}

expected output:
Enter 7 numbers
1 2 2 3 4 3 1
Smallest positive Integer = 9
  

Комментарии:

1. inarray(data, size, number) предполагается, что возвращает true или false в зависимости от того, находится ли number в массиве. Вам нужно вызвать его в цикле. И аналогично для issumof2() .

2. Вызов inarray довольно бессмыслен, если вас не волнует возвращаемое значение.

Ответ №1:

Структура вашей main() функции должна быть такой:

 int main()
{
    printf("Enter 7 numbers ");
    for (i = 0; i < size; i  )
        scanf("%d", amp;data[i]);
    while (inarray(data, size, number) || issumof2(data, size, number)) {
        number  ;
    }
    printf("Number is %dn", number);
    return 0;
}
  

Затем вам нужно написать функции inarray() и issumof2() , чтобы они возвращали, true если условие выполнено для данного числа, false в противном случае. Они не должны искать число самостоятельно. Я оставляю это как упражнение для вас.