WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 | 2 || 4 | 5 |   ...   | 11 |

} Операция “запятая” Одно выражение может состоять из набора выражений, разделенных запятыми; например, d=(b=a+1),c=a+2;

a=1,2,3;

такие выражения вычисляются слева направо. Результатом всего выражения будет результат самого правого выражения списка. Эту операцию, е ещ называют операцией последовательного вычисления, используют в тех случаях, когда нужно вычислить несколько выражений, а по правилам синтаксиса допускается только одно выражение, как, например, в операторе for.

Пример. Несколько выражений в выражении инициализации оператора цикла for.

for (x = 4,u = a[n],k=n-1;k>=0;k--) u = u*x + a[k];

в данном случае, группа выражений x = 4,u = a[n],k=n-рассматривается как одно и имеет значение k=n-1.

Операция запятая обладает самым низким приоритетом, – это означает, что оператор, y=1,2;

воспринимается как (y=1),2;

Пример. Операция запятая – расстановка скобок влияет на результат.

using namespace std;

int main() { int n,m;

n=m=1,2;

cout<<"\n n="<

} Инструкция if Инструкция if обеспечивает выполнение или пропуск инструкции в зависимости от условия if (проверяемое условие) оператор условие заключается в круглые скобки и образуется с помощью логических операций.

Проверяемое условие может быть выражением и должно иметь скалярный результат, т.е. быть целым числом, числом с плавающей точкой, символом или указателем. Массивы или структуры не могут являться значениями проверяемого условия. Любое ненулевое значение проверяемого условия рассматривается как true (истина), а нулевое — false (ложь).

Пример.

/* сравнение символов */ char ch='\n';

if (ch=='\n') cout <<"\n ch= \\n";

// сравнение целых int n=5;

if (n==5) cout<<"\n n = 5";

/* сравнение чисел с плавающей точкой: */ double d=0.00001;

if (d==1.e-5) cout<<"\n d = 0.00001";

if (fabs(d-1.e-5)<=1.e-6) cout<<"\n d = 0.00001";/* числа равны с точностью до 6 знач. цифры*/ /* определение диапазона: */ int t=25;

if ((t>10) && (t<30)) cout<<"\n 10 < "<

// арифметическое выражение как условие int x;

cin>>x;

if (x*x) cout<<"\n true ";

else cout<<"\n false ";

if (x) { // составная инструкция x--;

cout<<"\n x= "<< x;

} Инструкция if-else содержит уже два оператора, один из которых из которых выполняется if (проверяемое условие) операторelse операторесли проверяемое условие имеет ненулевое значение, выполняется оператор1, а при нулевом значении – оператор2.

Пример.

double x,f;

cout<<"\n x= "; cin>>x;

if ((x>=0) && (x<1)) f=1; // Функция Хаара else f=0;



Операторы if могут содержать другие операторы if. Такие операторы называют вложенными условными операторами. Во вложенном условном операторе конструкция else относится к ближайшему оператору if, – однако, этот порядок можно изменить расстановкой фигурных скобок.

Согласно Стандарту С89 языка C допускаетcя до 15 уровней вложенности условных операторов, в Стандарте С99 разрешено уже уровней.

Чтобы не запутаться в блоках if, в условных операторах используют абзацные отступы (подробнее, см., напр., Голуб А. Правила программирования на Си и Си++.) Прием, известный как лестница if-else-if (см., напр., Шилдт Г.

Полный справочник по C.), позволяет упорядочить вложенные блоки if.

if (условие) оператор;

else if (условие) оператор;

else if (условие) оператор;

.

.

.

else оператор;

В лестнице условия операторов if вычисляются сверху вниз. Если встретилось условие с ненулевым значением (т.е. условие истинно), выполняется оператор этого блока if, а оставшаяся часть лестницы пропускается. Если все условия ложны, то выполняется оператор в последнем блоке else, или не выполняется ни один оператор, если лестница не заканчивается else Пример. Функция преобразования строки из кодировки ANSI в кодировку OEM-866 (иначе DOS-кодировка) void ansi2oem(char *stroka) { int cnt,i=0;

char ch;

while((ch=stroka[i])!='\0') { cnt=ch;

if ((ch>='а') && (ch<='п')) cnt-=64;

else if ((ch>='р') && (ch<='я')) cnt-=16;

else if (ch=='') cnt=241;

else if (ch=='Ё') cnt=240;

else if((ch>='А')&&(ch<='Я')) cnt-=64;

stroka[i]=cnt; i++;

} } Замечание. Функцию ansi2oem() можно использовать для русификации вывода консольных приложений. См. раздел Строки.

Оператор :

Вместо оператора if-else часто используется оператор :.

выражение1 выражение2 : выражениеЕсли выражение1 истинно (т.е. отлично от нуля), то значение всего оператора равно значению выражение2, в противном случае значением всего выражения будет значение, полученное после вычисления выражение3.

Отметим, что оператор : имеет три операнда, т.е. является тернарным.

Пример.

znak = (x>0) 1 : -1;

Пример. Оператор : в арифметическом выражении double x, y;

cout<<"\n x= "; cin>>x;

y = x * x *((x>0)1:-1);

Пример. Вложенные операторы :

// Вейвлет Хаара double x, f;

cout<<"\n x= "; cin>>x;

f = ((x<0) || (x>=1)) 0 : (x<0.5) 1 : -1;

cout<<"\n f = "<

Инструкция switch В C/C++ оператор выбора реализован в виде switch (управляющее выражение) { case постоянная1:

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

case постоянная2:

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

case постоянная3:

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

default:

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

} Значение управляющего выражения последовательно сравнивается со значениями в списке постоянная1, постоянная2, …. При обнаружении совпадения выполняется последовательность операторов соответствующей ветки case. Ветка default выполняется в том случае, когда значение управляющего выражения не совпало ни с одной постоянной. Оператор switch может не содержать ветки default.

Отметим важность использования оператора break в каждой ветке оператора выбора. Когда встречается оператор break, выполнение оператора switch прекращается и управление передается на следующий за switch оператор программы. Если оператор break отсутствует, то, после выполнения последовательности операторов выбранной ветки, продолжится выполнение операторов следующих веток до тех пор, пока не встретится break или не закончится оператор switch.

Значение управляющего выражения должно быть целого или символьного типа.

Пример. Подсчет количества гласных в англоязычном тексте, введенном с клавиатуры (См. Липпман С., Ложойе Ж., Му Б. Язык программирования C++. Вводный курс. – М.: ООО И.Д. Вильямс, 2007).

#include int main() { char ch;

int aCnt=0, eCnt=0, iCnt=0, oCnt=0, uCnt=0;

while ( cin >> ch ) switch ( ch ) { case 'a': ++aCnt;break;

case 'e':++eCnt;break;

case 'i':++iCnt;break;

case 'o':++oCnt;break;

case 'u':++uCnt;break;

} cout << "Встретилась a: \t" << aCnt << '\n' << "Встретилась e: \t" << eCnt << '\n' << "Встретилась i: \t" << iCnt << '\n' << "Встретилась o: \t" << oCnt << '\n' << "Встретилась u: \t" << uCnt << '\n';

} Пример. Модификация предыдущего примера – вычисляется общее количество гласных.

int aeiouCnt = 0;

//...

switch ( ch ) { // любой из символов a,e,i,o,u // увеличит значение aeiouCnt case 'a':

case 'e':

case 'i':

case 'o':

case 'u':

++ aeiouCnt;

break;

} Пример. В C/C++ нет диапазонов, как, например, в языке Pascal.

Возможно, здесь проще было бы использовать if.

int day;

cin>>day;

switch (day) { case 1:

case 2:

case 3:

case 4:

case 5: cout<<"\n Workday \n"; break;

case 6:

case 7: cout<<"\n day off \n"; break;

} Пример. Стандартный пример оператора выбора – калькулятор.

double op1,op2; char ch;

cout<<"\nEnter: operand operation operand\n";

cin>>op1>>ch>>op2;

switch(ch){ case '+': cout<<"Result="<

break;

case '*': cout<<"Result="<

break;





case '-': cout<<"Result="<

break;

case '/': cout<<"Result="<

break;

default: cout<<"Nedopustimo"<

} На количество веток, которые может содержать оператор выбора, иммется ограничение. Стандарт С89, устанавливает ограничение в блоков case в операторе switch, а Стандарт С99 увеличил это значение до 1023 блоков case.

Допускается создавать вложенные операторы выбора. Операторы case внутреннего и внешнего switch могут иметь одинаковые константы.

Инструкция цикла for.Общая форма оператора цикла for for (инициализация; условие продолжения;

выражение обновления) инструкция цикла Схема работы инструкции for:

i. вычисление выражения в блоке инициализация;

ii. вычисление условия продолжения и, если условие истинно (т.е.

значение отлично от нуля), выполнение инструкции цикла;

iii. вычисление выражения обновления и снова шаг ii.

Операторы блока инициализация выполняются только один раз, чаще всего в этом блоке задается начальное значение переменной, используемой как счетчик цикла.

В качестве условия продолжения может использоваться любое выражение языка, но, как правило, – это выражение сравнения. Пока это условие истинно, выполняется инструкция цикла. Если при первом вычислении условия продолжения получаем нулевое значение (ложь) инструкция цикла не выполняется ни разу.

После каждого выполнения инструкции цикла вычисляется выражение обновления. С его помощью можно изменить условие продолжения цикла.

Любой блок оператора for может отсутствовать.

Пример. Вычисление чисел Фибоначчи. Условие окончания цикла – достижение предела хранения целых чисел. В операторе for отсутствуют блоки инициализации и обновления.

int f,g,h;

f=g=h=1;

for (;(INT_MAX-f)>0;) { f=g+h;

h=g;

cout<<"\t "<

} Пример. Те же вычисления, что и в предыдущем примере, но с подсчетом количества полученных чисел Фибоначчи. Кроме того вместо int используем long long int. В цикле имеется счетчик – переменная k, но условие продолжения в данном примере не использует значения счетчика.

long long int f,g,h;

int k;

f=g=h=1;

for (k=1;(LLONG_MAX-f)>0;k++) { f=g+h;

h=g;

cout<<"\t "<

g=f;

} cout<<"\n\n"<

Пример. Выход из цикла – нулевое число при вводе данных. В операторе for все управляющие блоки пустые. Выход из цикла производится оператором break.

int x;

double y=0;

for(;;){ cout<<"\n x= "; cin>>x;

if (x==0) break;

y += 1/(double)x;

} cout<<"\n y = "<

С помощью оператора, (запятая) можно включать сразу несколько операторов в любой управляющий блок.

Пример. Все те же числа Фибоначчи. Все операции в одном цикле. В отличие от предыдущих примеров вычисления этих чисел, в теле цикла печатаем f, а не g. Неправильные значения уже не попадут в тело цикла – после вычисления операторов блока обновления будет проверено условие продолжение и только потом (если условие истинно), будет выполнено тело цикла.

// Числа Фибоначчи int f,g,h;

for (f=g=h=1;(INT_MAX-f)>0;f=g+h,h=g,g=f) cout<<"\t "<

В стандартах С99, С11 языка C и стандартах языка C++ разрешено объявлять переменные в блоке инициализации цикла for. Отметим, что в языке С, ориентированном на стандарт C89, этого нет. Объявленные в for переменные являются локальными, и их областью видимости является только тело цикла.

Пример. Тот же пример, но объявления переменных помещены в блок инициализации.

for (int f=1, g=1, h=1;(INT_MAX-f)>0;f=g+h,h=g,g=f) cout<<"\t "<

Пример. Еще одна иллюстрация оператора цикла – тело цикла пустое.

// Числа Фибоначчи int k=1;

for (int f=1,g=1,h=1;(INT_MAX-f)>0;f=g+h,h=g,g=f, k++);

cout<<"\nLimits for int: "<

Замечание. Поместить переменную k в блок инициализации цикла не удастся – переменная нужна после выхода из цикла, где уже не видны переменные, объявленные в цикле (f, g, h).

Цикл с предусловием Цикл с предусловием (т.е. сначала проверка условия и только затем выполнение) реализован инструкцией while (условие продолжения) оператор Схема выполнения цикла следующая i. Вычисляется условие продолжения.

ii. Пока условие продолжения имеет значение, отличное от 0 (т.е.

является истинным), выполняется оператор.

Если при первом вычислении условия продолжения получаем нулевое значение, оператор не выполняется ни разу. В цикле с предусловием оператор может быть также пустым оператором или составным оператором.

Пример. Чтение символов, введенных с клавиатуры, пока не встретится символ. (точка).

char ch = '\0'; // начальное значение while(ch != '.') ch = getchar();

Пример. Цикл выполняется до тех пор, пока не будет введен один из символов 'Y' или 'N'. С помощью такого цикла можно сформировать блок ответа на вопрос. Особенность этого цикла – пустой оператор в теле цикла.

setlocale(LC_CTYPE, "rus"); // русификация консоли char ch;

cout<<"\n Введите Y или N \n";

while(((ch = getchar())!='Y') && (ch!='N')); /* пока не Y или N */ cout<<"ch="<

Пример. Модификация примера из раздела, посвященному циклу for, – вычисление суммы, пока при вводе не встретится нуль.

int x;

double y=0;

while (cin>>x, x!=0) y += 1/(double)x;

cout<<"\n y = "<

Pages:     | 1 | 2 || 4 | 5 |   ...   | 11 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.