
- •Введення
- •1. Структура та обсяг дисципліни
- •2. Основи програмування на мові с
- •2.1 Найпростіші конструкції мови
- •2.2 Типи даних
- •2.4 Операції мови с
- •2.5 Структура простої с програми
- •2.6 Організація введення-виведення
- •2.7 Компіляція в системі Linux
- •2.8 Організація розгалужень в програмі
- •2.9 Організація циклів
- •2.10 Оператор break
- •2.11 Оператор continue
- •2.11 Масиви
- •2.12 Функції
- •2.13 Вызов функции с переменным числом параметров
- •2.14 Рекурсивні функції
- •2.15 Читання і запис текстових файлів
- •2.16 Структури даних
- •2.17 Перелік|перерахування| (enumeration)
- •2.18 Об'єднання (union)
- •3. Операційні системи і системне програмування
- •3.1. Поняття операційної системи
- •4. Корисні команди Linux
- •4.1. Загальні|спільні| команди
- •4.1.1. Команда arch – виведення архітектури комп'ютера
- •4.1.2. Команда clear – очищення екрану
- •4.1.3. Команда date
- •4.1.9. Команда uptime – інформація про роботу системи
- •4.1.10. Команда users – інформація про користувачів
- •4.1.11. Команди w, who і whoami інформація про користувачів
- •4.1.12. Команда xf8config – настройка графічної підсистеми
- •4.2. Команди для роботи з текстом
- •4.2.1. Команди diff і cmp
- •4.2.2. Команди grep і egrep – текстовий фільтр
- •4.2.3. Команди more и less – посторінкове виведення
- •4.2.4. Команди head і tail – виведення начала і хвоста файлу
- •4.2.5. Команда wc – підрахунок слів у файлі
- •5. Захист інформації в інформаційних системах
- •5.1 Основні завдання забезпечення безпеки
- •5.2 Базові поняття криптографії
- •5.2.1 Поняття криптографічного алгоритму і протоколу
- •5.2.2 Криптосистеми з секретним ключем
- •5.2.3 Криптосистеми із відкритим ключем
- •5.2.4. Гибридні криптосистеми
- •5.2.5. Цифрові підписи
- •5.2.6. Сертифікати
- •5.3. Принципи аутентифіекації і керування доступом
- •5.3.1. Основи аутентифікації
- •5.3.2. Основи керування доступом
- •5.4. Аутентифікація та керування доступом в unix
- •5.4.1. Облікові записи користувачів
- •5.4.2. Аутентифікація
- •5.4.3. Керування доступом
- •6. Програмний інтерфейс unix. Системні виклики і функції стандартних бібліотек
- •6.1. Підтримка програмування в oc unix. Вивчення передачі інформації
- •6.2. Змінні оточення
- •6.3. Обробка помилок
- •6.4. Правила формування і засоби розбору командних рядків
- •7. Операції над файлами
- •7.1 Файлові операції posix
- •7.2. Збирання інформації про атрибути файла
- •7.3. Операції над каталогами
- •Література
2.11 Масиви
Масив це структурований тип даних, що являє собою сукупність однотипних даних, елементи якої розрізняються індексами.
Масиви прийнято підрозділяти на одновимірні (відповідають векторам в математиці) і багатовимірні (відповідають матрицям).
Елементи масива завжди займають послідовно розташовані комірки пам’яті. А ім’я масиву має значення адреси першого елемента масиву.
Одновимірні масиви
Використовування масиву передбачає його оголошення, виділення місця в пам’яті під масив і привласнення його елементам конкретних значень.
Оголошення масиву виглядає так:
int A[15];
При оголошенні масиву можлива його ініціалізація:
int B[5]={8,4,-1,3,5};
Доступ до елементів масиву здійснюється по індексу. Нумерація елементів масиву в мові починається з нуля.
int C=B[2]; //C=-1;
Нижче наведений приклад введення-виведення одновимірного масиву.
int A[15],i,n;
printf(“Введіть кількість елементів масива: “);
scanf(“%d”,&n);
printf(“Введіть %d елементів масива: \n“);
for(i=0;i<n;i++)
scanf(“%d”,&A[i]);
printf(“Був прийнятий масив: \n“);
for(i=0;i<n;i++)
printf(“%d “,A[i]);
Багатовимірні масиви
Мова С підтримує роботу з багатомірними масивами (розміром до 7 вимірів).
Оголошення масиву виглядає так:
int A[5][7];
де:
5 - число рядків;
7 - число стовпців.
Сортування масивів
Наведений далі фрагмент програми дозволяє виконати сортування одновимірного масиву так званим методом мінімума і максимума.
int A[15];
int ,n,i,j,temp;
for(i=0;i<n;i++)
{
temp=A[i];
for(j=i+1;j<n;j++)
{
if(A[i]>A[j])
{
A[i]=A[j];
A[j]=temp;
temp=A[i];
}
}
}
Ось приклад сортування одновимірного масиву методом «бульбашки».
int A[15];
int ,n,i,j,temp;
for(i=0;i<n;i++)
for(j=0;j<n-1;j++)
if(A[j]>A[j+1])
{
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
2.12 Функції
Для того, щоб написати складну програму на мові C, застосовують метод низхідного програмування, в основі якого лежить наступне:
необхідно розділити головне завдання на дрібніші;
написати для кожного дрібного завдання функцію;
з'єднати ці функції в одну програму.
Функція - це логічно самостійна іменована частина програми, якій можуть передаватися параметри і яка може повертати якесь значення. До функції можна звертатися скільки завгодно часто з будь-якої точки програми. Будь-яку функцію, яку ми використовуємо в програмі, необхідно заздалегідь описати (визначити).
Формат визначення функції:
[тип данных] имя_функции([список аргументов])
{
Определение переменных;
Операторы;
[return];
}
Сукупність пропозицій у фігурних дужках називають тілом функції. Поле тип даних задає тип повертаного функцією значення. Якщо це поле відсутнє, то функція повертає за умовчанням тип int. Якщо функція нічого не повертає, то поле тип даних містить ключове слово void.
Поле имя_функции - це особливий вид покажчика, званий покажчиком на функцію. Його значенням є точка входу на функцію.
Поле список_аргументов визначає аргументи (параметри), передавані у функцію і містить будь-яку комбінацію типів і імен. Це поле у визначенні функції називають списком формальних параметрів. Поле список_аргументов - необов'язково. Якщо у функцію не передаються ніякі параметри, то це поле порожнє або містить ключове слово void. Якщо тип повертаного значення відмінний від void, то функція повинна обов'язково містити оператора return і навпаки..
Наприклад, хай потрібно обчислити значення виразу y=(2b-z)/k;
і оформити обчислення у вигляді функції
.
#include<stdio.h>
float f_y(float, float, float);
void main(void)
{
float y,b,z,k;
printf(“\n Enter b: “);
scanf(%f”,&b);
printf(“\n Enter z: “);
scanf(%f”,&z);
printf(“\n Enter k<>0: “);
scanf(%f”,&k);
y=f_y(b,z,k);
printf(“\n y=%f”,y);
}
float f_y(float b1, float z1, float k1)
{
float a;
a=(2*b1-z1)/k1;
return a;
}