Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Switch(а)



{case 0: printf ("це нуль"); break;

case 1: printf ("це одиниця"); break;

case 2: printf ("це двійка"); break;

default: printf ("це більше двох");}

Оператори циклу. Мова Сі (Сі++) має три оператори, за допомогою яких можна організувати цикли: for, while, do…while.

Цикл з оператором for частіше використовується у випадку, коли відома точна кількість повторів. Цей оператор має синтаксис:

for(ініціалізація_циклу; умова; список_виразів) тіло_циклу

Ініціалізація_циклу – це послідовність визначень та виразів розділених комами, що виконуються один раз перед початком вико­нання циклу. Потім перевіряється умова. Якщо значення умови не дорівнює 0, тобтоє істиною, товиконується тіло_циклу, а потім список_виразів та знову перевіряється умова. При хибному значенні умови цикл завершується. Наприклад:

for(int i=0,sum=0,pr=1; i<3; i++) // і =1, 2, 3

{sum+=5; pr*=(i+1);} // sum =5, 10, 15 pr =1, 2, 6

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

while(умова) тіло_циклу

Спочатку перевіряється умова, якщо умова є істиною,то вико­нується тіло_циклу і знову перевіряється умова. При хибному значенні умови цикл завершується. Наприклад:

int a=0, sum=0;

while(sum<20)

{a+=2; sum+=a; } // а= 2, 4, 6, 8 sum = 2, 6, 12, 20

Цикл з оператором do…while використовується в тих випадках, коли тіло_циклу повинно бути виконане, принаймні, один раз. Синтаксис оператору наступний:

do тіло_циклу while(умова);

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

int m=0,n=0;

do {m+=5; n++;} while(n<3); // m = 5, 10, 15 n = 1, 2, 3

Оператори циклу можуть мати оператори continue, break, return. Оператор continue пропустить залишок тіла циклу та почне виконання наступної ітерації (повторення). Оператор break завер­шить виконання усього циклу. Оператор return завершить виконання функції або всієї програми.

int n1=0,n2=0,a,sum=0;

while((n1+n2)<20)

{scanf("%d",&a); // введення 20 значень змінної а

if((a%2)==0)

{n2++; continue;} // перехід до наступної ітерації, якщо а парне,

if(a==99) break; // закінчення циклу, якщо а= 99

if(a==100) return; // закінчення програми, якщо а= 100

n1++; sum+=a; } // обчислення суми непарних змінних а

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

if (n==n_max) goto M1; // перехід на М1 при n==n_max

n++;

M1: printf("n=%d", n);

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

int a[3];

a[0]=2; a[1]=6; a[2]=a[0]+a[1]*5;// а[2] =32

Покажчики. Це цілі беззнакові змінні, що містять адреси пам'яті якого-небудь об'єкту програми. Покажчик може містити адресу змінної, масиву, структури, іншого покажчика і т.п. Розмір покажчика 4 байти: 2 байта – сегмент і 2 байта – зсув в сегменті. Тип покажчика – це тип змінної, адреса якої може знаходитися в покажчику. Покажчик можна ініціалізувати та йому можна привласнювати адресу визначеної змінної, значення раніш визначеного іншого покажчика або явно задану адресу пам’яті (з перетворенням типу). Наприклад:

int a=1;

int *ptra; ptra =&a; // адреса змінної а

int *ptrb; ptrb =ptra; // покажчик ptra

int *ptrс=(int*)0xB8000000;// явна адреса пам’яті

Ім'я масиву – це покажчик-константа, значення якого є адреса нульового елемента масиву. Це значення не можна змінити. Наприк­лад, якщо визначити int arr[10], то при цьому виділиться пам'ять для 10 елементів масиву, а ім'я arr станепокажчиком-константою на цей масив. При визначенні розміру покажчика arr визначається роз­мір усього масиву. Ім'я масиву можна привласнювати іншим покаж­чикам. З елементами масивів, зв'язаними з покажчиками, можна пра­цювати за допомогою індексіві операції розіменування. Наприклад, доступ до останнього елементу масиву можна виконати таким чином:

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, у цьому випадку ім'я масиву й адреса першого символу стають синонімами. Наприклад:

char str1[5]="name"; char str2[]="name";

char str3[5]={'n','a','m','e', '\0'};

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

char *strptr = "name";

У цьому випадку змінна–покажчик strptr (але не покажчик-константа) одержує значення адреси символу 'n', а сам рядок розташо­вується в сегменті даних завантажувального модуля програми.

Масиви покажчиків. Це масиви, елементами якого є покажчики. Прикладом визначення масиву з трьох покажчиків на об'єкти типу int є запис: int*mas[3]={&a,&b,&c}; Ім'я масиву – mas, він містить три покажчика типу int*. Вираз (mas+1) відповідає зсуву у пам'яті на sizeof(int*) байтів від початку масиву (тобто на 4 байти).

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

char *name[3]={"Іванов","Петро","Єгорович"};

При такому визначенні в пам'яті виділяється 3*sizeof(char*)= 12 байт для покажчиків name[0], name[1], name[2], 7 байт – для рядка "Іванов", 6 – для "Петро" і 9 – для "Єгорович".

Багатовимірний масив. Це масив масивів, тобто такий масив, елементами якого є масиви. Ім'я багатовимірного масиву є покажчик-константа на масив покажчиків-констант, елементами якого є покаж­чики-константи з адресами початку кожного з рядків масиву елемен­тів. Елементи багатовимірного масиву розташовуються в пам'яті за рядками, тобто в порядку зростання найправішого індексу. Доступ до елементів двовимірного масиву здійснюється за індексом або за допо­могою покажчиків. Наприклад, звернення до arr[i][j] еквівалентно *(arr[i]+j), *(*(arr+i)+j) або (*(arr+i))[j].

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

За умовчанням глобальні і статичні масиви ініціалізуються нулями, автоматичні – довільними даними. Явна ініціалізація буває повна (з явним завданням кількості елементів і початкових значень усіх елементів масиву) та неповна (з явним завданням кількості елементів, але початкові значення задаються не для всіх елементів масиву):

int a[5]={2,5,7,9,1}; // явна повна ініціалізація

int b[7]={5,7,9}; // явна неповна ініціалізація

У останньому рядку інші чотири елементи масиву b будуть мати або нульові значення (для зовнішнього і статичного масивів), або їхні значення будуть невизначені (для автоматичного масиву).

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

int c[]={5,7,9,8}; // Масив із чотирьох елементів

Нижче наведені приклади ініціалізації двовимірних масивів.

int m[3][2]={2,4,6,8,1,3}; // явна повна ініціалізація

int n[2][3]={{1,2},{3,5},{2}}; // явна неповна ініціалізація

Багатовимірні масиви можна ініціалізувати без вказівки найлівішої розмірності. Компілятор визначає кількість елементів за списком ініціалізації:

int p[][3]={{3,2,1},{3,8,9},{2,7,4}};

float f[][2]={{1.2},{2.2,3.4},{2.5,6.4},{2.0}};

В цьому прикладі визначені масиви int p[3][3] і float f[4][2].

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

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

int n; scanf(“%d”,&n); // введення розміру масиву (розмір – змінна)

int *ptri=(int*)malloc(n*sizeof(int)); // запит пам’яті

...

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

У мові С++ для цієї мети існують операції new і delete. Операція new автоматично визначає необхідний обсяг пам'яті в байтах.

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

...

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





Дата публикования: 2014-12-28; Прочитано: 199 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...