Цитата(lyubov17 @ 5.11.2014, 21:05 ) | | Напишите, пожалуйста, как можно подробнее, комментарии к программам, чтобы пошагово понять, что к чему, и как работают эти программы. Заранее большое спасибо! |
Давайте попробуем с первой программой. Все остальные делаются аналогично.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | | #include <stdio.h> |
Включаем в текст программы заголовочный файл stdio.h. В заголовочных файлах объявляются константы и функции, которые используются в программе. В данном случае в stdio.h объявляются функции printf() и scanf(), которыми мы будем пользоваться. Так же мы в программе вызываем библиотечную функцию setlocale() и используем константу LC_ALL, но заголовочный файл locale.h, в котором они объявлены, мы в текст программы не включаем, что не позволит нам скомпилировать программу.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | | #include <iostream> |
Заголовочный файл iostream, который здесь используется вместо locale.h, предназначен для языка программирования C++ (а у нас, вроде, только C).
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | int main() { |
Выполнение скомпилированной программы начинается с функции main(). Это так называемая https://ru.wikipedia.org/wiki/%D0%A2%D0%BE%D1%87%D0%BA%D0%B0_%D0%B2%D1%85%D0%BE%D0%B4%D0%B0 в программу.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | | setlocale(LC_ALL,"russian"); |
Вызываем функцию setlocale(). Этот вызов позволит нам печатать на консоль по-русски.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | int x; printf("Введите число: "); scanf("%d",&x); |
Здесь мы объявляем переменную x. Затем выводим на консоль приглашение ввести значение для этой переменной, затем с помощью функции scanf считываем с консоли значение для этой переменной.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | | int i=1,sum = 0; |
Здесь мы объявляем переменные i и sum, и заодно задаем им начальные значения (инициализируем). i у нас будет служить пробным делителем числа x, а sum - суммой найденных делителей числа x.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | while( i < x ) { |
Перебираем в цикле все возможные делители для числа x в диапазоне от 1 до (x-1).
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | | if( x%i == 0 ) sum +=i; |
Если остаток от деления числа x на число i есть ноль (то есть число x делится на число i нацело), то тогда i является делителем числа x, и мы этот делитель добавляем к числу sum.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | i++; } |
Завершаем тело цикла увеличением значения предполагаемого делителя i на единицу, что и позволяет нам перебрать все разумные значения для предполагаемого делителя в диапазоне от 1 до (x-1).
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | if( sum == x ) printf("Число совершенное!\n"); else printf("Число не совершенное!\n"); |
Теперь, когда у нас есть сумма всех делителей (sum) числа x, мы можем сравнить её с самим числом x. Если значения совпадают, что печатаем на консоль, что число - совершенное. Если же нет, то сообщаем, что число не совершенное.
Цитата(lyubov17 @ 5.11.2014, 21:05 ) | | } |
Завершаем тело функции main(). Правда, было бы неплохо вернуть из функции какое-нибудь значение (обычно, это 0), ибо мы объявили main() как возвращающую знаковое целочисленное значение функцию. Это значение, кстати, будет являться кодом завершения (для всей) программы, но в C (не в C++) именно для функции main() (и никакой другой) разрешено не писать в конце, (хотя, конечно, лучше всё же этот оператор написать в явном виде).
ЗЫ Остальные программы - самостоятельно. ЗЗЫ Такое впечатление, что программа компилилась как C++-программа, а не C-программа. |