C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C цикли


Цикли дозволяють виконати одну дію безліч разів в залежності від певної умови. У мові Сі є наступні типи циклів:

  • for

  • while

  • do...while


цикл for

Цикл for має наступне формальне визначення:

for (вираз_1; вираз_2; вираз_3)
{
    // тіло цикла
}

вираз_1 виконується один раз при початку виконання циклу і являє установку початкових умов, як правило, це ініціалізація лічильників - спеціальних змінних, які використовуються для контролю за циклом.

вираз_2 представляє умову, при дотриманні якої виконується цикл. Як правило, в якості умови використовується операція порівняння, і якщо вона повертає нульове значення (тобто умова істинна - true ), то виконується тіло циклу, а потім обчислюється вираз_3 .

вираз_3 задає зміну параметрів циклу, нерідко тут відбувається збільшення лічильників циклу на одиницю.

Розглянемо стандартний цикл for :

#include <stdio.h>
int main(void)
{
    for (int i = 0; i < 9; i++)   // цикл з i від 0 до 8
    {
        printf("%d * %d = %d \n", i, i,  i * i);
    }
    return 0;
}

// RESULT:
/*
0 * 0 = 0
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
6 * 6 = 36
7 * 7 = 49
8 * 8 = 64
*/

Перша частина оголошення циклу - int i = 0 - створює і ініціалізує лічильник i . Лічильник необов'язково повинен представляти тип int . Це може бути і інший числовий тип, наприклад, float . І перед виконанням циклу його значення дорівнюватиме 0 . В даному випадку це те ж саме, що і оголошення змінної.

Друга частина - умова, при якій буде виконуватися цикл. В даному випадку цикл буде виконуватися, поки i не досягне 9 .

І третя частина - приріст лічильника на одиницю. Знову ж нам необов'язково збільшувати на одиницю. Можна зменшувати: i-- . Можна змінювати на інше значення: i + = 2 .

В результаті блок циклу спрацює 9 разів, поки значення i не стане рівним 9. І кожен раз це значення буде збільшуватися на 1.

int i = 1;
for ( ; i < 9 ; )
{
    printf("%d * %d = %d \n", i, i,  i * i);
    i++;                      // збільшення i на одиницю при кожній ітерації
}

Формально визначення циклу залишилося тим же, тільки тепер перший і третій вираз у визначенні циклу відсутні: for (; i < 9;) . Змінна-лічильник визначена і ініціалізована поза циклом, а її приріст відбувається в самому циклі.

Можна визначати вкладені цикли. Наприклад, виведемо таблицю множення:

#include <stdio.h>
int main(void)
{
    for (int i=1; i < 10; i++)
    {
        for(int j = 1; j < 10; j++)
        {
            printf("%d \t", i * j);
        }
        printf("\n");
    }
    return 0;
}

цикл do

У циклі do спочатку виконується код циклу, а потім відбувається перевірка умови в інструкції while . І поки ця умова істинна, тобто не дорівнює 0 , то цикл повторюється. наприклад:

#include <stdio.h>
int main(void)
{
    int i = 6;
    do
    {
        printf("%d", i);
        i--;
    }
    while (i > 0);
    return 0;
}

Тут код циклу спрацює 6 разів, поки i не стане рівним нулю. Але важливо відзначити, що цикл do гарантує хоча б одноразове виконання дій, навіть якщо умова в інструкції while не була true (істинна). Тобто ми можемо написати:

int i = -1;
do
{
    printf("%d", i);
    i--;
}
while (i > 0);

Хоча у нас змінна i менше 0, цикл все одно один раз виконається.


цикл while

На відміну від циклу do цикл while відразу перевіряє істинність деякої умови, і якщо умова істинна, тобто не дорівнює 0, то код циклу виконується:

#include <stdio.h>
int main(void)
{
    int i = 6;
    while (i > 0)
    {
        printf("%d \n", i);
        i--;
    }
    return 0;
}

Оператори continue і break

Іноді виникає необхідність вийти з циклу до його завершення. В цьому випадку можна скористатися оператором break . наприклад:

int i = 1;
for ( ; ; )     // безкінечний цикл
{
    printf("%d * %d = %d \n", i, i,  i * i);
    i++;
    if (i > 10) break;
}

Тут коли значення змінної i досягне 10 , здійснюється вихід з циклу за допомогою оператора break .

На відміну від оператора break , оператор continue робить перехід до наступної ітерації. Наприклад, нам треба порахувати суму тільки непарних чисел з деякого діапазону:

#include <stdio.h>
int main(void)
{
    int result = 0;
    for (int i=0; i<10; i++)
    {
        if (i % 2 == 0) continue;
        result +=i;
    }
    printf("result = %d", result);  // 25
    return 0;
}

Щоб дізнатися, чи число парне, ми отримуємо остачу ( % ) від цілочисельного ділення на 2 , і якщо він дорівнює 0, то за допомогою оператора continue переходимо до наступної ітерації циклу. А якщо число непарне, то складаємо його з іншими непарними числами.


Наш партнер:
beta test mp3 playlist downloader