Структура програми

Операції

Типи даних

Для представлення різних даних використовуються:

Тип Позначення Розмір комірок Приклад
Цілі числа int 2 байта
Дійсні числа double 8 байт 34.032
Символ char 1 байт ‘A’ або 18

Є також інші типи: вказівники, масив, рядок, структура. Тип даних обирається в залежності від даних, що обробляється у програмі.

Самостійно.Які типи даних використовувати:

1. Кількість студентів у навчальної групі?

2. Зріст людини?

3. Кількість зареєстрованих злочинів?

4. Відсоток злочинів, що розкрито по гарячих слідах?

5. Літери алфавіту?

Данні в програмах представлені у вигляді:

— Змінних – можуть змінювати значення; доступні операції читання та запису;

— Констант – не можуть змінювати значення; доступна тільки операція читання.

Операція читання змінної або константи означає отримання значення, що зберігається у відповідної комірці пам’яті.

Операція запису означає встановлення значення у відповідну комірку пам’яті.

Перед використанням змінні та константи треба об’явити, а для констант – задати значення = ініціалізувати (ця операція доступна також для змінних), наприклад:

int A; /* об’ява */

const int B = 25; /* об’ява та ініціалізація */

int C = 12; /* об’ява та ініціалізація */

При об’яві змінної чи константи, виконується виділення комірок пам’яті для збереження даних.

Ім’я змінної або константи задається латинськими символами та цифрами (не на першої позиції). Заборонено використання пробілів у імені та ключових слів мови програмування як імені. Імена є чутливими до регістру, тобто А та а є різними змінними.

Самостійно. Вкажіть вірні та помилкові імена змінних:

1. student 2. zareestrovano zlochiniv 3. kilkist_prestupleniy 4. 12_stuliev 5. prizviche 6. const 7. змінна1 8. variable1

 

Для обробки даних у мовах програмування використовуються операції. Порядок виконання операцій називається пріоритетом. Операції мови С у порядку їх пріоритету наведено в таблиці 3.

Таблиця 3. Пріоритет операцій у С.

0.   (), [] (a + b) * 2
1. Унарні R->L !, ++, -- a++
2. Арифметичні *, /, % a * 6
3. Арифметичні +, - a + 5
4. Порівняння <, <=, >=, > a > b
5. Порівняння ==, != a == b
6. Присвоєння R->L =, +=, -= a = b + 4

Операції у С звичайно виконуються зліва на право. Операції, що виконуються у зворотному напрямку (справа наліво), помічені у таблиці так: R->L. Наприклад, вираз d = a + b + c виконується так:

1. Виконується операція додавання: a + b.

2. До результату попередньої операції додається значення змінної c.

3. Виконується операція присвоєння, у змінну
d записується результат попередньої операції.

Шаблон типової програми на С виглядає так:

#include <stdio.h>

int main()

{

/* об’ява змінних, констант */

/* введення даних */

/* обчислення */

/* виведення даних */

return 0;

}

 

Пояснення:

#include <stdio.h> – підключення файлу з об’явами стандартних функцій введення/виведення.

int main() – головна функція програми.

/* текст */ – коментарі.

Функції форматованого введення та виведення даних.

scanf(“%x”, &a); – введення даних,

printf(“%x”, a); – виведення даних, де %x вказує на формат змінної, що вводиться або виводиться, найчастіше це:

%d — ціле число,

%f — дійсне число,

%c — символ.

Приклад 1: обчислення площі квадрата.

#include <stdio.h>

int main()

{

int s, a;

printf(“Введить довжину сторони квадрата, a=”);

scanf(“%d”, &a);

s = a * a;

printf(“Площина квадрата s=%d”, s);

return 0;

}

 

Самостійно:

1. Розробити алгоритм та програму для обчислення значення функції y = 6 * x + 4.

2. Розробити алгоритм та програму для обчислення необхідного запасу пального для патрульних машин. Кількість машин, розхід пального на 100 км та довжина маршруту задаються.

3. Реалізувати алгоритм та програму, що перетворює температуру у градусах Цельсія до шкали Фаренгейту. Перетворення виконується за формулою: F = 9 / 5 * (C + 32).

 

 

Лекція 3. Введення до мови С – реалізація основних алгоритмічних конструкцій.

Реалізація лінійних алгоритмів. Умовні оператори. Реалізація розгалужених алгоритмів.

 

Лінійні алгоритми реалізуються шляхом послідовного написання операторів програми.

Приклад 1: вирішити задачу обчислення площі квадрата. Введемо змінні: a – довжина сторони квадрата, s – площина квадрату. Розрахункова формула: s = a * a.

  #include <stdio.h> int main() { int s, a; printf(“Довжина сторони квадрата, a=”); scanf(“%d”, &a); s = a * a; printf(“Площина квадрата s=%d”, s); return 0; }

У наведеній програмі послідовно виконуються: введення даних, обчислення та виведення результату. Аналіз програми:

int s, a; об’ява змінних цілого типу
printf(“Довжина сторони квадрата, a=”); виведення на екран запрошення
scanf(“%d”, &a); введення змінної a
s = a * a; розрахунок площини квадрату s
printf(“Площина квадрата s=%d”, s); виведення результату на екран

Реалізація розгалужених алгоритмів виконується за допомогою умовного оператору if. Оператор перевіряє умову, та виконує одну гілку алгоритму, якщо умова є істиною, або іншу гілку, якщо умова не є істиною. Формат умовного оператору:

if (умова) { дії, якщо умова є істинною } [else { дії, якщо умова не є істинною }] Важливо! 1. Умова записується у дужках (). 2. Гілки оформлюються у фігурних дужках {}. 3. Частина у квадратних дужках [] не є обов’язковою.

Для перевірки умов використовуються операції порівняння:

Умова Операція Приклад
більше > a > b
більше або дорівнює >= a >= b
менше < a < b
менше або дорівнює <= a <= b
дорівнює == a == b
не дорівнює != a != b

 

В одному операторі if можна перевірити декілька умов. Для цього використовуються знаки && (та) та || (або).

Умова Коментар
if (a > 5 && b == 0) умова є істинною, якщо a більше 5, та одночасно b дорівнює 0
if (a != 0 || b > a) умова є істинною, якщо а не дорівнює 0, або b більше а

Розглянемо застосування умовного оператору для реалізації можливих алгоритмічних конструкцій.

/* умова */ if (a > b) { /* виконується, якщо умова істина */ b = a; } a = 0;
/* умова */ if (a > b) { /* якщо істина */ b = a; } else { /* якщо не істина */ b = 5; c = a + b; } a = 0;
if (a > b) /* умова 1*/ { b = a; } else { if (c == b) /*умова 2*/ { c = 10; } else { b = c; } } a = 0;

Приклади рішення задач.

Приклад 2. Розробити алгоритм та програму для знаходження значення функції y=6/a+b.

Необхідно виконати перевірку значення а. Якщо а = 0, видати повідомлення про помилку. #include <stdio.h> int main() { int a, b; double y; printf(“Введить а=”); scanf(“%d”, &a); printf(“Введить b=”); scanf(“%d”, &b);   if (a == 0) { printf(“Помилка”); } else { y = 6 / a + b; printf(“y=%2.2f”, y); } return 0; }

 

Приклад 3. Розробити алгоритм та програму для оцінювання результатів бігу на 100 м. Нормативи вправи: 13 c – відмінно,
14 с – добре, 15 с – задовільно.

Введемо змінні:

a - час виконання вправи.

t5=13, t4=14, t3=15 – нормативи часу виконання вправи.

r – оцінка курсанта.

r = 5, якщо a <= t5, 4, якщо a <= t4,
3, якщо a <= t3, 2 – у іншому випадку.

 

Код програми на С:

#include <stdio.h>

int main()

{

int a, r; /* об’ява змінних */

const int t5=13, t4=14, t3=15; /* об’ява констант */

 

printf(“Введить результат бігу в секундах”);

scanf(“%d”, &a); /* введення часу бігу*/

 

if (a <= t5) /* перевірка 5*/

{

r = 5;

}

else

if (a <= t4) /* перевірка 4*/

{

r = 4;

}

else

if (a <= t3) /* перевірка 3*/

{

r = 3;

}

else

{

r = 2;

}

printf(“Оцінка: %d”, r); /* виведення оцінки*/

return 0;

}

 

Самостійно:

1. Розробити алгоритм оцінювання результатів виконання навчальних стрільб курсантом. Виконується 3 постріли.

2. Розробити алгоритм оцінювання розміру штрафу за перевищення швидкості за наявності обмеження швидкості 40 км/год, якщо за перевищення швидкості на кожні 5 км до розміру штрафу 100 грн. додається 15 грн. Швидкість автомобіля зчитується з екрану радару.

 

 

Лекція 4. Цикли.

Види циклів. Оператори циклів. Оператор for. Оператор do. Реалізація циклічних процесів.

 

Для реалізації циклічних алгоритмічних конструкцій у мові С використовуються оператори while, do-while та for.

Цикл з передумовою 1. Виконується, поки умова є істинною. 2. Може не виконатися жодного разу.   while (умова) { /* тіло циклу */ }
Цикл з післяумовою 1. Виконується, поки умова є істинною. 2. Виконується хоч один раз. do { /* тіло циклу */ } while (умова);

 

Приклад 1: знайти значення функції y=6/x. Якщо х приймає значення нуль, повторити введення.

 

  #include <stdio.h>   int main() { double x, y; do { printf(“Введить х”); scanf(“%f”, &x); } while (x == 0); y = 6 / x; printf(“y=%0.3f”, y); getch(); return 0; }

 

Приклад 2: користувач вводить числа з клавіатури. Завершення вводу – число нуль. Розрахувати суму чисел.

#include <stdio.h>   int main() { int x, s=0;   printf(“Введить х”); scanf(“%d”, &x);   while(x != 0) { s = s + x; printf(“Введить х”); scanf(“%d”, &x); }   printf(“s=%d”, s);   getch(); return 0; }

 

Самостійно: розробити алгоритм та програму для знаходження:

— суми позитивних чисел;

— середнього значення чисел;

— мінімального числа;

— максимального числа.

Числа вводить користувач. Признак закінчення вводу – нуль.

 

Оператор циклу for часто використовується у випадках, коли число ітерацій (повторень) заздалегідь відомо. Синтаксис:

for(лічильник; умова; прирощення лічильника) {

тіло циклу

}

лічильник – завдає начальне значення лічильника;

умова – цикл виконується, поки умова є істинною. Умова перевіряється перед кожною ітерацією циклу;

прирощення лічильника – завдає крок зміни лічильника.

Умова у кожному операторі циклу може бути складовою (&& – та, || – або), наприклад a > 5 && b == 12.

Приклад 3: знайти суму десяти чисел, що вводяться з клавіатури.

Цикл for Цикл while
#include <stdio.h> int main() { int i, s=0, x; printf(“Введить 10 чисел: \n”); for (i=0; i < 10; i++) { scanf(“%d”, &x); s = s + x; } printf(“s=”, s); return 0; }   #include <stdio.h> int main() { int i, s=0, x; printf(“Введить 10 чисел: \n”); i = 0; while (i < 10) { scanf(“%d”, &x); s = s + x; i++; } printf(“s=”, s); return 0; }

 

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

break для переривання циклу та переходу до першого оператору, що слідує після циклу
continue для переривання поточної ітерації циклу та початку нового кроку

Самостійно: змінити програму з прикладу 3 так, що:

— введення нуля завершує виконання циклу;

— негативні числа не враховуються.

 

 

Лекція 5. Масиви.

Масиви. Представлення масивів у пам’яті. Об’ява масивів. Типові алгоритмічні процедури обробки масивів та їх реалізація. Сортування масивів.

 

Масиви є зручним способом для роботи з набором даних одного типу. Прикладами застосування масивів для представлення даних є: а) кількість зареєстрованих злочинів
за декілька років; б) екзаменаційні оцінки курсантів по певної дисципліні.

Робота з масивами у С включає набір типових дій:

— об’ява змінної-масиву;

— введення даних до масиву;

— обробка масиву – визначення максимуму, мінімуму, пошук елементу масиву, упорядкування елементів масиву та інші.

 

Масив, як і будь яка змінна, має ім’я. Елементи масиву зберігаються у пам’яті послідовно. Кожний елемент масиву має свій номер – індекс. Індексація елементів масиву починається з нуля, рис. 1. Рис. 1. Масив з 6 елементів  

Для звернення до певного елементу масиву використовують ім’я масиву та індекс елементу. Так, звертання до першого елементу масиву А (рис. 1) записують так: A[0]. Останній елемент масиву: A[5]. Операції запису та читання елементу масиву виконуються за допомогою оператора присвоєння:

A[1] = 10; /* запис в другий елемент масиву числа 10 */

x = A[2]; /*зчитування значення третього елементу масиву */

 

Об’ява змінної-масивувиконується у блоці об’яви змінних програми. При об’яві масиву необхідно вказати кількість елементів (довжина масиву) та їх тип. Формат об’яви масиву:

тип_елементів ім’я_масиву[кількість_елементів]

При об’яві можна виконати ініціалізацію масиву, тобто завдати значення його елементів. При цьому задавати довжину масиву не обов’язково. Формат об’яви та ініціалізації масиву:

тип_елементів ім’я_масиву[кількість_елементів] = {значення1, значення2, значення3, … }

 

Приклади:

int a[6]; /* об’явлений масив a довжиною 6 елементів */

int b[3] = {10, 20, 30}; /* об’явлений та ініціалізований

масив b */

int c[] = {10, 15, 20}; /* об’явлений та ініціалізований

масив c */

 

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

Приклад 1: об’явити масив з десяти елементів. Введення значень елементів масиву виконати з використанням операторів циклу for та while.

for while
int a[10]; int i;   for (i = 0; i < 10; i++) { printf(“a[%d]=”, i); scanf(“%d”, &a[i]); printf(“\n”); }   int a[10]; int i;   i = 0; while (i < 10) { printf(“a[%d]=”, i); scanf(“%d”, &a[i]); printf(“\n”); i++; }

 

 

Примітки:

— останнім елементом масиву є а[9], оскільки нумерація елементів починається з нуля;

— оператор printf(“\n”) необхідний для переводу курсору на нову строку.

 

Типові операції – обробка масивів.

а) пошук елементів масиву, що задовольняють певним признакам (позитивні, негативні та інші).

Приклад 2. Визначити кількість позитивних елементів у масиві з десяти змінних.
Наведено фрагмент алгоритму, що виконує підрахунок кількості позитивних елементів. a – масив з 10 змінних; i – лічильник для масиву; s – лічильник кількості позитивних елементів. #include <stdio.h>   int main() { int s, i, a[10];   for (i = 0; i < 10; i++) { printf(“a[%d]=”, i); scanf(“%d”, &a[i]); printf(“\n”); }   s = 0; for (i = 0; i < 10; i++) { if(a[i] > 0) { s++; } }   printf(“s=%d”, s);     getch(); return 0; }     об’ява змінних     введення елементів масиву       розрахунок кількості позитивних елементів       виведення результату  

 

 

б) пошук максимального або мінімального елемента масиву.

Приклад 3. Визначити максимальне значення серед елементів у масиві з десяти змінних.
Наведено фрагмент алгоритму, що визначає максимальне значення серед елементів масиву. a – масив з 10 змінних; i – лічильник для масиву; max – максимальне значення. #include <stdio.h>   int main() { int max, i, a[10];   for (i = 0; i < 10; i++) { printf(“a[%d]=”, i); scanf(“%d”, &a[i]); printf(“\n”); }   max = a[0]; for (i = 1; i < 10; i++) { if(a[i] > max) { max = a[i]; } }   printf(“max=%d”, max);     getch(); return 0; }     об’ява змінних     введення елементів масиву       пошук максималь-ного елементу масиву     виведення результату  

в) знаходження суми та середнього значення елементів масиву – самостійно.