Помогни ни да направим Uroci.net по - богат! Добави урок

C++ част.3 (Изрази и оператори)

C++ » C++
fix3d   трудност:    видян: 62818



3.15. Oператорът while

Цикълът while има следния синтаксис:

while ( expression )statement;

Операторът statement (или съставният оператор) се изпълнява до тогава, докато условието expression има стойност истина. Прилага се следната последователност от действия:

1. Изчислява се израза expression.
2. Изпълнява се оператора statement ако условието е истина. Ако при първото изчисляване на израза тест той има стойност лъжа, оператора statement никога няма да бъде изпълнен. Например, алгоритъмът за броене на гласни, описан в предишния раздел за оператора switch, изисква символите да бъдат четени от входния поток по един по един докато бъде достигнат края на файла. Цикълът while е идеалния кандидат за реализиране на това:

char ch;
while ( cin >> ch )
switch ( ch ){ ...

Понеже switch се счита за един оператор, не е необходимо той да бъде поставян в съставен оператор.
Цикълът while е особено подходящ за обработка на низове и други указателни типове. Например,

ff( const char *st ) {
int len = 0;
const char *tp = st; // compute length of st
while ( *tp++ ) ++len;// now copy st
char *s = new char[ len + 1 ];
while ( *s++ = *st++ ); // null statement
// ... rest of function
}

Упражнение 3-16. Напишете функция, която определя дали два низа са еквивалентни.
Упражнение 3-17. Напишете функция, която връща броя на появите на даден символ в даден низ.
Упражнение 3-18. Напишете функция, която определя дали даден подниз е част от даден низ.


3.16. Операторът for

Цикълът for най-общо казано се използува за постъпков преглед на даннови структури с фиксирана дължина, като масиви например. Ние вече сме го използували многократно. Синтаксисът на оператора for има вида:

for ( init-statement; expression-1; expression-2 ) statement;

init-statement може да бъде декларация или израз. Най-общо той се използува за инициализиране или присвояване на стойност на променлива или множество от променливи. Може да бъде и празен оператор. Ето няколко примера за правилни init-statement оператори:

for ( int i = 0;
...for ( ; /* null init-statement */
...for ( i = 0;
...for ( int lo = 0, hi = max, mid = max/2;
...for ( char *ptr = getStr();
...for ( i =0, ptr = buf, dbl = 0.0; ...

expression-1 служи за управление на цикъла. За толкова операции, за колкото expression-1 получава стойност истина, се изпълнява оператора statement. statement може да бъде единичен или съставен оператор. Ако при първато изчисляване на expression-1 той има стойност лъжа операторът statement никога не се изпълнява. Следват няколко примера за правилни изрази от този вид:

(...; index < arraySize; ... )
(...; ptr; ... )
(...; *st1++ = *st2++; ... )
(...; ch = getNextChar(); ... )

expression-2 се изчислява след всека итерация на цикъла. Най-общо той се използува за модификация на променливите, инициализирани чрез init-statement. Ако при първто изчисляване на expression-1 той има стойност лъжа, expression-2 никога не се изчислява. Следват няколко примера за правилни изрази от този вид:

( ...; ...; ++i )
( ...; ...; ptr = ptr->next )
( ...; ...; ++i, --j, ++cnt )
( ...; ...; ) // null instance

Даден е следния цикъл for:

const int sz = 24;
int ia[ sz ];
for ( int i = 0; i < sz; ++i )
ia[ i ] = i;

който се изпълнява по следния начин:

1. Пресмята се init-statement еднократно в началото на цикъла. В този случай се дефинира променливата i и се инициализира със стойност 0.

2. Изчислява се expression-1. Ако условието има стойност истина, т.е. произволна ненулева стойност, се изпълнява оператора statement. Ако в началото условието има стойност лъжа операторът statement никога не се изпълнява.В този пример i се сравнява с sz. Докато i е по-малко от sz се изпълнява опрератора:

ia[ i ] = i;

3. Изчислява се expression-2. Обикновено се променя(т) променливата(те), инициализирани от init-statement. В този пример i се увеличава с 1.

Така разгледахме една пълна итерация на цикъла for. Сега се повтаря стъпка 2. Този процес може да бъде моделиран със следния еквивалентен цикъл while:

init-statement;
while ( expression-1 )
{ statement; expression-2;}

Упражнение 3-19. Напишете функция, която сравнява два масива за равенство.
Упражнение 3-20. Напишете функция, която търси дадена стойност в масив. Ако такава стойност бъде намерена, да връща индекса й в масива. Какво трябва да прави функцията ако стойността не е намерена?



Страници: «7 8 9 10 11 12 »

Сподели урока:



Коментари (1)

Zemoch на 18.01 2011 в 17:30ч.
Мнооого дълъг урок ! По полезно щеше да е да се направят 10тина теми от това вместо една наблъскана догоре.... Иначе полезно ама много хубаво( на едно място :) ) не е на хубаво !

Регистрирайте се, за да добавите коментар


Калдейта Ком ЕООД - © 2003-. Всички права запазени.
Препоръчваме: IT Новини