Вступ
У цьому семінарі розглянуто основи взаємодії з командним рядком Linux і основні конструкції мови С: типи даних, оператори (арифметичні та логічні), умовні оператори (if/else, switch, тернарний оператор), цикли (while, do/while, for).
Командний рядок Linux
У курсі використовується спеціальна віртуальна лабораторія – віртуальна машина, на якій встановлено ОС Linux та всі необхідні для курсу програми. Вигляд віртуальної лабораторії зображено на рисунку 1.1.

Основні команди терміналу
-
ls : відобразити вміст папки (показати список файлів і папок)

- ls –l : відобразити вміст папки і додаткову інформацію
- ls –a : відобразити також приховані файли.
Перший стовпчик – це інформація про дозволи для файлу (дозвіл на читання, запис і т. ін.)

Червоним прямокутником виділено «.» (поточна папка) і «..» (папка на рівень вище).


-
cd : перейти в іншу папку (без параметрів – у домашню папку, що позначається тильдою «~»)

-
cd .. : перейти в попередню папку (на рівень вище)

-
cd [PATH] : перейти у папку за шляхом [PATH]

-
-
clear : очистити екран терміналу
-
mkdir [DIRECTORY_NAME] : створити нову папку із назвою [DIRECTORY_NAME]

-
gedit [FILE_NAME] : відкрити у текстовому редакторі файл [FILE_NAME]
Створимо файл hi.txt, напишемо у ньому нашу першу програму (вона виводитиме на екран слово «Hi!»)



-
mv [FILE_NAME] [DIRECTORY_PATH] : перемістити файл із назвою [FILE_NAME] у папку за шляхом [DIRECTORY_PATH]

Також цю команду можна використовувати для перейменування файла, якщо замість [DIRECTORY_PATH] просто вказати нову назву файла:

-
make [PROGRAM_NAME] : Скомпілювати програму і створити виконуваний файл із іменем [PROGRAM_NAME]


-
./[PROGRAM_NAME] : запустити програму [PROGRAM_NAME]

-
cp [FILE_NAME] [NEW_FILE_NAME] : скопіювати файл із назвою [FILE_NAME], надавши копіїї ім’я [NEW_FILE_NAME]


Вправа: створити нову папку, hi_dir, і перемістити всі файли в цю нову папку:

-
rm [FILE] : видаляє файл із іменем [FILE], запитуючи підтвердження.

-
rm –f [FILE] : видаляє файл без підтвердження.

Можна побачити, що файлів hi та hi.c, які раніше існували, тепер немає.
-
rm –rf [DIRECTORY] : видаляє папку [DIRECTORY] та все, що в ній знаходиться.

Команда ls нічого не вивела – отже, папка hi_dir більше не існує.

-
-
CTRL + C : перервати виконання програми (наприклад, якщо вона зависла або ви хочете її вимкнути)
Всі ключі в команд можна комбінувати. Наприклад, можна ввести ls –la, щоб вивести дозволи для прихованих файлів:

Типи даних
|
Тип |
Що це? |
Приклад даних |
Розмір (байт) |
|
int |
Цілі числа |
0; 1; 2; -3; 4; 10254 |
4 |
|
float |
Дробові числа |
1.5; 5.0; 123.4567 |
4 |
|
double |
Дробові числа |
1.5; 5.0; 123.45678932 |
8 |
|
long long |
Довгі цілі |
0; 1; 2; |
8 |
|
char |
Символ |
'A'; 'B'; 'x'; '@' |
1 |
|
short |
Короткі цілі |
-124; 0; 1; 125 |
2 |
|
string |
Рядки символів |
"Hi"; "This is fine" |
4 |
|
bool |
Істина чи хибність |
true; false |
1 |
Знати розмір типу даних може бути корисно, щоб переміщуватися по наборах однотипних даних.
Рядки string записуються в подвійних лапках (наприкалад, "Hi"), а символи char – в одинарних (наприклад, 'B'). Різниця полягає в тому, що у рядку string можна зберігати багато символів (хоча можна зробити й рядок з одного символа, наприклад, "H", або пустий рядок, ""), а символ char – це завжди лише один символ.
Основні арифметичні оператори
Порядок пріоритету операцій – такий самий, як в математиці:
|
Операція |
Символ |
Приклад |
Коли повертає значення true (істина) |
|
Рівність |
== |
a == b |
Значення а і b однакові |
|
Не дорівнює |
!= |
a != b |
Значення a i b різні |
|
Менше |
< |
a < b |
Значення a менше ніж b |
|
Менше або рівне |
<= |
a <= b |
Значення a менше або рівне b |
|
Більше |
> |
a > b |
Значення a більше ніж b |
|
Більше або рівне |
>= |
a >= b |
Значення a більше або рівне b |
|
Логічне «І» |
&& |
a && b |
Коли a – true, b – true. |
|
Логічне «АБО» |
|| |
a || b |
Коли або а – true, або b – true. |
- Спочатку обчислюються вирази в дужках;
- Потім – множення та ділення;
- Додавання і віднімання.
Для логічних І та АБО a i b повинні мати тип boolean, або бути логічними виразами. Тобто з допомогою логічного І можна, наприклад, об’єднати умови, щоб перевірити, чи значення якоїсь зміннох x лежить в діапазоні від 5 до 15:
(x > 5) && (x < 15)
Умовні оператори
Умовні оператори перевіряють умову, і виконують дії, якщо ця умова – істинна. Умова – це логічний вираз.
Оператор if перевіряє умову, і виконує все, що описано між фігурними дужками:
if (умова) { //Зробити щось, якщо умова істинна }
Оператор if/else перевіряє умову, і виконує одні дії, якщо умова істинна, якщо ж хибна – то інші дії.
if (умова) { //Зробити щось, якщо умова істинна } else { //Зробити щось, якщо умова хибна }
Приклад: якщо час менше 12 години, вивести «Доброго ранку», інакше (else) – вивести «Доброго дня».
if (time < 12) { printf("Доброго ранку!\n"); } else { printf("Доброго дня!\n"); }
В мові С існує оператор вибору (switch). Він має такий вигляд:
switch (n) { case константа1: // виконати, якщо n дорівнює константі1 break; case константа2: // виконати, якщо n дорівнює константі2 break; ... default: // виконати, якщо n не дорівнює жодній із вказаних констант. break; }
Приклад: якщо n = 50, вивести "CS50 is Introduction to Computer Science I", якщо n = 51, вивести "CS51 is Introduction to Computer Science II", інакше – вивести "Sorry, I'm not familiar with that class!"
switch (n) { case 50: printf("CS50 is Introduction to Computer Science I\n"); break; case 51: printf("CS51 is Introduction to Computer Science II\n"); break; default: printf("Sorry, I'm not familiar with that class!\n"); break; }
Без оператора break програма не буде зупинятися, а переходитиме до наступної умови.
Також є тернарний оператор. Загальний вигляд:
condition ? (виконати якщо умова істинна) : (виконати якщо умова хибна);
Наприклад:
string professor = (class_num == 50) ? "David Malan" : "not David Malan";
Цикли
Цикл while спершу перевіряє умову, а потім виконує дії, поки умова істинна:
while (умова) { // виконувати поки умова істинна }
Цикл do/while виконує дію, потім перевіряє умову. Якщо умова істинна, то повторює дію, знову перевіряє умову і так далі:
do { // виконувати поки умова істинна } while (умова);
Цикл do/while, на відміну від while, обов’язково виконується хоча б один раз, навіть якщо умова хибна.
Цикл for повторює дію певну кількість разів.
for (int dwarves = 0; dwarves < 7; dwarves++) { printf("I'm here to help you, Snow White!\n"); }
Цикли можна вкладати один в одний:
for (int row = 0; row < 3; row++) { for (int column = 0; column < 4; column++) { printf("x"); } printf("\n"); }