Приветствую всех кто в теме и сразу к делу
вот собственно моя программа!
Она работает без ошибок, что уже хорошо, но мне никак уже третий день не удаётся понять сам смысл некоторых строк. . .По условию задачи нужно ввести число 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();
}
Другие языки программирования и технологии
Вопрос о работе программы на языке СИ. Каким будет ответ?
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
...
Еще раз подумай, что тебе требуется по задаче и проверь алгоритм.
(начало цикла 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
...
Еще раз подумай, что тебе требуется по задаче и проверь алгоритм.
Во-первых, прога не компилится (за "число" тебе надо по рукам дать) . Во-вторых, у тебя по-наркомански сделан выход из цикала. Замени "i = число + 1;" на break; и будет тебе счастье. По теме вопроса: при нахождении делителя происходит выход из цикла и перебор начинается опять с 2.
Примерно так:
60 / 2 = 30
30 / 2 = 15
15 / 2 = облом
15 / 3 = 5
5 / 2 = облом
...
5 / 5 = 1
Выход
Примерно так:
60 / 2 = 30
30 / 2 = 15
15 / 2 = облом
15 / 3 = 5
5 / 2 = облом
...
5 / 5 = 1
Выход
Похожие вопросы
- Помогите, пожалуйста, написать программу на языке Си
- Как настроить Python под Си? Как написать программу на языке Си в Python'е ?
- Как запретить ввод символов в программе на языке СИ++?
- подскажите как сделать программу на языке СИ(((
- не могу создать программу на языке "си"
- Пожалуйста, ктол может объяснитеб как написать программу на языке Си по этой задаче. С чего начать????
- помогите написать программу на языке Си: В одномерном массиве целых чисел заменить максимальное значение минимальным.
- Совет по программе на языке си (строки)
- надо написать код программы на языке си. помогите кто знает как!
- Программа на языке Си