программа на языке си для нахождения наибольшего делимого числа не работает

#c

#c

Вопрос:

Итак, я новичок в программировании на C. Цель этой программы — использовать функцию для нахождения наибольшего делимого числа. Должны быть заданы три числа, и ответом должно быть число, которое больше первого числа и меньше второго числа, и должно быть наибольшим числом между ними, которое можно разделить равномерно на третье число.

 #include <stdio.h>
#include <stdlib.h>

int my_function(int first, int second, int third) {
    int i, answer;

    for (i = second; i <= 0; i--) {
        if (i < first || i > third) {
            answer = 0;
            break;
        }
        if (i % third == 0 amp;amp; i != 0 amp;amp; i > first)
            answer = i;
    }
    return answer;
}

int main() {
    printf("enter number one:n");

    int one, two, three, final;
    scanf("%d", amp;one);

    printf("enter number twon");
    scanf("%d", amp;two);

    printf("enter number threen");
    scanf("%d", amp;three);

    final = my_function(one, two, three);

    printf("the number is %d", final );

    return 0;
}
 

Эта программа не работает. Может кто-нибудь помочь мне с моей ошибкой?

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

1. По крайней мере printf("the number is %dn", j); … Я не углублялся в ваш код. За исключением того, что final это недопустимый тип C.

2. Пожалуйста, сделайте отступ в коде и удалите ненужные пустые строки.

3. «эта программа не работает» => Пожалуйста, сообщите нам, чего вы ожидаете, и что вы получаете вместо этого. Каков ваш тестовый пример?

4. Для этого вам не нужен цикл. Используйте это наибольшее кратное a не больше, чем b a * (b / a) для положительных чисел.

Ответ №1:

Ваша функция не работает по нескольким причинам:

  • тест цикла всегда ложен, если second это положительное число.
  • тест i > third вызовет досрочный выход из цикла без уважительной причины.
  • когда вы найдете делимое число, вам следует выйти из цикла.

Вот модифицированная версия:

 #include <stdio.h>
#include <stdlib.h>

int my_function(int first, int second, int third) {
    int i;

    for (i = second - 1; i > first; i--) {
        if (i % third == 0)
            return i;
    }
    return 0;
}

int main() {
    int one = 0, two = 0, three = 0, final;

    printf("enter number one:n");
    scanf("%d", amp;one);

    printf("enter number twon");
    scanf("%d", amp;two);

    printf("enter number threen");
    scanf("%d", amp;three);

    final = my_function(one, two, three);

    printf("the number is %dn", final);

    return 0;
}
 

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

1. привет, спасибо за ваш ответ. причина финала не в виде клавиатуры, а в виде целочисленного имени.