- •Мова програмування с Навчальний посібник
- •І. Теоретична частина Структура програми на мові с
- •Базові типи даних
- •Арифметичні операції
- •Функції введення scanf() та виведення printf()
- •Оператори
- •Функції користувача
- •Функції із змінним числом аргументів
- •Функції стандартних бібліотек Функції для роботи із символами (ctype.H)
- •Функції для роботи з каталогами (dir.H)
- •Функції для роботи з ос (dos.H)
- •Функції для роботи з графічним режимом (graphics.H)
- •Математичні функції (math.H)
- •Функції для роботи з рядками (string.H)
- •Функції потокового вводу/виводу (stdio.H)
- •Функції вводу/виводу нижнього рівня (io.H)
- •Функції вводу/виводу консолі та порту (conio.H)
- •Int s[2][3];
- •Int b[2][3][4];
- •Структури
- •Об'єднання
- •Динамічний розподіл пам’яті
- •Void free(void*);
- •Іі. Практична частина Лабораторна робота №1 Тема: Основні конструкції мови с. Програмування простих алгоритмів
- •Лабораторна робота №2 Тема: Створення і використання функцій
- •Лабораторна робота №3 Тема: Використання структур
- •Лабораторна робота №4 Тема: Організація роботи з файлами
- •Рекомендована література
Оператори
"Складений" оператор
"Складений" оператор – два або більше оператори. Його також називають "блоком".
Синтаксис:
{ [<оператори>] }
Дія складеного оператора полягає в обов'язковому послідовному виконанні операторів, які містяться між { та }, за виключенням тих випадків, коли який-небудь оператор явно не передасть управління в інше місце програми.
Оператор розгалуження if
Оператор розгалуження призначений для виконання тих або інших дій в залежності від істинності або хибності деякої умови.
Синтаксис оператора:
if (<умова>)<оператор1>;
[else <оператор2;>]
Синтаксична діаграма оператора if має вигляд:
Умова хибна, якщо вона дорівнює нулю, в інших випадках вона істинна. Якщо умова істинна – виконується оператор1, інакше – оператор2.
Тут і надалі оператори можуть бути як простими, так і складеними.
Приклад: знайти корені квадратного рівняння.
. . .
d=b*b-4*a*c;
if (d>=0.0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf(“\n корені: x1=%f, x2=%f”, x1, x2);
}
else
printf(“\n дійсних коренів не існує.”);
Оператор switch
Синтаксис:
switch(<вираз цілого типу>) { case <значення_1>: <послідовність_операторів_1>; [break;] case <значення_2>: <послідовність_операторів_2>; [break;] ................................................ case <значення_n>: <послідовність_операторів_n>; [break;] [default: <послідовність_операторів_n+1>;] }
Оператор-перемикач switch призначений для вибору одного з декількох альтернативних шляхів виконання програми. Виконання оператора switch починається з обчислення значення виразу (виразу, що розташований за ключовим словом switch у круглих дужках). Після цього управління передається одному з <операторів>. Оператор, що отримав управління – це той оператор, значення константи варіанту якого співпадає зі значенням виразу перемикача.
Гілка default (може опускатися, про що свідчить наявність квадратних дужок) означає, що якщо жодна з вищенаведених умов не задовольнятиметься (тобто вираз цілого типу не дорівнює жодному із значень, що позначені у саse-фрагментах), керування передається за замовчуванням в це місце програми. Треба також зазначити застосування оператора break у кожному з case-фрагментів (цей оператор застосовують для негайного припинення виконання операторів while, do, for, switch), що негайно передасть керування у точку програми, яка розташована відразу за останнім оператором у switch-блоці.
Приклад:
. . .
char ZNAC;
float x,y,z,u;
. . .
switch (ZNAC)
{
case '+': x = y + z; break;
case '-': x = y - z; break;
case '*': x = y * z; break;
case '/': x = y / z; break;
default : ;
}
. . .
Оператор циклу з передумовою while
Оператор while використовується для організації циклічного виконання оператора або серії операторів, поки виконується певна умова.
Синтаксис :
while (<логічний вираз>) <оператор>;
Цикл закінчується у наступних випадках:
умовний вираз у заголовку приймає нульове значення;
у тілі циклу досягнуто місця, де розташований оператор break;
у тілі циклу виконаний оператор return.
У перших двох випадках керування передається оператору, розташованому безпосередньо за циклом, у третьому випадку активна на той момент функція завершує свою роботу, повертаючи якесь значення.
Приклад:
знайти суму цифр заданого натурального числа.
#include <stdio.h>
int main()
{ unsigned n,s=0;
printf(“ Введіть натуральне число\n n=”);
scanf(“%u”,&n);
while(n)
{
s+=n%10;
n\=10;
}
printf(“\n Сума цифр s=%u”,s);
return 0;
}
Оператор циклу з постумовою do … while
Оператор do…while використовується для організації циклічного виконання оператора або серії операторів, які називаються тілом циклу, до тих пір, поки умова не стане хибною.
Синтаксис :
do <оператор>; while (<логічний_вираз>);
Ситуації, що призводять до виходу з циклу, аналогічні наведеним для циклу while із передумовою.
Приклад обчислення наближеного значення експоненціальної функції в точці із заданою точністю.
#include <stdio.h>
#include <math.h>
int main()
{ int i=1;
float x,rez,dodanok,eps;
printf(“\n x=”); scanf(“%f”,&x);
printf(“\n eps=”); scanf(“%f”,&eps);
rez=1;
dodanok=x/1;
do
{
rez=rez+dodanok;
i++;
dodanok=dodanok*x/i;
}
while (fabs(dodanok)>=eps);
printf(“\n Rezult=%f”, rez);
return 0;
}
Оператор розриву break
Синтаксис :
break;
Оператор розриву break перериває виконання операторів do, for, while або switch.
В операторі switch він використовується для завершення блоку case.
В операторах циклу – для негайного завершення циклу, що не зв'язане з перевіркою звичайної умови завершення циклу. Коли оператор break зустрічається всередині оператора циклу, то здійснюється негайний вихід з циклу і перехід до виконання оператору, що розташований за оператором циклу.
Оператор продовження continue
Синтаксис :
continue;
Оператор continue передає управління на наступну ітерацію в операторах циклу do, for, while. Він може розміщуватися тільки в тілі цих операторів. В операторах do і while наступна ітерація починається з обчислення виразу умови. Для оператора for наступна ітерація починається з обчислення виразу зміни значення лічильника.
Приклад:
int main()
{ int a,b;
for (a=1,b=0; a<100; b+=a,a++)
{ if (b%2) continue;
... /* обробка парних сум */
}
return 0;
}
Оператор циклу for
Оператор for забезпечує циклічне повторення деякого оператора певне число разів. Оператор, який повторюється називається тілом циклу. Повторення циклу звичайно здійснюється з використанням деякої змінної (лічильника), яка змінюється при кожному виконанні тіла циклу. Повторення завершується, коли лічильник досягає заданого значення.
Синтаксис оператора:
for([ініціалізація];[перевірка_умови];
[нове_значення])<оператор>;
Кожен з трьох виразів може бути відсутнім. Перший вираз служить для ініціалізації лічильника, другий – для перевірки кінця циклу, а третій вираз - для зміни значення лічильника.
Формально роботу циклу можна описати такими кроками:
якщо перший вираз (ініціалізація) присутній, то він обчислюється;
обчислюється вираз умови (якщо він присутній). Якщо умова повертає значення 0, тобто вона не вірна, цикл припиняється, у протилежному випадку він буде продовжений;
виконується тіло циклу;
якщо присутній вираз зміни лічильника, то він обчислюється;
надалі – перехід до пункту під номером 2.
Поява у будь-якому місці циклу оператора continue призведе до негайного переходу до пункту 4.
Приклад:
int main()
{ int i, b=0;
for (i=1; i<10; i++)
b+=i*i;
. . .
return 0;
}
"Порожній" оператор
Синтаксис:
;
Порожній оператор – це оператор що складається лише з крапки з комою. Він може використовуватися в будь-якому місці програми, де за синтаксисом потрібний оператор.
Оператор переходу goto
Синтаксис:
goto <мітка>;
/* ... */
<мітка> : <оператор>;
Оператор безумовного переходу goto передає управління безпосередньо на <оператор>, перед яким розташована <мітка>. Мітка – це ідентифікатор, розміщений зліва від оператора і відокремлений від нього двокрапкою “:”.
Наприклад,
M1: x+=delta;
Щоб можна було поставити мітку в довільному місці програми (або задати порожнє тіло циклу), в мові С введено порожній оператор, який зображається тільки символом “;” Отже, можна записати такий помічений порожній оператор:
M1:;
Область дії мітки обмежена функцією, в якій вона визначена. Тому кожна мітка повинна бути відмінною від інших в одній і тій самій функції. Також, неможливо передати управління оператором goto в іншу функцію.
Оператор, перед яким розташована <мітка>, виконується відразу після виконання оператора goto.
Якщо оператор з міткою відсутній, то компілятор видасть повідомлення про помилку.
При написанні програм не рекомендується використовувати оператор переходу .