Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Богатырев А. Весь текст 120.46 Kb

Руководство полного идиота по программированию на C

Предыдущая страница Следующая страница
1  2 3 4 5 6 7 8 9 10 11

     ЦИКЛ while ("до тех пор, пока истинно")

        while(условие)
                оператор;
        ...продолжение...

или

        while(условие){
                операторы;
                ...
        }
        ...продолжение...

                |
                V
                |
      +------>--+
      |         |
      |         V
   П  |     ---------------------
   о  |     | проверить УСЛОВИЕ |-------> если ложно (нуль)
   в  A     ---------------------             |
   т  |         |                             |
   о  |         V                             |
   р  |     если истинно (не нуль)            |
   и  |         |                             |
   т  |         V                             |
   ь  |     оператор                          V
      |         |                             |
      |         |                             |
      +-----<---+                             |
                                              |
                +-------<---------------------+
                |
                V
            продолжение

Пример:
        int x;

        x = 10;
        while(x > 0){
                printf("x=%d\n", x);
                x = x - 1;
        }
        printf("Конец.\n");
        printf("x стало равно %d.\n", x);       /* печатает 0 */

"Цикл" он потому, что его тело повторяется несколько раз.

Чтобы цикл окончился, оператор-тело цикла должен менять
какую-то переменную, от которой зависит истинность условия повторений.

     ОПЕРАТОРЫ "И, ИЛИ, НЕ"

Условия могут быть сложными.

        ЕСЛИ красный И вес < 10 ТО ...;
        ЕСЛИ красный ИЛИ синий  ТО ...;
        ЕСЛИ НЕ красный ТО ...;

На языке Си такие условия записываются так:

        if(условие1 && условие2) ...;           /* "И"   */
        if(условие1 || условие2) ...;           /* "ИЛИ" */
        if(! условие1)           ...;           /* "НЕ"  */

Например:

        if(4 < x && x <= 12) ...;

Было бы неправильно записать

        if(4 < x <= 12) ...;

ибо язык программирования Си НЕ ПОНИМАЕТ двойное сравнение!

Еще примеры:

        if(x < 3 || y > 4) ...;

        if( ! (x < 3 || y > 4)) ...;

     ЦИКЛ for ("для каждого")

Этот цикл является просто иной записью одного из вариантов цикла while.
Он служит обычно для выполнения опеределенного действия несколько раз,
не "пока истинно условие", а "выполнить N-раз".

У такого цикла есть "переменная цикла" или "счетчик повторений".

        int i;

        i = a;  /* начальная инициализация */

        while(i < b){

                тело_цикла;

                i += c; /* увеличение счетчика */
        }
        ...продолжение...

переписывается в виде

        int i;

        for(i=a; i < b; i += c)
                тело_цикла;

тело_цикла будет выполнено для значений i
        a
        a+c
        a+c+c
        ...

        пока i < b

В простейшем случае

        for(i=1; i <= N; i++)
                printf("i=%d\n", i);

i означает "номер повторения".

Такой цикл служит для повторения СХОЖИХ действий НЕСКОЛЬКО раз
с разным значением параметра.

     ОПЕРАТОР break ("вывалиться из цикла")

Оператор break заставляет прервать выполнение тела цикла
и сразу перейти к продолжению программы.

        while(условие1){
                операторы1;

                if(условие2)
                        break;  ------->----+
                                            |
                операторы2;                 |
        }                                   |
        ...продолжение...<--------<---------+

и

        for(i=0; условие1; i++){
                операторы1;

                if(условие2)
                        break;  ------->----+
                                            |
                операторы2;                 |
        }                                   |
        ...продолжение...<--------<---------+

Этот оператор позволяет организовывать дополнительные
точки выхода из цикла (при дополнительных условиях).

Пример:

        for(i=0; i < 20; i++){
                printf("i=%d\n", i);
                if(i == 7){
                        printf("break loop!\n");
                        break;          /* вывалиться из цикла */
                }
                printf("more\n");
        }
        printf("finished, i=%d\n", i);  /* печатает 7 */

В частности, с его помощью можно организовывать бесконечный цикл:

        for(;;){        /* заголовок бесконечного цикла */
                операторы1;

                if(условие2)
                        break;  ------->----+
                                            |
                операторы2;                 |
        }                                   |
        ...продолжение...<--------<---------+

Здесь в самом заголовке цикла НЕ ПРОВЕРЯЕТСЯ НИКАКИХ УСЛОВИЙ,
такой цикл продолжается бесконечно.
Условие продолжения считается всегда истинным.

Единственный способ выйти из него -
это сделать break (при каком-то условии) в теле цикла, что и написано.

Бесконечный цикл можно также организовать при помощи
        while(1){
                ...
        }

     ОПЕРАТОР ВЫВОДА (ПЕЧАТИ)

        printf("текст");

Печатает на экран текст.

        printf("текст\n");

Печатает на экран текст и переходит к новой строке.

        printf("слово1 слово2 ");
        printf("слово3\n");

печатает

слово1 слово2 слово3
и переходит на новую строку.

Если переход на новую строку не задан явно, символом \n,
то текст продолжает печататься в текущей строке.

        printf("%d", x);

Печатает в текстовом виде ЗНАЧЕНИЕ переменной x.
Специальная конструкция %d означает
"взять переменную из списка после запятой
 и напечатать ее значение в ивде целого числа".

        printf("икс равен %d - ого-го\n", x);

Печатает сначала текст

                икс равен

затем значение переменной x как целое число,
затем текст
                - ого-го

и переходит на новую строку (поскольку указан символ \n).

Этот оператор может печатать и несколько значений переменных:

        int x, y;

        x = 12; y = 15;
        printf("икс есть %d, игрек есть %d, все.\n", x, y);
                                                    ~~~~~~

Данный оператор работает так.
Строка "икс есть %d, игрек есть %d\n" называется ФОРМАТОМ.
Компьютер читает формат слева направо и печатает текст
до тех пор, пока не встретит символ %d.
Курсор изображен символом _

        икс есть _

Далее он берет ПЕРВУЮ переменную из списка ~~~~ и
печатает ее как целое число.

        икс есть 12_

далее он снова печатает текст пока не встретит %d

        икс есть 12, игрек есть _

Теперь он берет ВТОРУЮ переменную из списка и печатает ее:

        икс есть 12, игрек есть 15_

Снова печатает текст, включая перевод строки \n.
Как только строка формата кончилась, оператор printf завершен.

        икс есть 12, игрек есть 15, все.
        _

Печатать можно не только значения переменных, но и значения арифметических
выражений:

        printf("равно: %d\n", 12 + 3 * 5);

Контрольный вопрос, что печатается:

        int x, y, z;

        x = 13;
        y = 23;
        z = 34;

        printf("x=%d xx=%d\nzzz=%d\n", x, y - 1, z * 2 + 1);

Тут в формате есть ДВА перевода строки,
поэтому будет напечатано:

        x=13 xx=22
        zzz=69
        _

Заметьте, что перед тем как быть напечатанными,
выражения в списке после формата ВЫЧИСЛЯЮТСЯ.

Что напечатает

        printf("x=%d\n y=%d\n", x, y);

x=13
 y=23
_

Пробел перед y возник потому, что он СОДЕРЖИТСЯ
в строке формата после символа \n !!!
Будьте внимательны.

     ФУНКЦИИ

Функцией называется фрагмент программы,
в который передаются ПАРАМЕТРЫ,
и который ВОЗВРАЩАЕТ значение (или ничего).

Прелесть функции в том, что ее можно выполнить много раз
из разных точек программы.

Функция состоит из

        ОБЪЯВЛЕНИЯ      - описания того, как она что-то вычисляет
                          Объявление бывает ровно одно.

        ВЫЗОВОВ         - с конкретными значениями параметров,
                          что именно она должна на этот раз вычислить.
                          Вызовов может быть сколько угодно.

Объявление простейшей функции выглядит так:

        int func(int x){

                /* Один или несколько операторов,
                   завершающихся оператором return(нечто);
                 */

                return x+1;
        }

---------------------------------------------------------------------------

        int func(...

задает функцию с именем func
(имя выдумывает программист, как и имена переменных).

        int означает, что функция возвращает целое значение.
---------------------------------------------------------------------------

        ...(int x)...

задает список аргументов (или параметров) функции.
---------------------------------------------------------------------------

              ...){
              ...
        }

задает тело функции - некую последовательность объявлений
переменных и операторов.
---------------------------------------------------------------------------

                return выражение;

задает оператор выхода из функции в точку ее вызова с возвратом значения
выражения.
---------------------------------------------------------------------------

Покажем простой пример ВЫЗОВА этой функции:

        int y;
        ...
        y = func(5);            /* a */
        ...продолжение...       /* b */

Этот фрагмент работает следующим образом:

        y = func(5);

В этой точке мы
        1) "записываем на бумажке",
           что вызов произошел в такой-то строке, таком-то месте
           нашей программы.

        2) Смотрим на ОПРЕДЕЛЕНИЕ функции func.

            int func(int x){...

        Мы вызвали функцию как func(5).
        Это значит, что в теле функции x получает начальное значение 5.

        То есть ДЛЯ ДАННОГО ВЫЗОВА наша функция (ее тело) превращается в

                int x;

                x = 5;
                return x+1;

        3) x+1 есть 6.

           Далее должен выполниться оператор return.

           Он выполняется так:

           Мы "читаем с бумажки" - откуда была вызвана функция func,
           и смотрим на это место. Это было

                y = func(5);

           Вычеркиваем func(5) и заменяем его ЗНАЧЕНИЕМ выражения,
           вычисленного в операторе return;

                y = 6;

        4) Выполняем этот оператор и переходим к продолжению.

---------------------------------------------------------------------------

        int y, z, w;

        y = func(5);
        z = func(6);
        w = func(7) + func(8) + 1;

Превратится в

        y = 6;
        z = 7;
        w = 8 + 9 + 1;

При этом мы четыре раза "прыгнем" на определение функции func(),
пройдем все ее операторы с разными значениями параметра x
и вернемся обратно в точку вызова.

     ПРОГРАММА В ЦЕЛОМ

Программа в целом состоит из функций.
Одна из функций должна иметь имя main(),

        С ФУНКЦИИ main НАЧИНАЕТСЯ ВЫПОЛНЕНИЕ ПРОГРАММЫ.

        (на самом деле этому предшествует отведение и инициализация
         глобальных переменных; смотри последующие лекции).

Часто main() - единственная функция в программе.

---------------------------------------------------------------------------

Структура программы такова:

        #include       /* магическая строка */

        /* ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ (о них позже) */
        int a = 7;
        int b;          /* по умолчанию 0 */

        /* ФУНКЦИИ */
        f1(){....}
        f2(){....}

        /* НАЧАЛЬНАЯ (ГЛАВНАЯ) ФУНКЦИЯ */
        void main(){
                ...
        }
---------------------------------------------------------------------------
Предыдущая страница Следующая страница
1  2 3 4 5 6 7 8 9 10 11
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (6)

Реклама