написать программу для отображения нечетных и четных чисел - PullRequest
0 голосов
/ 31 декабря 2018

я пытаюсь написать этот код, но я не могу задать вопрос: используя цикл for, напишите программу для получения входных данных для любых 5 чисел и отображения суммы четных нечетных чисел.вывод должен быть таким, как показано ниже

---------------------------------
Enter any 5 numbers: 0 1 3 2 11
0 is not even number.
total exists even = 1
total exist odd = 3
--------------------------------

, и вот что я сделал:

    #include<iostream>
using namespace std;
int main()
{
    int i,j=0,c=0;

    for(i=0;i<5;i++)
    {
        cout<<"enter 5 numbers "<<i ;
        cin>>i;
    }
        if(i==0)
        {
        cout<< "0 is not even number"<<endl;
        }
        else if(i%2==0)
        {j++;}
        else if(i%2 !=0)
        {c++;}


    cout<<"total exists even : "<<j<<endl;
    cout<<"total exists ODD : "<<c<<endl;   
return 0;
}

Ответы [ 5 ]

0 голосов
/ 31 декабря 2018

Шаг за шагом просматривая ваш код (обратите внимание на измененное форматирование!):

#include<iostream>
using namespace std; // usually considered bad practice
int main()
{
    int i, j=0, c=0;

    for(i = 0; i < 5; i++)
    {
        cout << "enter 5 numbers " << i;
        cin >> i; // you are overwriting your loop variable!!!
                  // how do you think your program will go on if you enter
                  // e. g. 7 right in the first loop run?
                  // additionally, you did not check the stream state afterwards
                  // if user entered something invalid (e. g. S), cin sets the
                  // fail flag and stops further reading - attemps doing so yield
                  // 0 (since C++11) or don't modify the variable (before C++11)
    }

    // this section is outside the loop already!
    // so you are only checking the number you read in your loop in the very last run
    if(i == 0)
    {
        cout << "0 is not even number" << endl;
    }
    else if(i % 2 == 0)
    {
        j++;
    }
    // this check is redundant: it is the complement to your previous
    // check, so if the first went wrong, the second cannot be false any more
    // (compare: you did not check for i != 0 either before doing the modulo check)
    else /* if(i % 2 != 0) */
    {
        c++;
    }

    cout << "total exists even: " << j << endl;
    cout << "total exists odd:  " << c << endl;   
    return 0;
}

Измененный код:

#include<iostream>

int main()
{
    // several serious coding guide lines mandate: only one variable per line:
    unsigned int odd = 0;
    unsigned int even = 0;
    // I used unsigned int here, negative counts are just meaningless...
    // I'm consequent in these matters, but range of (signed) int suffices anyway,
    // so you can use either one...

    // C++ is not C (prior to C99) - keep scope of variables as local as possible
    // (loop counter declared within for header, local variable within body)
    for(unsigned int i = 0; i < 5u; i++) // (unsigned? see above)
    {
        std::cout << "enter 5 numbers (" << i << "): ";
        int n; // separate variable!
        if(!(std::cin >> n))
        {
            // some appropriate error handling!!! e. g.:
            std::cout << "invalid value entered";
            return -1;
        }

        // this now resides INSIDE the for loop
        if(n == 0)
        {
            cout << "0 is not even number" << endl;
        }
        else
        {
            // this is an ALTERNATIVE calculation

            n %= 2;    // gets either 0 or 1...
            odd += n;
            even += 1 - n;

            // (I personally prefer avoiding conditional branches but you *can*,
            //  of course, stay with the if/else you had before, too...
            //  - just don't check the complement as shown above)
        }
    }

    cout << "total exists even: " << even << endl;
    cout << "total exists odd:  " << odd  << endl;   
    return 0;
}

О неподписанных: иногда они имеют преимущество:

void f(int n)          { /* need to check for both 0 <= n && n <= max! */ }
void f(unsigned int n) { /* n <= max suffices */ }

но иногда нужно обращаться с ними осторожно:

for(unsigned int n = 7; n >= 0; --n) { /* ... */ } // endless loop!!!
for(unsigned int n = 7; n-- >= 0;)   { /* ... */ } // correct variant

(первый работал бы с подписанным int, но это не ошибкабеззнакового типа , но ошибка программиста, который не выбрал правильный тип для того, что он или она намеревался ...).

Просто для полноты: если предположить, что мы можем отбросить математически неверныйутверждение, что ноль не был четным, мы могли бы сделать его еще проще:

unsigned int constexpr LoopRuns = 5u;

int main()
{
    unsigned int odd = 0; // just one single variable...

    for(unsigned int i = 0; i < LoopRuns; i++)
    {
        std::cout << "enter 5 numbers (" << i << "): ";
        int n;
        if(!(std::cin >> n))
        { /* ... */ }

        odd += n %= 2;
    }

    // one single difference instead of five additions...
    cout << "total exists even: " << LoopRuns - odd  << endl;
    cout << "total exists odd:  " << odd             << endl;   
    return 0;
}
0 голосов
/ 31 декабря 2018

Это должен быть ваш код: вы берете массив целых чисел, в котором храните входное значение.Отправляйтесь на https://www.tutorialspoint.com/cprogramming/c_arrays.htm, чтобы узнать больше о наших массивах ..

#include<iostream>
using namespace std;
int main(){
int i,j=0,c=0;
int numbers[5];
for(i=0;i<5;i++){
    cout<<"enter 5 numbers "<<i ;
    cin>>numbers[i];
}
for(i=0;i<5;++i){
    if(numbers[i]==0)
    {
    cout<< "0 is not even number"<<endl;
    }
    else if(numbers[i]%2==0)
    {j++;}
    else if(numbers[i]%2 !=0)
    {c++;}
}

cout<<"total exists even : "<<j<<endl;
cout<<"total exists ODD : "<<c<<endl;   
return 0;
}
0 голосов
/ 31 декабря 2018
using namespace std;

int main()
{
    int * Array = new int[5];
    int even(0), odd(0);    
    for(int i = 0; i < 5; i++)
    {
        cout<<"enter "<< i+1 << "-th number: " << flush;
        cin>>Array[i];
        if(!Array[i]) 
        {
        cout<< "0 is not even number... input again"<<endl;
        i = i-1;
        }
        else
        {
            if(Array[i]&1) odd++;
            else even++;
        }
    }
    cout<<"total exists even : "<<even<<endl;
    cout<<"total exists ODD : "<<odd<<endl;   
    cin.get(); cin.get();
    delete[] Array;
    return 0;
}
0 голосов
/ 31 декабря 2018

Во-первых, 0 - это четное число, и ваш код должен иметь правильный отступ, просто чтобы вы могли видеть, что вы действительно читаете ввод в одно целое число, которое также управляет циклом, иваш оператор if находится вне цикла for (несмотря на вводящий в заблуждение отступ. Вот простой пример реализации, но вы можете (и должны) исправить ошибки, которые я указал в вашем собственном коде:

#include <iostream>
int main() {
  std::cout << "Enter 5 numbers\n";
  int cnt(5);
  int n, odd(0), even(0);
  while(cnt-- && (std::cin >> n))
    n % 2 ? ++odd : ++even;

  std::cout << odd << " odd, "
  << even << " even numbers" << std::endl;
  return 0;
}

Обратите внимание на декремент и факт && коротких замыканий .

0 голосов
/ 31 декабря 2018

Эта программа поможет вам.

#include <iostream>
int main () {
    int num[5], even = 0, odd = 0;
    bool hasZero = false;
    std::cout << "Enter 5 numbers:"
    for (int i = 0; i < 5; i++) {
        std::cin >>  num[i];
    }

    for (int i = 0; i < 5; i++) {
        if (num[i] == 0) { // Checking if the current number is zero
            hasZero = true;
        } else if (num[i] % 2 == 0 ) { // Checking if the current number is even
            ++even;
        } else { // If the number is not even, then it must be odd
            ++odd;
        }
    }

    if (hasZero) { // If the input has zero then print following statement
        std::cout << "0 is not an even number" << std::endl;
    }

    std::cout << "Total even count: " << even << std::endl;
    std::cout << "Total odd count: " << odd << std::endl;

    return 0;
}

Если вы не можете понять какую-либо строку, тогда вам будет очень приятно в разделе комментариев ниже;)


Проблема с вашим кодом:

  • В операторе for вы используете одну и ту же переменную для счетчика и ввода, т. Е. i.Это не позволит ни петле for работать должным образом, ни вводу быть захваченным должным образом.

  • Вы перезаписываете переменную i каждый раз, когда принимаете какой-либо ввод, затем только последнийвход ( из 5 входов ) будет сохранен в памяти.

  • Вы просто проверяете последний вход, используя if statement, потому что циклуже закончился раньше.


Если вы хотите, чтобы ваш код работал правильно, то эти изменения сделают эту работу:

#include<iostream>
using namespace std;
int main()
{
    int num,j=0,c=0;  // Change the name to num here, because i will be used later as a counter variable.

    for(int i=0;i<5;i++)
    {
        cout<<"enter 5 numbers "<<i ;
        cin>>num;

        // Don't end for loop here, this will not allow every input to be checked.

        if(num==0)
        {
            cout<< "0 is not even number"<<endl;
        }
        else if(num%2==0)
        {
            j++;
        }
        else if(num%2 !=0)  // Or just add a *else* here instead of *else if*, they will work exactly the same here.
        {
            c++;
        }

    } // End of for loop

    cout<<"total exists even : "<<j<<endl;
    cout<<"total exists ODD : "<<c<<endl;   
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...