// - "Talk to me like I'm a 3 year old!" Programming Lessons -
//
// $Author: Ben Humphrey digiben@gametutorials.com
//
// $Program: Counting
//
// $Description: Prints a given number range in a for loop
//
// $Date: 5/18/00
//
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
#include <stdio.h>
void main() // Начало нашей программы.
{
int min=0, max=0, i=0;
// Мы инициализируем 3 целочисленные переменные, чтобы хранить в них
// границы диапазона. Мы устанавливаем их равными нулю, иначе в них
// будут какие-нибудь сумасшедшие числа, например -858993460. Мы могли бы
// также написать:
// int min=0;
// int max=0;
// int i=0;
// Это делает то же самое, просто такая запись более подробна.
// Теперь мы напечатаем приглашение пользователю ввести число - нижнюю границу
printf("Input your first number to count from: ");
// "Введите число, с которого следует начать счет"
// Затем мы ждем до тех пор, пока пользователь не нажмет <enter> и читаем
// то, что введено, затем сохраняем это в переменной "min".
// Мы используем "%d" потому что это значит, что мы читаем целое число.
scanf("%d", &min);
// Видите знак "&"? Это значит, что мы помещаем то, что введено
// по адресу переменной в память.
// Вот как это работает, это довольно сложно. Сначала переменная создается,
// и когда мы говорим "создается", это значит, мы сообщаем windows что нам
// нужно определенное количество памяти системы.
// Когда windows реагирует на это, она дает нам адрес ячейки памяти,
// в которой хранится информация этой переменной.
// Всегда желательно использовать как можно меньше памяти. Для небольших
// программ, вроде нашей, это не существенно. Но когда у вас будут ОГРОМНЫЕ
// проекты, это ОЧЕНЬ важно. Программы будут работать быстрее. Поверьте мне.
// Итак, как правило мы используем НАИМЕНЬШЕЕ число переменных, для
// того, чтобы сэкономить память.
// Хорошего программиста можно определить по его программам: они работают
// быстро и наиболее эффективно. Каждый старается достичь этого. Совершенству
// нет предела.
// А теперь мы выводим сообщение и просим ввести число - верхнюю границу.
printf("Input your last number to count to: ");
// "Введите число, до которого нужно считать:"
// Затем мы читаем это число.
scanf("%d", &max);
// Здесь начинается цикл:
for (i=min; i <= max; i++)
// Он называется "цикл For". Вы будете очень часто его использовать.
{
printf("%d\n", i);
}
// Вот что он делает. Он берет стартовое значение "i=min", где "i"
// используется как счетчик.
// Теперь "i" равно min, например если мы ввели 10, то было бы то же самое,
// если бы мы написали "i=10", но мы не знаем КАКОЕ будет число, поэтому
// мы сохраняем его в переменной min.
// "i <= max" означает "не выходить из цикла до тех пор, пока это условие
// не станет ложным.
// В данном случае, "не выходить из цикла, пока i не станет больше чем max"
// Предположим, max равно 15. Цикл прервется когда i будет равно 16 или больше.
// Вы наверно подумали, каким образом i может стать равным 16 или больше?
// "i" равно "min" (например 10). Следующий параметр, передаваемый в цикл "for"
// это то место, где мы говорим что происходит с "i"
// "i++" говорит компилятору прибавлять 1 к "i" каждый раз при выполнении
// цикла. Это все равно что написать: "i = i + 1", просто так короче.
// Итак, вот как записывается заголовок цикла For:
// for(начальное значение, условие выхода, действие, которое повторяется)
// Вы также увидите, что у нас нет ";" после цикла "for" ...
// Если мы поставим после него точку с запятой, цикл никогда не запустится.
// Это потому что ";" говорит, что мы закончили с этой строкой, мы же на
// самом деле еще НЕТ... Никогда не ставьте ";" после всего, за чем идет "{".
// Посмотрите на "void main()" ..
// Мы ставим "{" чтобы сказать, что все, что идет после "{", включается в цикл.
// "Printf" работает также как и "scanf()", только вместо чтения мы печатаем и
// переходим на следующую строку с помощью "\n"
// В данном случае, мы используем "%d" чтобы вывести на печать число, в данном
// случае это "i" , как мы видим из следующего параметра.
// Все после "}" находится за пределами цикла,
// Вам непонятно что делает цикл? Если да, то давайте пройдем по циклу:
// Рассмотрим наш пример, где min = 10 и max = 15. Подставим эти значения.
// for (i = 10, 10 <= 15, 10 + 1)
// {
// printf("%d\n", 10);
// }
// Это первое выполнение цикла, когда цикл доходит до "}", выполняется
// третий параметр - "i++". Теперь, i = 11, верно? Мы прибавили 1 к i
// которое было равно 10.
// Компилятор никогда не возвращается к первому параметру "i=min".
// Он нужен просто для того, чтобы начать с "i".
// Итак, после первого выполнения цикла и добавления 1 к "i",
// компилятор проверяет условие в середине, чтобы узнать, следует ли
// продолжать цикл. Итак:
// "11 <= 15" Если это истинно (TRUE), цикл выполняется снова.
// Мы печатаем 11, затем проверяем 12 <= 15, затем печатаем 12, и т.д...
// до тех пор, пока мы не напечатаем "15".
// После этого выполнения цикла, 15 увеличивается на 1. i = 16
// "16 <= 15" Это ложно (FALSE), поэтому программа выходит
// из цикла за пределы "}". Так как в программе больше ничего нет,
// она заканчивается.
} // Мы заканчиваем функцию "main()" и нашу программу
// Мы только что создали наш первый цикл for. Если ввести 10 и 15, вот как выглядит выполнение программы:
// Input your first number to count from: <введем 10 и нажмем ENTER>
// Input your last number to count to: <введем 15 и нажмем ENTER>
// 10
// 11
// 12
// 13
// 14
// 15
// Press any key to continue
// © 2001 GameTutorials
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
|