Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Цикл while та do while





Цикл do while відрізняється від циклу while тим, що в do while спочатку виконується тіло циклу, а потім перевіряється умова продовження циклу. Через таку особливості do while називають циклом з постусловіем. Таким чином, якщо умова do while завідомо неправдиве, то хоча б один раз блок операторів в тілі циклу do while виконається. У підсумку do while відрізняється від циклу while структурою. Якщо в while спочатку виконується перевірка умови продовження циклу, і якщо умова істинно, то тільки тоді виконується тіло циклу. Цикл do while працює з точністю до навпаки, спочатку виконується тіло циклу, а потім перевіряється умова, ось чому тіло циклу do while, хоча б раз, виконається.

На початку циклу do while пишеться зарезервоване слово do, після йдуть фігурні скобочки, які можна опускати, у разі використання одного оператора в тілі циклу do while. Після закриває фігурної скобочки, що позначає кінець тіла циклу do while, варто умова циклу do while, після якого обов'язково потрібно ставити крапку з комою. Розглянемо програму з циклом do while, яка виконує деякі транзакції з грошовим рахунком у банку.

33. Оператори переходу в С++

У мові С++ визначено чотири оператора переходу: return, goto, break і continue. Оператори return і goto можна використовувати в будь-якому місці всередині функції. Оператори break і continue можна використовувати в будь-якому з операторів циклу. Як зазначалося раніше в цьому розділі, break можна також використовувати в операторі switch.

Оператор return використовується для виходу з функції. Віднесення його до категорії операторів переходу обумовлено тим, що він змушує програму перейти в точку виклику функції. Оператор return може мати асоційоване з ним значення, тоді при виконанні даного оператора це значення повертається в якості значення функції. У функціях типу void використовується оператор return без значення.

Крім goto, в мові С є інші оператори управління (наприклад break, continue), тому необхідності в застосуванні goto практично немає. В результаті надмірного використання операторів goto програма погано читається, вона стає "схожою на спагетті". Найчастіше такими програмами незадоволена адміністрація фірм, що виробляють програмний продукт. Тобто оператор goto вельми непопулярний, більше того, вважається, що в програмуванні не існує ситуацій, в яких не можна обійтися без оператора goto. Але в деяких випадках його застосування все ж доречно. Іноді, при вмілому використанні, цей оператор може виявитися дуже корисним, наприклад, якщо потрібно покинути глибоко вкладені цикли [1]. У даній книзі оператор goto розглядається тільки в цьому розділі.

Для оператора goto завжди необхідна мітка. Метка - це ідентифікатор з подальшим двокрапкою. Мітка повинна знаходиться в тій же функції, що і goto, перехід в іншу функцію неможливий. Загальна форма оператора goto наступна.

Оператор break застосовується в двох випадках. По-перше, в операторі switch з його допомогою переривається виконання послідовності case (див. Розділ "Оператор вибору - switch" раніше в цьому розділі). У цьому випадку оператор break його не передає управління за межі блоку. По-друге, оператор break використовується для негайного припинення виконання циклу без перевірки його умови, в цьому випадку оператор break передає управління оператору, наступному після оператора циклу.

Можна сказати, що оператор continue трохи схожий на break. Оператор break викликає переривання циклу, a continue - переривання поточної ітерації циклу і здійснює перехід до наступної ітерації. При цьому всі оператори до кінця тіла циклу пропускаються. У циклі for оператор continue викликає виконання операторів збільшення і перевірки умови циклу. У циклах while і do-while оператор continue передає управління операторам перевірки умов циклу. У наступному прикладі програма підраховує кількість прогалин в рядку, введеної користувачем:

35.Вказівники їх оголошення.Оператор & та *.

Вказівники – це одинн з найпотужніших і в той же час найнебезпечніших засобів на с++ наприклад неіцініалізовані вказівники це вказівники що містять невірні адреси можуть знищити ОС ПК а також неправильне їх використання породжує помилки які вкрай важко виявити.

Вказівник pointer - змінна, особливий тип даних в який зберігається адреса іншого об’єкта(іншої змінної).Оперативна пам'ять компілятора розділена на комірки, кожна змінна розміщена в одній чи кількох послідовних комірках адреса першої з них назив. Адресою зовнішньої памяті.Якщо одна змінна містить адресу іншої змінної то під ним розуміють що вона посилається на іншу змінну. Такі змінні мають бути оголошені як вказівники таким чином:


тип вказівника*імя вказівника int*x

Тип вказівника визначається типом змінної на яку вони будуть посилатися.

При роботі з вказівниками використовують два оператори:

1) оператор отримання адреси &;

2) оператор розіменування вказівника *;

& - розуміють як адресу змінної;

*- розуміють як значеня що містяться за певною адресою.

Вказівники значення яких= null наз.порожнім.І вони не посилаються на жодний об’єкт.

Макроконстанта NULL- визначена у заготовочному файлі <stdio.h>.

Інший спосіб ініціалізації порожнього вказівника Int*p=0.

Неініціалізовані вказівники називаються дикими або wild pointer і вони є дуже небезпечні.

36. Функції сови С++, їх параметри. Прототип функції

Функція - це модуль в с++. Опції в мові сі дозволяють створювати модульні програми, тобто програми складаються з модулів. Для написання програм, краще використовувати готові стандартні функції бібліотеки c++. Якщо ж ви хочете в програмі використовувати свою функцію, то необхідно оголосити прототип функції, після цього в кінці програми написати реалізацію функції.

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

Прототипом функції в мові Сі або C ++ називається оголошення функції, що не містить тіла функції, але вказує ім'я функції, арность, типи аргументів і повертається тип даних. У той час як визначення функції описує, що саме робить функція, прототип функції може сприйматися як опис її інтерфейсу.

 

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

 

37.Консольний обмін даними

 

38.Динамічний розподіл памяті.Вказівник.

Динамічний розподіл пам'яті — це розподіл за запитами процесів користувача або ядра під час їхнього виконання. Розрізняють динамічне виділення та динамічне вивільнення пам'яті. Прикладом бібліотечної та мовної підтримки засобів динамічного розподілу пам'яті є функції mallос(), free() бібліотеки мови С, оператори new і delete в C++, оператор new в C#. Усі ці засоби спираються на підтримку з боку операційної системи.
Динамічна ділянка пам'яті процесу відображає спеціальну частину його адресного простору, у якій відбувається розподіл пам'яті за запитами з його коду. Такий розподіл пам'яті відбувається в режимі користувача, звичайно в коді системних бібліотек. Головним завданням такого розподілювача є відстеження використання процесом ділянок пам'яті в конкретний момент.

Вказівники – це змінні, значеннями яких є адреси пам’яті. Якщо змінна безпосередньо посилається на своє значення, то вказівник посилається на значення змінної не безпосередньо або непрямо. Він тільки володіє значенням пам’яті імені відповідної йому змінної. Посилання на значення змінної через вказівник називається непрямою адресацією.


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

int *countPtr, count;

в визначенні вище визначається змінна countPtr типу int * (вказівник на цілочисельне значення). Крім того також визначається змінна count типу int, проте символ «*» відноситься тільки до змінної countPtr. Спочатку вказівник ініціалізується нульом, або макросом NULL, який знаходиться в директиві процесора стандартної бібліотеки С - <stddef.h>, яка включається в інші директиви, наприклад: в директиву <stdio.h>. Коли значення 0 присвоюється змінній-вказівнику то здійснюється його перетворення до вказівника відповідного типу і значення 0 – це єдине значення яке може бути присвоєне вказівнику безпосередньо.

Операція взяття адреси «&» являється унарою, яка повертає адресу свого операнда. Наприклад, якщо ми об’явимо змінні:

int y=5; i int *yPtr; то оператор yPtr=&y;

присвоїть змінній-вказівнику yPtr адресу змінної у. Така операція називається розіменуванням і повертає значення об’єкту на який посилається вказівник (операнд). В даному прикладі оператор

 

printf ("%d", *yPtr);

виведе значення змінної у рівне 5. При вказівниках операції «*» і «&» доповнюють одна одну. В такому разі установку адреси змінної можна здійснювати так:

yPtr = &y; і лінійка програми

printf ("вивід змінної yPtr\n", *&yPtr)

39. Локальні та глобальні змінні. Область видимості

Локальні змінні

Змінні, оголошені усередині функцій, називаються локальними змінними. У деяких книгах з C вони називаються динамічними змінними [2]. У цій книзі використовується поширеніший термін локальна змінна. Локальну змінну можна використати тільки усередині блоку, в якому вона оголошена. Іншими словами, локальна змінна невидима за межами свого блоку. (Блок програми — це описи і інструкції, об'єднані в одну конструкцію шляхом взяття їх у фігурних дужок.)

Глобальні змінні

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

 

40.Динамічна пам'ять. Оператори new та delete.

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

int * pi = new int;

розміщує об'єкт типу int в пам'яті і ініціалізує вказівник pi адресою цього об'єкта. Сам об'єкт у такому разі не ініціалізується, але це легко змінити:


* pi = new int (1024);

Можна динамічно виділити пам'ять під масив:

int * pia = new int [10];

Така інструкція розміщує в пам'яті масив вбудованого типу з десяти елементів типу int. Для подібного масиву не можна задати список початкових значень його елементів при динамічному розміщенні. (Однак якщо розміщується масив об'єктів типу класу, то для кожного з елементів викликається конструктор за замовчуванням.) Наприклад:

string * ps = new string;

розміщує в пам'яті один об'єкт типу string, ініціалізує ps його адресою і викликає конструктор за замовчуванням для новоствореного об'єкта типу string. Аналогічно

string * psa = new string [10];

розміщує в пам'яті масив з десяти елементів типу string, ініціалізує psa його адресою і викликає конструктор за замовчуванням для кожного елемента масиву.

Об'єкти, що розміщуються в пам'яті за допомогою оператора new, не мають власного імені. Замість цього повертається покажчик на безіменний об'єкт, і всі дії з цим об'єктом проводяться за допомогою непрямої адресації.

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

delete pi;

звільняє пам'ять, на яку вказує об'єкт типу int, на який вказує pi. Аналогічно

delete ps;

звільняє пам'ять, на яку вказує об'єкт класу string, адреса якого міститься в ps. Перед знищенням цього об'єкту викликається деструктор. Вираз

delete [] pia;

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

 

41. Структура її шаблон та структурні змінні

42. Обєднання, бітові поля, typedef

Бітові поля

На відміну від деяких інших комп'ютерних мов, в мові C є вбудована підтримка бітових полів [1], яка дає можливість діставати доступ до одиничного біта. Бітові поля можуть бути корисні з різних причин, а саме:

  • Якщо пам'ять обмежена, то в одному байті можна зберігати декілька булевих змінних (що набувають значень ІСТИНА і БРЕХНЮ);
  • Деякі пристрої передають інформацію про стан, закодовану у байті в одному або декількох бітах;
  • Для деяких процедур шифрування потрібно доступ до окремих біт усередині байта.

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

Бітове поле може бути членом структури або об'єднання. Воно визначає довжину поля у бітах. Загальний вигляд визначення бітового поля такий:

тип ім'я: довжина;

Тут тип означає тип бітового поля, а довжина — кількість біт, які займає це поле. Тип бітового поля може бути int, signed чи unsigned. (Крім того, відповідно до стандарту C99, у бітового поля ще може бути тип _Вооl.)

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

 

43. Символьні рядки С++. ВВедення-виведенняя символів та символьних рядків.

У мові С та в ранніх версіях мови С++ рядки розглядалися як символьні масиви, і вся робота з ними ґрунтувалася на ви­користанні цих масивів. Розроблена бібліотека функційstring.h містить потужні засоби для роботи з рядковими масивами.

Рядок являє собою масив символів, який закінчується нуль- символом. Нагадаємо, щонуль-символ має код, що дорівнює 0, і запис у вигляді керуючої послідовності '\0'. За розташуван­ням нуль-символа визначається фактична довжина рядка. Кіль­кість елементів символьного масиву складається з кількості сим­волів у рядку плюс 1, тому що нуль-символтакож є елементом масиву.
Для опису рядка використовуються звичайні засоби опису масивів, наприклад: char str[25];. Індексування такого масиву, як і будь-якого іншого, починається з нуля.

44. Функції для опрацювання символьних рядків







Date: 2015-08-24; view: 1009; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.017 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию