Оператор if в цикле C for для уменьшения на переменные величины

#c #for-loop

#c #for-цикл

Вопрос:

Я не уверен, почему, но программа прекращает уменьшение при Number = -12.75. Программа должна выполняться до тех пор, пока число = -50.0.

 #include <iostream>

// create variables to be used in the loops
float Number = 50.0; // starting Number
int Counter1 = 0; // counter for .25 decrements
int Counter2 = 0; // counter for 1 decrements

std::cout << 'n' << Number << 'n';
// loop to decrement Number down from 50.0 to -50.0
for (int i = 50; i >= -50; --i)
{
    // if statement to determine which loop to use
    if ((Counter1   Counter2) % 2 == 0)
    {
        Number = Number - 0.25;
        std::cout << Number << 'n';
          Counter1;
    }
    else
    {
        Number = Number - 1.0;
        std::cout << Number << 'n';
          Counter2;
    }
} 
   int TotalCounter = Counter1   Counter2;
   std::cout << "nCombined trips through loops: " << TotalCounter << 'n';
  

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

1. Почему вы ожидаете, что Number значение достигнет -50? Результат -12,75 выглядит правильным.

2. Вероятно, вы захотите внимательно перечитать свой код. Ваш цикл выполняется 100 раз, и каждый 2-й раз он теряет 1

3. Вы проверяете, если i>=-50 , не Number . Если вы хотите, чтобы цикл выполнялся до Number значения -50, просто измените условие

4. @Tas да, это правильно. Я использовал общее количество счетчиков, чтобы, когда они равны 0 или четны, вычиталось -.25 или -1, когда нечетно.

5. @cigien цель состоит в том, чтобы достичь -50

Ответ №1:

Если ваша цель состоит в том, чтобы остановиться, когда Number достигнет -50, то вам следует изменить условие, при котором цикл for должен останавливаться. Это должно сработать:

 #include <iostream>

// create variables to be used in the loops
float Number = 50.0; // starting Number
int Counter1 = 0; // counter for .25 decrements
int Counter2 = 0; // counter for 1 decrements

std::cout << 'n' << Number << 'n';
// loop to decrement Number down from 50.0 to -50.0
for (int i = 50; Number >= -50; --i)
{
    // if statement to determine which loop to use
    if ((Counter1   Counter2) % 2 == 0)
    {
        Number = Number - 0.25;
        std::cout << Number << 'n';
          Counter1;
    }
    else
    {
        Number = Number - 1.0;
        std::cout << Number << 'n';
          Counter2;
    }
} 
   int TotalCounter = Counter1   Counter2;
   std::cout << "nCombined trips through loops: " << TotalCounter << 'n';
  

Ответ №2:

для получения правильного результата вы должны изменить условие цикла for, которое вы использовали i<=-50.Вместо этого используйте цикл while как: » while (число>-50) «, потому что для достижения числа до -50 требуется больше итераций, чем 101 итерация, которую вы вводите в цикл for. надеюсь, вы поняли это.