введите нечетные, четные, нулевые и отрицательные числа и посчитайте, используя цикл for и while в C без использования arrray

#c #loops

Вопрос:

Я столкнулся с некоторой проблемой во время программирования. Я хочу написать программу для различения четных чисел, нечетных чисел, нулевых значений и отрицательных чисел с помощью цикла while и for. 1-й вопрос : Однако, когда я попытаюсь запустить свою программу, последний введенный мной номер не будет засчитан. Я знаю, что это происходит из-за того, что мой o помещен в начало условия if, как я должен решить свою проблему? 2-й вопрос : Для частей цикла for на самом деле он может игнорировать эти отрицательные значения. Как я должен решить эту проблему, чтобы отрицательные числа также учитывались в цикле ? Могу я изменить числоgt;0 на число gt;

 #includelt;iostreamgt;  using namespace std;  #includelt;iostreamgt;  using namespace std;  int main () {  int num ,numbers = 1 ;  char answer = 'Y' ;  int o=0, e=0, z=0 ,n=0 ;  // o for odd numbers, e for even numbers, z for zero values, n for negative numbers   cout lt;lt; "Enter number" lt;lt; numbers lt;lt; ": " lt;lt; endl ;  cin gt;gt; num ;  for ( num = num ; num gt;0; num  )  while (answer == 'y' || answer == 'Y')  {  if (num % 2 == 0 amp;amp; num gt; 0)  {  e   ;  coutlt;lt; "The number of even numbers is :" lt;lt; e lt;lt; endl;   numbers    ;  coutlt;lt;"Please enter number" lt;lt; numbers lt;lt; endl ;  cin gt;gt; num ;  coutlt;lt;"If you wish to continue, Please enter y or Y to continue this program : "lt;lt; endl ;  cingt;gt; answer ;  }   else if (num % 2 == 1 amp;amp; num gt; 0)  {   o  ;   coutlt;lt; "The number of odd numbers is :" lt;lt; o lt;lt; endl;   numbers    ;  coutlt;lt;"Please enter number" lt;lt; numbers lt;lt; endl ;  cin gt;gt; num;  coutlt;lt;"If you wish to continue, Please enter y or Y to continue this program : "lt;lt; endl ;  cingt;gt; answer ;  }  else if (num == 0)  {   z   ;  coutlt;lt; "The total of 0 is :" lt;lt; z lt;lt; endl;   numbers    ;  coutlt;lt;"Please enter number" lt;lt; numbers lt;lt; endl ;  cin gt;gt; num;  coutlt;lt;"If you wish to continue, Please enter y or Y to continue this program : "lt;lt; endl ;  cingt;gt; answer ;  }     }      cout lt;lt; "The total even numbers is :" lt;lt; e lt;lt; endl;  cout lt;lt; "The total odd numbers is :" lt;lt; o lt;lt; endl ;  cout lt;lt; "The total negative numbers is :" lt;lt; n lt;lt; endl ;   cout lt;lt; "The total zero number is:" lt;lt; z lt;lt; endl;   return 0;  }  

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

1. Чтобы обрабатывать отрицательные числа, вам нужно написать некоторый код для обработки отрицательных чисел. У вас есть два обработчика для положительных чисел и один для нуля.

Ответ №1:

Эта строка в main() действительно озадачивает:

 // ... for ( num = num ; num gt;0; num  ) while (answer == 'y' || answer == 'Y')   

Оператор for(;;) является вашим основным циклом. Оператор while будет выполняться до тех пор, пока num является положительным.

Давайте подробно рассмотрим это утверждение для() :

 for (num = num; // num = num ??? this statement does nothing.  num gt; 0; // the while statement (and the contents of the whule() loop block)   // will only execute if num is gt; 0.    num) // if num was gt; 0 then this loop will run until num overflows...  

Удаление оператора for(;;) значительно улучшит работу вашей программы.

Ответ №2:

Ваш o не имеет к этому никакого отношения.
(Возможно, вы были настолько убеждены в том, что это проблема, что вам не пришло в голову искать ее в другом месте. Это случается со всеми.)

Проблема в том, что ваша последовательность такова:

  1. Проверьте последний введенный номер и распечатайте результат
  2. Попросите пользователя ввести номер, но ничего с ним не делайте
  3. Спросите пользователя, хотят ли они продолжить
    • Если они хотят продолжить, повторите пункт 1
    • Если они этого не сделают, перестаньте считать

И поскольку вы прекращаете подсчет, если пользователь не хочет продолжать, последнее число, похоже, исчезло. Исправление этого оставлено в качестве упражнения.
(Подумайте более тщательно о том, в каком порядке вам нужно что-то делать.)

Обработка отрицательных чисел требует, чтобы вы написали для этого некоторый код — вы обрабатываете два случая положительных чисел и один для нуля, но вы, должно быть, забыли о негативах.
Исправление этого также оставлено в качестве упражнения.