Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_Prog_3sem_2012.doc
Скачиваний:
6
Добавлен:
07.02.2016
Размер:
477.7 Кб
Скачать

50

Міністерство освіти І НАУКИ, МОЛОДІ ТА СПОРТУ України

Запорізький національний технічний університет

Методичні вказівки до виконання лабораторних робіт з дисципліни "Програмування"

для студентів усіх форм навчання

з напряму 6.050102 "Комп’ютерна інженерія"

2012

Методичні вказівки до виконання лабораторних робіт з дисципліни "Програмування" для студентів усіх форм навчання з напряму 6.050102 "Комп’ютерна інженерія" / Укл.: Н.В. Луценко, О.В. Польська – Запоріжжя: ЗНТУ, 2012.– 50 с.

Укладачі: Н.В. Луценко, ст.викладач

О.В. Польська, асистент

Рецензент: О.І. Вершина, доцент, к.т.н.

Відповідальний

за випуск О.В. Польська, асистент

Затверджено:

на засіданні кафедри

"Комп’ютерні системи та мережі"

Протокол № 8 від 8.06.2012 р.

Зміст

Порядок виконання лабораторних робіт 4

Загальні відомості 5

Лабораторні роботи 18

Лабораторна робота №1 Робота з масивами 18

Контрольні питання до лабораторної роботи № 1 21

Лабораторна робота № 2 Структури. Об'єднання. Бітові поля структур і об'єднань 22

Контрольні питання до лабораторної роботи № 2 28

Лабораторна робота № 3 Елементарне введення у функції 29

Контрольні питання до лабораторної роботи № 3 35

Лабораторна робота № 4 Прийоми використання функцій 36

Контрольні питання до лабораторної роботи № 4 40

Лабораторна робота №5 Робота з файлами 41

Контрольні питання до лабораторної роботи № 5 46

Лабораторна робота № 6 Багатофайлова компіляція 47

Контрольні питання до лабораторної роботи № 6 49

Література 50

Порядок виконання лабораторних робіт

Лабораторні роботи складаються з декількох програм та завдань до них. Студент повинен розробити, налагодити і зберегти у робочому каталозі програми в точній відповідності з наведеними в лабораторних роботах текстами програм (вихідні програми), опрацювати і проаналізувати результати їхньої роботи, а також розробити для кожної вихідної програми самостійне завдання відповідно заданому варіанту та продемонструвати викладачу роботу цих програм.

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

Лабораторна робота вважається захищеною, якщо при захисті отримано не менш половини вірних відповідей.

Зміст звіту:

  1. Титульний лист, виконаний відповідно до СТП.

  2. Мета роботи.

  3. Відповіді на контрольні питання.

Загальні відомості

Одновимірні масиви.  Масив – це сукупність змінних одного типу, що мають одне ім'я. При визначенні масиву оголошують його розмір, значення розміру повинно бути константним цілочисловим виразом. Наприклад:

int a[3];

Покажчики.  Це цілі беззнакові змінні, значеннями яких служать адреси ділянок пам'яті, виділених для об'єктів (змінних) конкретних типів. Тип покажчика – це тип змінної, адреса якої є значенням покажчика. Наприклад:

int a=1;

int *ptra,*ptrb, *ptrс; // визначення покажчиків

ptra=&a; // привласнення адреси змінної a

ptrb=ptra; // привласнення значення покажчика ptra

ptrс=(int*)0xB8000000; // привласнення явної адреси

Ім'я масиву – це покажчик-константа, значення якого є адреса нульового елемента масиву. З елементами масивів, пов'язаними з покажчиками, можна працювати за допомогою індексів і операції розіменування. Наприклад, для доступу до останнього елементу масиву можливі такі конструкції:

int arr[10]; int *ptr=arr;

arr[9]=2; *(arr+9)=2; *(9+arr)=2; 9[arr]=2;

ptr[9]=2; *(ptr+9)=2; *(9+ptr)=2; 9[ptr]=2;

Рядок. Це сукупність змінних типуchar,наприкінці якої завжди міститься символ '\0'. Рядок можна ініціалізувати послідовністю символів, що знаходиться у парних подвійних лапках. Наприклад:

char str[5]="name";

Адреса першого елемента рядка може використовуватися для ініціалізації покажчика типу char, наприклад:

char *ptrstr="name";

Багатовимірний масив.  Це масив масивів, тобто такий масив, елементами якого є масиви. Ім'я багатовимірного масиву є покажчик-константа на масив покажчиків-констант, елементами якого є покажчики-константи на початок кожного з рядків масиву.

Доступ до елементів двовимірного масиву може здійснюватися за індексом або за допомогою операції розіменування. Наприклад:

int a[3][4]; // визначення двовимірного масиву

a[0][3]=7; // доступ до останнього елементу 1-го рядка

*(a[1]+3)=8; // доступ до останнього елементу 2-го рядка

*(*(a+2)+3)=9; // доступ до останнього елементу 3-го рядка

Масиви динамічної пам'яті.  Пам'ять для збереження динаміч­них масивів даних виділяється в динамічній пам'яті ( в "купі"), розмір і знаходження якої залежать від моделі пам'яті, операційної системи та компілятора. При цьому розмір масиву може буде змінною.

В мові Сі використовується функція malloc() для запиту і виділення пам'яті і функція free() для її звільнення. Прототипи цих функцій описано в заголовних файлах <alloc.h> та <stdlib.h>. У мові С++ для цього існують операції new і delete. Операція new автоматично визначає необхідний обсяг пам'яті в байтах. Наприклад:

int n=10; //розмір масиву є змінна типу int

long *dipa=(long*)malloc(n*sizeof(long)); //запит пам'яті

... // текст програми

free(dipa); //звільнення пам'яті

double *ddpa=new double[n]; // запит пам'яті

... // текст програми

delete [] ddpa; //звільнення пам'яті

Структури. Це сукупність поіменованих об'єктів у загальному випадку різних типів. Кожна структура включає в себе один або декілька об'єктів (змінних, масивів, покажчиків, структур), які називають елементами (полями) структури.

Структурний тип (шаблон) визначає, скільки елементів і якого типу входять в структуру. Визначення шаблону структури починаєть­ся із слова struct, за яким у фігурних дужках розміщаються описи елементів, що входять в структуру. Шаблон структури має права типу. Під шаблон пам'ять не виділяється. Наприклад:

struct STUDENT{char name[20];

 int age;

 float rating;};

Після визначення структурного типу, за його допомогою можна визначити конкретні структури. Наприклад:

STUDENT st1, starr1[3],*ptrst=&st1;

При визначенні структури можлива її ініціалізація, тобто при­власнення початкових значень елементам структури. Для цього після визначення ставиться знак '=' та у фігурних дужках через кому зада­ють­ся значення елементів згідно структурного типу. Наприклад:

STUDENT st2={"Шевченко",20,4.9};

STUDENT star2[2]={{"Петров",20,4.4},{"Романов",19,4.3}};

Для звернення (доступу) до елементів структури використову­ються уточнені імена. Наприклад:

st1.age=19; st1.rating=4.3;

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

cout<<starr1[0].name;

starr1[1].age=20; starr1[2].rating=4.7;

При зверненні до членів структури, зв'язаної з покажчиком, використовується операція стрілка або розіменування покажчика з ім'ям елемента структури після крапки. Нижче наведені обидві форми:

ptrstage=18; (*ptrst).rating=4.5;

Об'єднання.  Це сукупність поіменованих об'єктів різних типів, в яких однакова початкова адреса, тобто на відміну від структури всі елементи об'єднання мають нульовий зсув. Тип об'єднання (шаблон) визначає, скільки елементів і якого типу входять в нього. Визначення типа об'єднання починається зі слова union, за яким розміщаються описи елементів, поміщені у фігурні дужки.

Розмір пам'яті, що виділена під об'єднання, визначається розмі­ром елемента з максимальною довжиною. Визначення шаблона об'єднання й самого об'єднання, а також доступ до елементів об'єднання виконується аналогічно структурам. Наприклад:

union UN{int a[2];char c[4];} un1,*ptrun=&un1;

un1.a[0]=25; // звернення до елемента об'єднання

ptrunc[3]='е'; // звернення до un1.c[3] через покажчик

При визначенні об'єднання можна ініціалізувати тільки перший елемент. Наприклад:

UN un2={1, 12}; // ініціалізується перший елемент (масив a)

Бітові поля структур та об'єднань. Це цілі значення (типу int, char, long, short), що займають у пам'яті фіксоване число бітів (від 1 до 16 біт). Бітові поля можуть бути тільки елементами структур і об'єднань. Їх використовують для доступу до окремих бітів даних. Розмір бітових полів задається через двокрапку після імені елемента структури або об'єднання. Наприклад:

struct SS{int a:5; // для елемента a виділиться 5 бітів

int b:3;}; // для елемента b виділиться 3 біта

SS stb,*pb=&stb; //визначення структури, покажчика на структуру

Для доступу до бітових полів використовуються уточнені імена. Наприклад: stb.а=31; stb.b=3; (*pb).a=1; pb->b=3;

Членами об'єднання можуть бути структури з бітовими полями, наприклад: union UB{char c; SS str1;} un3;

Функції.  Це елементи програми, що можуть використовуватися неодноразово для виконання деякої, заздалегідь визначеної задачі. Кожна програма містить одну і тільки одну функцію з ім'ям main(), за допомогою якої здійснюється вхід у відкомпільовану програму. Крім головної функції в програмі може бути багато інших функцій.

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

Будь-яка функція, окрім головної функції main(), має бути визначена або описана до її використання (виклику) в конкретному модулі. Визначення функції має наступний синтаксис:

тип_функції ім'я_функції(список_формальних_параметрів)

{ тіло функції }

де тип_функції - це тип значення, що повертається функцією. Якщо функція нічого не повертає, то тип функції позначається void;

список_формальних_параметрів (чи сигнатура функції) – це список специфікацій окремих параметрів з вказівкою типів і імен, що записані через кому, або void чи порожньо, якщо у функцію не передаються ніякі параметри;

тіло функції - це послідовність описів, визначень змінних та різних операторів, що поміщені у фігурні дужки.

Коли функція викликається, управління передається в початок тіла функції. Повернення в точку виклику функції виконується оператором return вираз; або return;. У тілі функції може бути декілька операторів return, якщо вихід з функції здійснюється в декількох точках.

Наприклад, визначення функції, в яку передаються три парамет­ри типу float і яка знаходить суму цих чисел та повертає результат:

float sum(float a, float b, float c)

{return a+b+c;}

В цьому прикладі float – тип значення, яке повертає функція, sum – ім'я функції, за яким у круглих дужках стоїть список формальних параметрів a, b, c, а у фігурних дужках – тіло функції.

Якщо функція не повертає ніякого значення, то тип її void, а оператор return може бути без виразу або бути відсутнім. Наприклад:

void func1() {printf("pi=%lf\n",3.141592);}

Звернення до функції (або виклик функції). Це вираз, в якому вказується ім’я функції та список фактичних параметрів в круглих дужках. Результат цього виразу – значення, що повертає функція, тип якого співпадає з типом функції:

ім'я_функції(список фактичних параметрів);

де список_фактичних_параметрів – це порожньо або void, (якщо в функцію нічого не передається), або фактичні параметри (константи або раніш визначені змінні, змінні з перетворенням типу, вирази).

При зверненні до функції формальні параметри змінюються на фактичні параметри в строгій відповідності до типів параметрів. Відповідність між формальними і фактичними параметрами встанов­люється по їх взаємному розташуванню в списках. Наприклад:

int max(int x, int y)

{if (x>y)return x; return y;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]