Скачать презентацию Выражения и операторы  Выражения • Для вычисления Скачать презентацию Выражения и операторы Выражения • Для вычисления

Выражения и операторы С++.ppt

  • Количество слайдов: 87

Выражения и операторы Выражения и операторы

Выражения • Для вычисления значений используются выражения, которые состоят из операндов, знаков операций и Выражения • Для вычисления значений используются выражения, которые состоят из операндов, знаков операций и скобок. • Операнды задают данные для вычислений. • Операции задают действия, которые необходимо выполнить. • Каждый операнд является, в свою очередь, выражением или одним из его частных случаев, например, константой или переменной.

Выражения • Операции выполняются в соответствии с приоритетами. • Для изменения порядка выполнения операций Выражения • Операции выполняются в соответствии с приоритетами. • Для изменения порядка выполнения операций используются круглые скобки. Уровень их вложенности не ограничен. • Язык С++ предоставляет в наше распоряжение внушительный набор операций: арифметические, логические, поразрядные, операции отношения, выделения памяти, преобразования типа, выбора и т. д.

Простейшие операции С++ Операция ++ -sizeof -++ ! + (<тип>) Краткое описание Унарные операции Простейшие операции С++ Операция ++ -sizeof -++ ! + (<тип>) Краткое описание Унарные операции постфиксный инкремент постфиксный декремент размер объекта или типа префиксный декремент префиксный инкремент логическое отрицание унарный минус унарный плюс преобразование типа

Простейшие операции С++ Операция Краткое описание Бинарные и тернарная операции * умножение / деление Простейшие операции С++ Операция Краткое описание Бинарные и тернарная операции * умножение / деление % остаток от деления + сложение вычитание < меньше <= меньше или равно > больше >= больше или равно == равно

Простейшие операции С++ Операция != && || ? : = *= /= %= += Простейшие операции С++ Операция != && || ? : = *= /= %= += -= , Краткое описание не равно логическое ИЛИ условная операция (тернарная) присваивание умножение с присваиванием деление с присваиванием остаток отделения с присваиванием сложение с присваиванием вычитание с присваиванием последовательное вычисление

Приоритет операций 1 2 3 4 5 6 7 8 9 10 11 12 Приоритет операций 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ( ) [ ] -> : : . ! (не) + - (унарные) ++ -- &(адрес) *(указатель) sizeof new delete. * ->* Выбор члена косвенный */% + - (бинарные) << >> < <= > >= == != &(поразрядное и) ^(исключающее или) | (поразрядное или) && || ? : = *= /= %= += -= &= ^= |= <<= >>= ,

Выражения Операции одинакового приоритета выполняются: – унарные операции, условная операция и операции присваивания выполняются Выражения Операции одинакового приоритета выполняются: – унарные операции, условная операция и операции присваивания выполняются справа налево! – остальные - слева направо a=b=c a+b+c означает a = (b = c) ( a + b) + c Результат вычисления выражения характеризуется значением и типом.

Выражения В С++ различаются так называемые Lзначения (L-value) и R-значения (R-value). Название произошло от Выражения В С++ различаются так называемые Lзначения (L-value) и R-значения (R-value). Название произошло от операции присваивания: – выражение, являющееся L -значением (от слова Left - левый), может располагаться как с левой, так и с правой стороны операции присваивания; – выражение, являющееся R -значением (от слова Right - правый), может располагаться только с правой, но никак не с левой стороны операции присваивания.

Выражения • Выражения возвращают в качестве результата либо L -значения, либо R значения. • Выражения • Выражения возвращают в качестве результата либо L -значения, либо R значения. • Переменная - частный случай L -значения, а константа - частный случай R -значения. • Более общим случаем R -значения является обычное арифметическое выражение. • L -значением в общем случае может быть не только переменная, но и некоторое выражение, ссылающееся на область памяти.

Операции присваивания могут использоваться в программе как законченные операторы. К операциям они относятся потому, Операции присваивания могут использоваться в программе как законченные операторы. К операциям они относятся потому, что могут использоваться в выражениях и формируют результат своего выполнения. Формат операции простого присваивания ( = ): операнд_1 = операнд_2 Левым операндом должно быть L значение, а правым - любое выражение.

Операции присваивания с = a + ( b = 5 ); // эквивалентно b=5; Операции присваивания с = a + ( b = 5 ); // эквивалентно b=5; c=a+b; a = b = c; // эквивалентно b=c; a=b; a=(b=s/k)+n; // эквивалентно b=s/k; a=b+n; a=b=c=d=e+2; // эквивалентно d=e+2; c=d; b=c; a=b;

Операции присваивания • В составных операциях присваивания при вычислении выражения, стоящего в правой части, Операции присваивания • В составных операциях присваивания при вычислении выражения, стоящего в правой части, используется и L -значение из левой части. • *= /= %= += -= &= ^= |= <<= >>= int k; k=8; k*=3; // результат 24 k+=7; // результат 31

Операции присваивания a += 5 ; // эквивалентно a=a+5; a /= b; // эквивалентно Операции присваивания a += 5 ; // эквивалентно a=a+5; a /= b; // эквивалентно a= a/b; b[i] *=n; // эквивалентно b[i]=b[i]*n; (a=b)+=c; // эквивалентно a=b; a=a+c; // a=b - является L -значением

Операции инкремента и декремента Имеют две формы записи – префиксную, ++<операнд>, - - < Операции инкремента и декремента Имеют две формы записи – префиксную, ++<операнд>, - - < операнд >, и постфиксную < операнд >++ < операнд > - В префиксной форме сначала изменяется операнд на 1, и новое значение является результатом операции. В постфиксной форме значением выражения является исходное значение операнда, после чего он изменяется на 1.

Операции инкремента и декремента Выражения с инкрементом и декрементом можно сделать самостоятельным оператором, задав Операции инкремента и декремента Выражения с инкрементом и декрементом можно сделать самостоятельным оператором, задав после выражения точку с запятой. a=5; i=3; c=a*++i; // результат операции с = 20, i=4 i=j=0; k=i++; // результат операции k=0, i=1 l=++j; // результат операции L=1, j=1 --j; // результат операции j=0 l++; // результат операции L=2

Арифметические операции делятся на: – унарные «+» и «-» ; – бинарные: сложение «+» Арифметические операции делятся на: – унарные «+» и «-» ; – бинарные: сложение «+» , вычитание «-» , умножение «*» , деление «/» , получение остатка целочисленного деления «%» . • При делении двух целых чисел – результат целый. • Операция остаток от деления выполняется над целыми (!) 5/2 результат 2 5%2 результат 1

Логические операции К логическим операциям относятся: – !– логическое «не» – отрицание; – &&– Логические операции К логическим операциям относятся: – !– логическое «не» – отрицание; – &&– логическое «и» – конъюнкция; – || – логическое «или» – дизъюнкция. 6>2&&3==3 !(6>2&&3==3) x!=0 && 20/x<5

Операции отношения <, <=, >, >=, ==, != Операнды могут быть арифметического типа или Операции отношения <, <=, >, >=, ==, != Операнды могут быть арифметического типа или указателями. Результатом операции является значение true или false. Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения. int a = 5; int b = 3; a > b // результат true a == b // результат false

Логические поразрядные операции Выполняются в битовых представлениях целых чисел: ~– поразрядная инверсия битов ( Логические поразрядные операции Выполняются в битовых представлениях целых чисел: ~– поразрядная инверсия битов ( «не» ) &– поразрядная конъюнкция ( «и» ) битов |– поразрядная дизъюнкция ( «или» ) битов ^– поразрядное исключающее «или» битов Например: 6&5 // результат 4 6|5 // результат 7 6^5 // результат 3

Сдвиги – >> – сдвиг вправо битового представления целого числа на количество разрядов, задаваемое Сдвиги – >> – сдвиг вправо битового представления целого числа на количество разрядов, задаваемое правым целочисленным операндом, – << – сдвиг влево битового представления целого числа на количество разрядов, задаваемое левым целочисленным операндом. Например: 4<<2 // результат 16: 00000100 << 00010000 5>>1 // результат 2: 00000101 >> 00000010

Тернарная или условная операция Тернарная операция, т. е. операция с тремя операндами, имеет форму Тернарная или условная операция Тернарная операция, т. е. операция с тремя операндами, имеет форму : операнд_1 ? операнд_2 : операнд_3 Операнды вычисляются слева направо. Результат вычисления первого операнда должен быть типа, который можно преобразовать к типу bool. Если результат равен true, то результатом выполнения всей условной операции будет значение второго операнда, иначе - третьего операнда.

Тернарная или условная операция i = ( i < n ) ? i + Тернарная или условная операция i = ( i < n ) ? i + 1 : 1; x < 0 ? –x : x; max = a <= b ? b : a; a < b ? a : b = c * x + d; y = x == 0 ? 1 : 0; minimum = (a < b) ? a : b; status=(age >= 18) ? "adult" : "minor";

Операция следования • Символом операции следования является , (запятая). • Выражения, разделенные этим символом, Операция следования • Символом операции следования является , (запятая). • Выражения, разделенные этим символом, выполняются слева направо строго в том порядке, в котором они перечислены. • Вычисление левого выражения обязательно завершается до того, как начнется вычисление правого выражения.

Операция следования int a=3, b=8, c; //запятая – разделитель, а не операция; c = Операция следования int a=3, b=8, c; //запятая – разделитель, а не операция; c = a++, a+b; // результат: а = 4, с = 12; (b--, c)*=3; // результат: b = 7, с = 36. int m=5, z; z=(m=m*5, m*3); // результат: m=25, z=75 int d, k; k=(d=4, d*8); // результат: d=4, k=32 с=(a=5, b=a*a); // эквивалентно a=5; b=a*a; c=b;

Стандартные математические функции • В выражениях можно применять стандартные математические функции из библиотеки math. Стандартные математические функции • В выражениях можно применять стандартные математические функции из библиотеки math. • При их использовании необходимо подключить файл прототипов функций math. h: #include

Стандартные математические функции • • fabs(< Вещественное выражение>) abs(<Целое выражение>) sqrt(<Вещественное выражение>) exp(<Вещественное выражение>) Стандартные математические функции • • fabs(< Вещественное выражение>) abs(<Целое выражение>) sqrt(<Вещественное выражение>) exp(<Вещественное выражение>) log 10(< Вещественное выражение >) sin(<Вещественное выражение>) cos(<Вещественное выражение>)

Стандартные математические функции • atan(<Вещественное выражение>) • tan(< Вещественное выражение >) • acos(< Вещественное Стандартные математические функции • atan(<Вещественное выражение>) • tan(< Вещественное выражение >) • acos(< Вещественное выражение >) • asin(< Вещественное выражение >) • sinh(<Вещественное выражение>) • cosh(<Вещественное выражение>) В файле conio. h: • Rand () – генерация случайного числа • Srand (<Целое число>) – инициализация генератора случайных чисел.

Преобразования базовых типов • В выражение могут входить операнды различных типов. • Если операнды Преобразования базовых типов • В выражение могут входить операнды различных типов. • Если операнды имеют одинаковый тип, то результат операции будет иметь тот же тип. • Если операнды разного типа, перед вычислениями автоматически выполняются неявные преобразования типов. • Обычно короткие типы приводятся к более длинным, что обеспечивает сохранение значимости и точности: ( char, short ) -> int -> unsigned int -> long -> unsigned long -> float -> double -> long double

Преобразования базовых типов • Если один из операндов имеет тип long double, второй приводится Преобразования базовых типов • Если один из операндов имеет тип long double, второй приводится к этому же типу в любом случае. • Если в выражении нет операндов long double, но есть операнд double, все double преобразуется к этому типу. • В том случае, если нет операндов типа double и long double, но есть операнд float, float тип остальных операндов меняется на float.

Преобразования базовых типов • Если у нас нет вещественных операндов, значит, все они представляют Преобразования базовых типов • Если у нас нет вещественных операндов, значит, все они представляют собой целые типы. • Прежде чем определить тип результата, производится преобразование, называемое приведением к целому: все операнды с типом меньше, чем int, заменяются на int.

Преобразования базовых типов • При приведении к целому типы char, signed char, unsigned char Преобразования базовых типов • При приведении к целому типы char, signed char, unsigned char и short int преобразуются в int. • Тип unsigned short int трансформируется в int, если этот тип достаточен для представления всего диапазона значений unsigned short int, в противном случае unsigned short int заменяется на unsigned int. • Тип wchar_t и перечисления приводятся к наименьшему целому типу, способному представить все их значения.

Преобразования базовых типов • После приведения к целому сравниваются получившиеся типы операндов. • Если Преобразования базовых типов • После приведения к целому сравниваются получившиеся типы операндов. • Если один из них имеет тип unsigned long, long то остальные будут того же типа. • Если в выражении нет объектов unsigned long, но есть объекты типа long, тип long остальных операндов меняется на long. • Преобразование unsigned int в long происходит только в том случае, если тип long способен вместить весь диапазон значений unsigned int.

Преобразования базовых типов • Если же тип long не способен представить весь диапазон unsigned Преобразования базовых типов • Если же тип long не способен представить весь диапазон unsigned int, оба операнда приводятся к unsigned long. • В случае отсутствия операндов типов unsigned long и long, используется тип unsigned int. • Если же нет операндов и этого типа, то к int.

Преобразования базовых типов • В логических операциях и условной операции выполняется неявное преобразование к Преобразования базовых типов • В логических операциях и условной операции выполняется неявное преобразование к типу bool. • При этом любое значение, не равное нулю (даже отрицательное), трактуется как true, а нуль считается false. • При обратных преобразованиях величин типа bool к целому типу значение true преобразуется в целую константу 1, а значение false - в 0.

Преобразования базовых типов • Однако в выражениях с операцией присваивания встречается и обратный вариант, Преобразования базовых типов • Однако в выражениях с операцией присваивания встречается и обратный вариант, когда более "объемный" тип присваивается менее "объемному", например, float в int. • Подобные преобразования связаны с потерей информации (дробная часть отбрасывается), поэтому называются сужающими приведениями (преобразованиями). Компилятор предупреждает о таких операциях.

Явное преобразование типа Операция преобразования типа (часто называемая приведением типа) может записываться в двух Явное преобразование типа Операция преобразования типа (часто называемая приведением типа) может записываться в двух эквивалентных формах: ( тип ) выражение тип ( выражение ) (unsigned long)(x/3+2); (long)25; (unsigned char)123; int(3. 14) результат: 3 float(2/3) результат: 0. 0 int(’A’) результат: 65

Простейшие средства ввода/вывода • В языке С++ нет встроенных средств ввода/вывода - он осуществляется Простейшие средства ввода/вывода • В языке С++ нет встроенных средств ввода/вывода - он осуществляется с помощью средств, содержащихся в стандартных библиотеках. • Для ввода/вывода данных скалярных типов и строк обычно используют стандартные функции ввода/вывода, описанные в библиотеке stdio. h.

Простейшие средства ввода/вывода В библиотеке существуют три вида функций, организующих элементарный ввод с клавиатуры Простейшие средства ввода/вывода В библиотеке существуют три вида функций, организующих элементарный ввод с клавиатуры и вывод на экран: – форматный ввод/вывод – для выполнения операций ввода/вывода над скалярными значениями, символами и строками; – ввод/вывод строк; – ввод/вывод символов.

Простейшие средства ввода/вывода • Ввод чисел, символов и строк с клавиатуры: int scanf(<Форматная строка>, Простейшие средства ввода/вывода • Ввод чисел, символов и строк с клавиатуры: int scanf(<Форматная строка>, <Список адресов переменных>); // возвращает //количество введенных значений или EOF(-1) • Вывод чисел, символов и строк на экран: int printf(<Форматная строка>, <Список выражений>); // возвращает // количество выведенных байтов

Простейшие средства ввода/вывода Форматная строка – это строка, которая помимо символов содержит управляющие спецификации Простейшие средства ввода/вывода Форматная строка – это строка, которая помимо символов содержит управляющие спецификации вида: % [-] [<Целое 1>] [. <Целое 2>] <Формат> где «-» – выравнивание по левой границе, <Целое 1> – ширина поля вывода; <Целое 2> – количество цифр дробной части числа; <Формат> – формат для ввода/вывода значения.

Простейшие средства ввода/вывода #include <stdio. h> int main(){ int i; printf( Простейшие средства ввода/вывода #include int main(){ int i; printf("Введите целое числоn"); scanf("%d", &i); printf("Вы ввели число %d, спасибо!", i); } СРС: Основные форматы для ввода и вывода

Простейшие средства ввода/вывода #include <stdio. h> int main(){ int 1 = 45, int 2 Простейшие средства ввода/вывода #include int main(){ int 1 = 45, int 2 = 13; printf("int 1 = %d| int 2 = %3 d| int 2 = % -4 d|n", int 1, int 2); printf("int 1 = %X| int 2 = %3 x| int 2 = %4 o|n", int 1, int 2); } int 1 = 45| int 2 = 13 | int 1 = 2 D| int 2 = d| int 2 = 15|

Простейшие средства ввода/вывода #include <stdio. h> int main(){ float f = 3. 621; double Простейшие средства ввода/вывода #include int main(){ float f = 3. 621; double dbl = 2. 23; printf("f = %f| f = %4. 2 f| f = %6. 1 f|n", f, f, f); printf("f = %g| f = %e| f = %+E|n", f, f, f); printf("dbl = %5. 2 lf| dbl = %e| dbl = %4. 1 G|n", dbl, dbl); } f = 3. 621000| f = 3. 62| f = 3. 6| f = 3. 621000 e+000| f = +3. 621000 E+000| dbl = 2. 230000 e+000| dbl = 2|

Простейшие средства ввода/вывода #include <stdio. h> int main(){ char ch = 'z', *str = Простейшие средства ввода/вывода #include int main(){ char ch = 'z', *str = "programming"; printf("ch = %c| ch = %3 c|n", ch, ch); printf("str = %14 s|nstr = %s|n", str, str); } ch = z| ch = z| str = programming| str = programming | str = programming|

Простейшие средства ввода/вывода #include <stdio. h> #include <conio. h> 45 67. 8 int main() Простейшие средства ввода/вывода #include #include 45 67. 8 int main() { fghjk int i, result; The number of fields input is 4 float fp; The contents are: 45 67. 800003 f ghjk char c, s[81]; result = scanf_s( "%d %f %c %s", &i, &fp, &c, 1, s, 80 ); printf( "The number of fields input is %dn", result ); printf( "The contents are: %d %f %c %s n", i, fp, c, s); _getch(); }

Простейшие средства ввода/вывода Ввод строк с клавиатуры: char* gets(<Строковая переменная>); // возвращает копию строки Простейшие средства ввода/вывода Ввод строк с клавиатуры: char* gets(<Строковая переменная>); // возвращает копию строки или NULL Вывод строк на экран с переходом на следующую строку: int puts (<Строковая константа или переменная>); puts(″Это строка″); gets(st);

Простейшие средства ввода/вывода Ввод символов с клавиатуры: int getchar(); // возвращает символ или EOF Простейшие средства ввода/вывода Ввод символов с клавиатуры: int getchar(); // возвращает символ или EOF Вывод символов на экран: int putchar(<Символьная переменная или константа>); ch=getchar(); putchar('t');

Простейшие средства ввода/вывода • Частью стандартной библиотеки С++ является библиотека iostream, которая реализована как Простейшие средства ввода/вывода • Частью стандартной библиотеки С++ является библиотека iostream, которая реализована как иерархия классов и обеспечивает базовые возможности ввода/вывода. • Ввод с терминала, называемый стандартным вводом, “привязан” к предопределенному объекту cin. Вывод на cin терминал, или стандартный вывод, привязан к объекту cout

Простейшие средства ввода/вывода #include <iostream. h> int main(){ int i; cout << Простейшие средства ввода/вывода #include int main(){ int i; cout << "Введите целое числоn"; cin >> i; cout << "Вы ввели число” << i << ", спасибо!"; int v 1, v 2; cout << "сумма v 1 и v 2 = "; cout << v 1 + v 2; cout << "n"; }

Блок операторов используется в конструкциях ветвления, выбора и циклов, предусматривающих один оператор. Формат: { Блок операторов используется в конструкциях ветвления, выбора и циклов, предусматривающих один оператор. Формат: { <Оператор>; … <Оператор>; } Пример: Точка с запятой в отличие { от Паскаля является частью оператора, а f=a+b; потому не может a+=10; опускаться перед фигурной скобкой. }

Условный оператор имеет полную и сокращенную форму. if ( выражение ) оператор_1; [else оператор_2; Условный оператор имеет полную и сокращенную форму. if ( выражение ) оператор_1; [else оператор_2; ] Вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю, выполняется первый оператор, иначе - второй. Управление передается на оператор, следующий за условным.

Условный оператор Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в Условный оператор Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок. Блок может содержать любые операторы, в том числе описания и другие условные операторы. if (a<0) b = 1; if (a++) b++; if (ad || a==0)) b++; else {b* = a; a = 0; }

Условный оператор if (a<b){ if (a<c) m = a; else m = c; } Условный оператор if (aa) max = b; else max = a; // max = (b > a) ? b : a; if (int i = fun(t)) a –= i; else a += i; if ((c=a+b)!=5) c+=b; else c=a; if ( x*x + y*y < 1 ) kol = 2; else if ( x*x + y*y < 4 ) kol = 1; else kol = 0;

Условный оператор Правило вложенности. При записи двух вложенных операторов if с одной альтернативной ветвью Условный оператор Правило вложенности. При записи двух вложенных операторов if с одной альтернативной ветвью возникает неоднозначность: не понятно, которому из двух операторов if принадлежит альтернативная ветвь. Для разрешения коллизии используют правило вложения: вложения else всегда относится к ближайшему if.

Условный оператор if (<Условие 1> ) if <Условие 2> <Действие 1> else <Действие 2> Условный оператор if (<Условие 1> ) if <Условие 2> <Действие 1> else <Действие 2> if <Условие 1> { if <Условие 2> <Действие 1> } else <Действие 2>

Оператор switch ( выражение ){ case константное_выражение_1: [список_операторов_1] case константное_выражение_2: [список_операторов_2]. . . case Оператор switch ( выражение ){ case константное_выражение_1: [список_операторов_1] case константное_выражение_2: [список_операторов_2]. . . case константное_выражение_n: [список_операторов_n] [default: операторы ] }

Оператор switch • Вычисляется выражение, записанное после switch, результат выражения switch должен быть целого Оператор switch • Вычисляется выражение, записанное после switch, результат выражения switch должен быть целого типа или его значение приводится к целому; • Полученное значение последовательно сравнивается с константами, которые записаны следом за case • При первом же совпадении выполняются операторы помеченные данной меткой.

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

Оператор switch The number is one 2*2=1 i=1 3*3=1 #include <iostream. h> 2*2=4 i=2 Оператор switch The number is one 2*2=1 i=1 3*3=1 #include 2*2=4 i=2 void main() { 3*3=4 int i; i=3 3*3=9 cout<<"n Enter the number"; i=4 4 is four! cin>>i; The end of work switch(i) { case 1: cout<<"n the number is one"; case 2: cout<<"n 2*2="<

Оператор switch (n_day) n_day от 1 до 5 { Go work! n_day= 6 case Оператор switch (n_day) n_day от 1 до 5 { Go work! n_day= 6 case 1: Clean the yard and relax! case 2: n_day=7 case 3: relax! case 4: case 5: puts("Go work!"); break; case 6: printf("%s", "Clean the yard "); case 7: puts("relax!"); }

Оператор switch #include <iostream. h> int main(){ int a, b, res; char op; bool Оператор switch #include int main(){ int a, b, res; char op; bool f = true; cout << "n. Введите 1 й операнд : "; cin >> a; cout << "n. Введите знак операции : "; cin >> op; cout << "n. Введите 2 й операнд : "; cin >> b; switch (op){ case '+': res = a + b; break; case '-': res = a - b; break; case '*': res = a * b; break; case '/': res = a / b; break; default : cout <<"n. Неизвестная операция"; f = false; } if (f) cout << "n. Результат : " << res; }

Оператор цикла while (<Выражение>) <Оператор>; где <Выражение> – определяет условие выполнения цикла (тип выражения Оператор цикла while (<Выражение>) <Оператор>; где <Выражение> – определяет условие выполнения цикла (тип выражения должен быть арифметическим или приводимым к нему ); <Оператор> – любой оператор С++, в том числе блок операторов. Цикл выполняется до тех пор, пока результат выражения отличен от нуля, т. е. «Истина» . Истина Если условие нарушено сразу при входе в цикл, то тело цикла не выполнится ни разу.

Оператор цикла while #include <stdio. h> int main(){ float Xn, Xk, Dx; printf( Оператор цикла while #include int main(){ float Xn, Xk, Dx; printf("Введите диапазон и шаг изменения аргумента: "); scanf("%f%f%f", &Xn, &Xk, &Dx); printf("| X | Y |n"); //шапка таблицы int X = Xn; while (X<=Xk){ while printf("| %5. 2 f |n", X, X*X + 1); X += Dx; } }

Оператор цикла while #include <stdio. h> void main(void) { int i; char s[]=”Строка”; i=0; Оператор цикла while #include void main(void) { int i; char s[]=”Строка”; i=0; while(s[i] != 0) i++; printf(”Длина строки %d символов. n”, i); } Длина строки 6 символов.

Оператор цикла while Вычислить сумму ряда #include <stdio. h> при x > 1 с Оператор цикла while Вычислить сумму ряда #include при x > 1 с заданной #include точностью e: void main(){ S=1+1/x-1/x 2+1/x 3 -. . . float s, r, x, eps; puts("Input x, eps: "); scanf("%f %f", &x, &eps); if (x<=1) puts("Error. "); else { s=1; r=1/x; while (fabs(r)>eps) while { s+=r; r=-r/x; } printf("Result= %f. n", s); } }

Оператор цикла do while do <Оператор > while (<Выражение>) ; Сначала выполняется простой или Оператор цикла do while do <Оператор > while (<Выражение>) ; Сначала выполняется простой или составной оператор, составляющий тело цикла, а затем вычисляется выражение. Если оно не равно 0 (истинно), тело цикла истинно выполняется еще раз, и так далее, пока выражение не станет равным нулю. Тип выражения должен быть арифметическим или приводимым к нему.

Оператор цикла do while #include <stdio. h> #include <conio. h> int main(void) { long Оператор цикла do while #include #include int main(void) { long int x, r; printf("n Enter an integer: "); scanf_s("%ld", &x); printf("n Reverse-digit number %ld: nnt", x); do { r = x % 10; printf(" %ld", r); x = x / 10; } while ( x != 0); printf("nn Press any key: "); _getch(); }

Оператор цикла do while #include <iostream> int main () { unsigned long n; do Оператор цикла do while #include int main () { unsigned long n; do { cout << "Enter number (0 to end): "; cin >> n; cout << "You entered: " << n << Enter number (0 to end): 12345 "n"; You } while (n != 0); entered: 12345 end): 160277 Enter number (0 to return 0; You entered: 160277 Enter number (0 to end): 0 } You entered: 0

Оператор цикла do while #include <stdio. h> yn = ½ (yn-1 + x/yn-1) #include Оператор цикла do while #include yn = ½ (yn-1 + x/yn-1) #include int main(){ double X, Eps; double Yp, Y = 1; printf("Введите аргумент и точность: "); scanf("%lf%lf", &X, &Eps); do{ Yp = Y; Y = (Yp + X/Yp)/2; }while (fabs(Y – Yp) >= Eps); printf("n %lf", X, Y); } вычисление квадратного корня

Оператор цикла for ( инициализация; выражение; модификации) оператор; Инициализация используется для объявления и присвоения Оператор цикла for ( инициализация; выражение; модификации) оператор; Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько операторов, разделенных запятой. Выражение определяет условие выполнения цикла: если оно не равно 0 (истинно), цикл выполняется.

Оператор цикла for ( инициализация; выражение; модификации) оператор; Модификации выполняются после каждой итерации цикла Оператор цикла for ( инициализация; выражение; модификации) оператор; Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую. Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах!).

Оператор цикла for #include <stdio. h> void main(void) { int i, s, p; // Оператор цикла for #include void main(void) { int i, s, p; // Вычисление суммы чисел от 1 до 99 s = 0; for(i=1; i<100; i++) s += i; for printf(”Сумма чисел от 1 до 99 равна %d. n”, s); // Вычисление произведения чисел от 1 до 7 p = 1; for(i=1; i<=7; i++) p *= i; for printf(”Произведение чисел от 1 до 7 равно %d. n”, p); }

Оператор цикла for #include <iostream> using namespace std; int main () { for (int Оператор цикла for #include using namespace std; int main () { for (int n=10; n>0; n--) { cout << n << ", "; } cout << "FIRE!n"; return 0; } 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

Оператор цикла for(int i=0, float s=0; i<n; i++)s+=i; for(int i=0, float s=0; i<n; i++, Оператор цикла for(int i=0, float s=0; i

Оператор цикла for #include <stdio. h> #include <conio. h> int main(void) { int j Оператор цикла for #include #include int main(void) { int j = 1; char a = 'a'; printf("n Table code characters: n"); for ( ; a <= 'z'; ++a) for printf("n %4 d) %2 c: code%4 d", j++, a, a); printf("nn Press any key: "); _getch(); }

Оператор цикла for #include <stdio. h> void main(void){ int i, k; float F[5] = Оператор цикла for #include void main(void){ int i, k; float F[5] = {1, 12. 6, -7. 3 E 3, 124. 5, -15}; float max. F; k = 0; max. F = F[0]; for(i=1; i<5; i++) { for if(F[i]> max. F) { k = i; //Запомнить номер элемента max. F = F[i]; //Запомнить новое значение } } printf("Номер максимального элемента: %d, значение: %fn", k, max. F); }

Операторы передачи управления В С++ есть пять операторов, изменяющих естественный порядок выполнения вычислений: • Операторы передачи управления В С++ есть пять операторов, изменяющих естественный порядок выполнения вычислений: • оператор выхода из цикла и переключателя break; break • оператор перехода к следующей итерации цикла continue; • оператор возврата из функции return; • оператор безусловного перехода goto; • оператор генерации исключения throw.

Оператор досрочного завершения break • Оператор используется в операторах циклов и выбора: for, while, Оператор досрочного завершения break • Оператор используется в операторах циклов и выбора: for, while, do. . . while, switch для выхода из конструкции до ее завершения. • Он записывается в виде: break; • Оператор break обеспечивает переход на оператор, непосредственно следующий за оператором if, switch или цикла, внутри которых находится оператор break. • Оператор не может обеспечить выход сразу из двух и более вложенных циклов или блоков.

Оператор досрочного завершения break #include <stdio. h> void main() { int s=0, i, k; Оператор досрочного завершения break #include void main() { int s=0, i, k; puts("Input up to 10 numbers. "); for (i=1; i<11; i++) { scanf("%d", &k); if (k<0) break; s+=k; } printf("Result = %d. n", s); }

Оператор досрочного завершения break while ( cin >> in. Buf ) { switch( in. Оператор досрочного завершения break while ( cin >> in. Buf ) { switch( in. Buf[ 0 ] ) { case '-': for ( int ix = 1; ix < in. Buf. size(); ++ix ) { if ( in. Buf[ ix ] == ' ' ) break; // #1 //. . . } break; // #2 case '+': //. . . } }

Оператор continue • Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся Оператор continue • Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации. • Он записывается в виде: continue; • Инструкция continue завершает выполнение только текущей итерации. • Инструкция continue может быть использована только внутри цикла.

Оператор continue #include <stdio. h> void main() { int s=0, i=1, k; puts( Оператор continue #include void main() { int s=0, i=1, k; puts("Input 10 numbers. "); while(i<11) { scanf("%d", &k); if (k<0) { puts("Error. "); continue; } s+=k; i++; } printf("Result = %d. n", s); }

Оператор return • Оператор возврата из функции return завершает выполнение функции и передает управление Оператор return • Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. • Вид оператора: return [ выражение ]; • Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.

Оператор return #include <iostream. h> int sum(int a, int b); // объявление функции int Оператор return #include int sum(int a, int b); // объявление функции int main() { int a = 2, b = 3, c, d; c = sum(a, b); //вызов функции cin >> d; cout << sum(c, d); // вызов функции } int sum(int a, int b) // определение функции { return (a+b); }

Оператор безусловного перехода goto • goto метка; • В теле той же функции должна Оператор безусловного перехода goto • goto метка; • В теле той же функции должна присутствовать ровно одна конструкция вида: метка: оператор; • Оператор goto передает управление на помеченный оператор. • Метка – это обычный идентификатор, областью видимости которого является функция, в теле которой он встречается. • Использование этих операторов усложняет «чтение» программы и свидетельствует о ее непродуманной структуре.

Оператор генерации исключения throw • Исключительную ситуацию (или просто исключение) генерирует либо программист с Оператор генерации исключения throw • Исключительную ситуацию (или просто исключение) генерирует либо программист с помощью оператора throw, либо сама среда выполнения. • Это происходит, когда во время выполнения программы возникают какие-либо ошибки, ошибки например, деление на ноль или переполнение. • Механизм обработки исключений, реализованный в С++, позволяет реагировать на подобные ошибки и таким образом избегать аварийного завершения программы.