Другие языки программирования и технологии

Вопрос о работе программы на языке СИ. Каким будет ответ?

Приветствую всех кто в теме и сразу к делу
вот собственно моя программа!

Она работает без ошибок, что уже хорошо, но мне никак уже третий день не удаётся понять сам смысл некоторых строк. . .По условию задачи нужно ввести число 60. И если просмотреть все циклы то становится понятным что первый ответ будет "2". Но никак не могу понять почему второй ответ будет тоже "2", ведь мы двойку уже один раз использовали в цикле for где i = 2, и я думал что следующее будет i = 3 т. к. i++. Также вообще не понятно почему в последней строчке "i" не меняется хотя по идее число = число/i = 60/2 = 30 тогда i = число + i = 30 + 1 = 31. Но "i" остаётся всё равно 2....вообще запутался. . Прошу вашей помощи.

Заранее благодарю за ответы.

#include <stdio.h>

main()

{

int число, i;

printf("Укажите одно положительное целое число: ");

scanf("%d",&число) ;

while(число>1)

{

for (i=2; i<=число; i++)

{

if(!(число%i))

{

printf("%d",i);

число = число/i;

i = число + 1;

}

}

}

getchar();

getchar();

}
Дмитрий
Дмитрий
3 942
a = 60

(начало цикла While) 60 > 1

(начало for)
1 проход:

2 меньше или равно 60
остатка от деления 60 на 2 нет
выводим на экран i (в данный момент i = 2)
а = 60/2 = 30
i = 30 + 1 = 31
(от цикла еще i++) i = 31 + 1 = 32

2 проход:

31 меньше или равно 60
есть остаток от деления 30 на 32
пропускаем

3 проход:

32 меньше или равно 60
есть остаток от деления 30 на 33
пропускаем

...(так до i = 60)

(конец for)

(следуем по циклу while) 30 > 1

(начало for)
1 проход:

2 меньше или равно 30
остатка от деления 30 на 2 нет

выводим на экран i (в данный момент i = 2)
а = 30/2 = 15
i = 15 + 1 = 16
(от цикла еще i++) i = 16 + 1 = 17

2 проход:

17 БОЛЬШЕ 15
(конец for)

(следуем по циклу while) 15 > 1
...

Еще раз подумай, что тебе требуется по задаче и проверь алгоритм.
Ayan Amangeldi
Ayan Amangeldi
2 222
Лучший ответ
Во-первых, прога не компилится (за "число" тебе надо по рукам дать) . Во-вторых, у тебя по-наркомански сделан выход из цикала. Замени "i = число + 1;" на break; и будет тебе счастье. По теме вопроса: при нахождении делителя происходит выход из цикла и перебор начинается опять с 2.

Примерно так:

60 / 2 = 30
30 / 2 = 15
15 / 2 = облом
15 / 3 = 5
5 / 2 = облом
...
5 / 5 = 1
Выход