Почему во вложенном цикле после 4% 4 == 0 программа не печатает 4? - PullRequest
0 голосов
/ 05 июля 2019

Программа отображает простые числа от 1 до 10 и работает нормально. Но почему, когда мне становится 4, а j становится 4 - он не уходит внутрь, если условие 4% 4 == 0 и 4 не отображается?

#include <stdio.h>
int main()
{
    int i,j,k = 1;

 for(i=2;i<=10;i++)
    {
      k=0;
        for(j=2;j<=i;j++)
        {
            if(i%j==0)
            k++;
        }
        if(k==1)
        printf("%d\n",i);
    }


    return 0;
}

Ответы [ 2 ]

3 голосов
/ 05 июля 2019

Когда i = 4 цикл j начинается с j = 2 и 4%2 == 0, поэтому k устанавливается на 1. Когда после 2 циклов j равен 4, 4%4 == 0 снова и k равенувеличивается до 2. На выходе цикла k равно 2, поэтому k==1 ложно, поэтому printf никогда не выполняется.

0 голосов
/ 05 июля 2019

Когда я редактировал ваш код, чтобы показать значение k для каждого i, я получил 2 для i = 4, что означает один раз для 2 и второй раз для 4. Таким образом, это означает 4% 4 == 0 и 4% 2 == 0 оценивается как истинное.

#include <stdio.h>
int main()
{
    int i,j,k = 1;

 for(i=2;i<=100;i++)
    {
      k=0;
        for(j=2;j<=i;j++)
        {
            if(i%j==0)
            k++;
        }

        printf("%d -- %d\n",i,k);
}

    return 0;
}

Вывод, показывающий значение k для каждого i ::

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...