Керуючі структури мови Сі Програмування з використанням покажчиків

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

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

Лабораторна робота № 1, 2

з дисципліни

«Програмування»

Виконала

студентка групи 1зКСС

Малахова Т.М.

Перевірив

Дроздова О.О.

Херсон 2005

Лабораторна робота № 1

Керуючі структури мови «Сі»

Мета роботи: Вивчення прийомів використання операторів розгалуження і операторів циклів у С.

Теоретичні відомості:

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

Блоки і складові оператори.

Будь-яка послідовність операторів, укладена у фігурні дужки, є складеним оператором (блоком). Складовою оператор не повинен закінчуватися (;), оскільки обмежувачем блоку служить сама закривається дужка. Усередині блоку кожен оператор повинен обмежуватися (;).

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

Порожній оператор.

Порожній оператор представляється символом (;), перед яким немає вираження. Порожній оператор використовують там, де синтаксис мови вимагає присутності в даному місці програми оператора, проте за логікою програми оператор повинен бути відсутній.

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

Оператори розгалуження.

До операторів розгалуження відносяться if, if e l se,?, Switch і goto. Загальний вигляд операторів розгалуження наступний:

if (логічне вираження)

оператор;

if (логічне вираження)

оператор_1;

else

оператор_2;

<Логічний вираз>? <Вираженіе_1>: <вираженіе_2>;

Якщо значення логічного виразу істинне, то обчислюється вираженіе_1, у противному випадку обчислюється вираженіе_2.

switch (вираз цілого типу)

{

case значення_1:

последовательность_операторов_1;

break;

case значення_2:

последовательность_операторов_2;

break;

. . .

case значеніе_ n:

последовательность_операторов_n;

break;

default:

последовательность_операторов_n +1;

}

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

Оператор циклу.

У Турбо Сі є такі конструкції, що дозволяють програмувати цикли: while, do while і for. Їх структуру можна описати таким чином:

Цикл з перевіркою умови нагорі:

while (логічне вираження)

оператор;

Цикл з перевіркою умови внизу:

do

оператор;

while (логічне вираження);

Універсальний оператор циклу:

for (ініціалізація; перевірка; новое_значеніе)

оператор;

Завдання:

Скласти та отримати роздруківку програми вибору всіх парних чисел від 1 до 1000.

Скласти та отримати роздруківку програми вибору всіх чисел, що закінчуються на цифру 5, від 1 до 1000.

Написати програму з використанням циклу do-while, яка очікує натискання клавіші '' 'і по натисканні її завершує роботу.

Програма 1: роздруковує всі парні числа від 1 до 1000:

# Include <stdio.h>

int vit;

int main (void)

{

vit = 2;

while (vit <= 1000)

{

vit = vit +2;

printf ("% d \ n", vit);

}

system ("PAUSE");

return 0;

}

Програма 2: роздруковує всі числа від 1 до 1000, які закінчуються на цифру 5:

# Include <iostream.h>

# Include <stdlib.h>

int den;

int main ()

{

den = 5;

while (den <= 1000)

{

den = den +10;

printf ("% d \ n", den);

}

system ("PAUSE");

return 0;

}

Програма 3: Програма очікує натискання клавіші «'» і за її натисненні завершує роботу:

# Include <iostream.h>

# Include <conio.h>

# Include <stdio.h>

/ / # Include <bios.h>

int getkey; (void);

{

int key, lo, hi;

key = bioskey (0);

lo = key & 0X00FF;

hi = (key & 0X0FF00)>> 8;

return ((lo == 0)? hi +256: lo);

}

main ()

{

clrscr ();

int input;

do

{

input = getkey ();

printf ("Program is running \ n");

}

while (input! =']');

}

Лабораторна робота N2

Програмування з використанням покажчиків

Мета роботи: O ознайомитися з поняттям покажчика, навчитися використовувати їх при програмуванні на С.

Теоретичні відомості

Покажчик - це змінна, яка містить в пам'яті адресу даних. Змінна-вказівник містить місце розташування значення. Тобто, зміна-вказівник вказує на значення, так як вона містить його адресу.

Покажчики надають ефективні засоби доступу і зміни даних. Так як покажчики містять адреси даних, то при пошуку значень у пам'яті в комп'ютера скорочується обсяг роботи. Покажчики не прив'язують дані до якогось певного імені змінної. Вони можуть містити адресу будь-якого не іменованого значення.

Суть змінних-вказівників.

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

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

У Сі має два оператори, що відносяться до покажчиків:

& - Оператор "адреса значення"

* - Оператор "значення за адресою"

Оголошення покажчиків.

Якщо потрібно оголосити змінну для зберігання, наприклад, віку то можна зробити це таким чином:

int age = 20;

Таке оголошення змінної age увазі декілька моментів. По-перше, повідомляється Сі, що потрібна змінна з ім'ям age, і Сі резервує для цієї змінної місце в пам'яті. По-друге, Сі дізнається, що age буде використовуватися для зберігання тільки цілих чисел. По-третє, при оголошенні ця змінна ініціалізується значенням 20.

Нехай потрібно оголосити змінну-вказівник, яка не містить вік, а вказує на age, змінну, де знаходяться потрібні дані. Для оголошення покажчика на змінну age потрібно зробити наступне:

int * p _ age;

У цьому рядку резервується місце для змінної з ім'ям p_age. Однак це не звичайна цілочисельна змінна. Так як перед нею стоїть *, Сі визначить, що це зміна-вказівник.

Присвоєння значень вказівниками.

Покажчик може містити адреси значень тільки відповідного йому типу. Наприклад, p_age може вказувати тільки на цілочисельні змінні. Сі не ініціалізує покажчики при їх оголошенні. Якщо age оголошена як показано вище, і потрібно, щоб p_age містила адресу age, потрібно присвоїти його змінної p_age:

p _ age = & age;

Замість занесення адреси змінної age в змінну p_age за допомогою оператора присвоєння можна одночасно оголошувати і ініціалізувати покажчики.

int age = 20;

int * p_age = &age;

Можна привласнювати різні значення змінної age наступним оператором:

age = 35;

Або можна зробити те ж саме іншим шляхом:

* P_age = 35;

Цей рядок має на увазі "взяти елемент пам'яті, на яку вказує p_age і занести туди значення 35".

Оголошення масивів покажчиків.

Якщо потрібно зарезервувати велика кількість покажчиків для різних даних, можна оголосити масив покажчиків, причому кожен його елемент буде бути типу одного й того ж зазначеного типу. Наступний приклад резервує масив з 10 покажчиків на змінну цілого типу:

int * iptr [10];

Можна присвоїти адресу будь-якого елементу з iptr таким же чином, як і будь-якому іншому вказівником, що не входить в масив:

iptr [4] = &age;

У наступному рядку резервується масив з 20 покажчиків на змінні символьного типу:

char * cpoint [20];

Завдання:

Скласти програму для визначення максимального елемента одновимірного масиву. Масив спочатку заповнюється нулями, потім дані вводяться з клавіатури. Замінити нулем всі елементи, рівні максимальному. Масив задати за допомогою покажчика. Зарезервувати пам'ять під масив за допомогою функцій динамічного розподілу пам'яті.

Програма: визначає максимальний елемент одновимірного масиву:

# Include <stdio.h>

# Include <conio.h>

# Include <alloc.h>

int * arr;

void zero ();

void in ();

int max ();

void out ();

void main ()

{

arr = (int *) malloc (10);

clrscr ();

zero ();

out ();

getch ();

in ();

int maxEl = max ();

int i;

for (i = 0; i <10; i + +)

if (* (arr + i) == maxEl) * (arr + i) = 0;

else;

clrscr ();

out ();

getch ();

}

void zero ()

{

int i;

for (i = 0; i <10; i + +)

* (Arr + i) = 0;

}

void in ()

{

printf ("\ nEnter elements of array:");

printf ("\ n");

int i;

for (i = 0; i <10; i + +)

scanf ("\ n% i", arr + i);

}

int max ()

{

int mx =* arr;

int i = 1;

for (i; i <10; i + +)

if (mx <* (arr + i)) mx =* (arr + i);

else;

return mx;

}

void out ()

{

int i;

for (i = 0; i <10; i + +)

{

printf ("% i", * (arr + i));

printf ("");

}

system ("PAUSE");

return 0;

}

Результат роботи програми: Масив спочатку заповнюється нулями, потім дані вводяться з клавіатури. Замінюються нулем всі елементи, рівні максимальному. Масив задається за допомогою покажчика. Пам'ять під масив зарезервована за допомогою функцій динамічного розподілу пам'яті.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
49.1кб. | скачати


Схожі роботи:
Розробка методики вивчення теми Графічні примітиви з використанням мови програмування Pascal
Програмування мовою С з використанням об єктно орієнтованого програмування
Програмування мовою С з використанням обєктно-орієнтованого програмування
Програма складної структури з використанням меню
Програма складної структури з використанням меню
Алгоритми і структури даних Програмування у Cі
Програмування Структури перехід та вибір варіанту типи символів та перелічувані
Мови програмування
Мови програмування 2
© Усі права захищені
написати до нас