seminar_1-5.ppt
- Количество слайдов: 37
Тема занятия: Базовые конструкции языка С++: раелизация ветвления
Проверочная работа № 3. Вопросы: 1. Операции увеличения на 1 (+ +). На листе с ответом обязательно указать: 2. Операции уменьшения на 1 (- -). Номер работы: 3 Дата выполнения: 3. Операция определения размера sizeof. Группа: Фамилия: 4. Операции отрицания (-, ! и ~). 5. Операция деление (/). Вариант 1 - Вопрос 1, 12 6. Операция остаток от отделения (%). Вариант 2 - Вопрос 2, 11 Вариант 3 - Вопрос 3, 10 7. Операции сдвига (<< и >>). Вариант 4 - Вопрос 4, 9 8. Операции отношения (<, <=, >, >=, ==, !=). Вариант 5 - Вопрос 5, 8 Вариант 6 - Вопрос 6, 7 9. Поразрядные операции (&, |, ^). 10. Логические операции (&& и ||). 11. Операции присваивания (=, +=, -=, *=). 12. Условная операция (? : ).
Проверочная работа 3. #include <iostream. h> int main() { int a = 1; cout << (a += 2) << endl; int b = 1, c = 2; cout << (c += b += a += 2) << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; Запишите в тетради, что будет выведено на экран после запуска программы int x = 10; int y = 10; x++; ++y; cout << "x = " << x << endl << "y = " << y << endl; x = y = 10; cout << "x++ = " << x++ << endl << "++y = " << ++y << endl; } x = y = 10; cout << "x-- = " << x-- << endl << "--y = " << --y << endl;
Проверь себя // Модификация с присваиванием int a = 1; cout << (a += 2) << endl; int b = 1, c = 2; cout << (c += b += a += 2) << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; // Операции инкремента и декремента int x = 10; int y = 10; x++; ++y; cout << "x = " << x << endl << "y = " << y << endl; x = y = 10; cout << "x++ = " << x++ << endl << "++y = " << ++y << endl; x = y = 10; cout << "x-- = " << x-- << endl << "--y = " << --y << endl;
ПОВТОРИМ
Инициализация переменных // Инициализация булевой переменной bool t = true; bool f = false; // Инициализация переменных типов char с //помощью небольших чисел signed char c 1 = -5; unsigned char c 2 = 89; unsigned char c 3 = -5; // c 3 => 251 //. . . и символьных литералов unsigned char c 4 = 'Y'; // ASCII-код 'Y' равен 89 // Инициализация переменных других //целочисленных типов short int s 1 = -400; short s 2 = -400; // short = short int = signed short int unsigned short s 3 = 400; int i 1 = -1234567890; signed int i 2 = -1234567890; // int = signed int unsigned int ui = 4294967295; //=== Инициализация переменных типов с плавающей точкой ===// // Содержимое переменных f 1 и f 2 одинаково. //Непоместившиеся цифры отбрасываются float f 1 = 2. 718284590452353602874713527; float f 2 = 2. 7182818; // Содержимое переменных d 1 и d 2 одинаково double d 1 = 2. 718284590452353602874713527 E-9; double d 2 = 2. 7182845904523 E-9; //=== Объявление константных переменных ===// const int C 3; // Ошибка компиляции! Нужно инициализировать const int C 4 = 115; // Ок C 4 = 125; // Ошибка компиляции! //Нельзя изменить константную переменную
Выполним задания
Выполним задания Найдите синтаксические и логические ошибки в приведенных ниже конструкциях а) int a; b; c; double x, б) int i; i > 0; в) int k = 3; 3 = k; г) int a, b, c; float a, b, c; д) int i = 0; j = 0; int j; е) double x, y = 1. x = sin(y). y = sin(x). ж) float x = -0. 5; float y = |х|; з) float x = 1. 5; float i = 2*exp(x)); и) int a, b; cout >> b; cin << a; к) float x, y, z; z = pow(xy); л) float x, y, z; z = sin(x, y); м) int a = 1; int b = cos(a);
Определите, что будет выведено на экран в результате выполнения приведенных ниже листингов. Предполагайте, что переменные n, m, x, y объявлены следующим образом: int n = 1, m = 2; float x = 2. 5, y = 5; а) cout << ”x = x”; б) cout << ”x = ” << x; в) cout << x <<”=”<< x; г) cout << x+y << ”!”; д) cout << x/y << ”; ”; е) cout << n/x ; ж) float z = n + m * x; з) cout << xxnxx”; cout << ”z/2=”<<z/2;
Найдите синтаксические ошибки в приведенных ниже языковых конструкциях. Учтите, что переменные a, b, c объявлены как целые (int), а x, y – как вещественные (float). а) if(5 > b) { a = 25*x + y; 5 = b; } else cout<<”oshibka!”; г) if(a > b) a > b; else a < b; б) if(a = b) cout<<”a ravno b!”; else { ж) if(5 > b > c) cout<<”OK!”; з) if((5 > b)(b > c)) cout<<”OK!”; cout<<”a i b ne ravny”; } д) if(a > b); b = 5; else; x = y; в) if(x > 0) { y = 2*sin(x)*exp(-x); a = sqrt(x*x); else } y = 0; е) if(x > 0) { y = 2*sin(x)*exp(-x); } a = sqrt(x*x); else y = 0;
Когда нижеприведенное условие будет ложными, а когда истинными? ? if ((user_owns_a_dog) || (user_owns_a_cat))
Когда нижеприведенное условие будет ложными, а когда истинными? ? if ((user_owns_a_dog) || (user_owns_a_cat)) Ответ условие истинно если: - у пользователя есть собака, - у пользователя есть кошка, - у пользователя есть и собака, и кошка Условие будет ложным только в том случае, если у пользователя нет ни собаки, ни кошки.
Когда нижеприведенное условие будет ложными, а когда истинными? ? if ((user_owns_a_dog) && (dog == dalmatian))
Когда нижеприведенное условие будет ложными, а когда истинными? ? if ((user_owns_a_dog) && (dog == dalmatian)) Ответ условие ложно в случаях: -если у пользователя нет собаки -если собака пользователя не долматин Чтобы условие было истинным, у пользователя должна быть собака и она должна быть породы долматин.
К какому из if отнести данную часть else? if ( min <= i ) if ( min == i) ++s; else { min = i; s = 1; }
К какому из if отнести данную часть else? if ( min <= i ) if ( min == i) ++s; else { min = i; s = 1; } Судя по отступам, программист предполагает, что else относится к самому первому, внешнему if. Однако в С++ неоднозначность висячих else разрешается соотнесением их с последним встретившимся if.
К какому из if отнести данную часть else? if ( min <= i ) Судя по отступам, программист предполагает, что else относится к самому первому, внешнему if. if ( min == i) Однако в С++ неоднозначность висячих else разрешается соотнесением их с последним встретившимся if. ++s; Таким образом, в действительности предыдущий фрагмент означает следующее: else { if ( min <= i ) min = i; { s = 1; if ( min == i) } ++s; else { min = i; s = 1; } }
К какому из if отнести данную часть else? Одним из способов разрешения данной проблемы является заключение внутреннего if в фигурные скобки: if ( min <= i ) { if ( min == i) ++s; } else { min = i; s = 1; }
На предыдущем занятие мы говорили о…
Базовые конструкции языка С++: ветвление Ветвление задает выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия.
Реализация конструкции ветвления 1. Условная операция (? : ) операнд_1 ? операнд_2 : операнд_3 max = (b > a)? b : a; //если (b > a), то max = b, иначе max = a; 2. Условный оператор IF используется для разветвления процесса вычислений на два направления, позволяет определить действие, когда условие истинно и альтернативное действие, когда условие ложно. if ( выражение ) оператор_1; [else оператор_2; ] if (a<b) { m = a; } else {m = b; }
Реализация конструкции ветвления 3. Оператор множественного выбора switch Форма записи оператора множественного выбора switch (/*переменная или выражение*/) { case /*константное выражение 1/*: { /*группа операторов*/; break; } case /*константное выражение 2*/: { /*группа операторов*/; break; } //. . . default: { /*группа операторов*/; } } 1. анализируется переменная или выражение 2. осуществляется переход к той ветви программы, для которой значение переменной или выражения совпадает с указанным константным выражением. 3. выполняется оператор или группа операторов пока не встретиться зарезервированное слово break или закрывающая фигурная скобочка. 4. Если значение переменной или выражения не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default и выполняется оператор или группа операторов данной ветви.
Поведение оператора Switch Condition Результат Значение константного выражения (после приведения типа) совпадает с заданным значением управляющего выражения. Управление передаётся на операторы, следующие за этой меткой. Со значением управляющего выражения не совпадает ни одно из константных выражений Управление передаётся на операторы, следующие за меткой default. меток case. Метка default присутствует. Со значением управляющего выражения не совпадает ни одно из константных выражений Управление передаётся на операторы, следующие за оператором switch. меток case. Метка default отсутствует. Если подходящее константное выражение было найдено, то после выполнения операторов, соответствующих этой метке case, управление беспрепятственно перейдёт к операторам последующих меток case или default. Оператор break используется для остановки выполнения и передачи управления на оператор, следующий за оператором switch. Без использования оператора break, будет выполняться каждый оператор, начиная с метки case, значение константного выражения которой совпало со значением управляющего выражения, вплоть до конца оператора switch, включая операторы метки default.
Примеры switch( i ) { case -1: n++; break; case 0 : z++; break; case 1 : p++; break; } switch( i ) { case -1: n++; break; case 0 : z++; break; case 1 : p++; break; default : cout<< «yes» ; }
использование оператора break В C++, если встречает вариант, соответствующий условию оператора switch, то он подразумевает, что все последующие варианты тоже соответствуют условию. Оператор break указывает завершить текущий оператор switch и продолжить выполнение программы с первого оператора, следующего за оператором switch. Если удалить оператор break из программы, то программа выведет не только требуемое сообщение, но и сообщение для всех последующих вариантов (потому что если один вариант является истинным, то и все последующие варианты в C++ рассматриваются как истинные).
Примеры (в чем отличие? ? ) switch( f ) { case 'A': c++; case 'a': l++; default : t++; } switch( f ) { case 'A': c++; break; case 'a': l++; break; default : t++; break; }
Пример: фрагмент программы, которая складывает, вычитает, умножает, делит два числа введенных с клавиатуры #include <stdafx. h> #include <iostream> int main() { int count; // переменная для выбора в switch double a, b; // переменные для хранения операндов cout << "Vvedite pervoe chislo: "; cin >> a; cout << "Vvedite vtoroe chislo: "; cin >> b; cout << "Vibirite deistvie: 1 -clojenie; 2 -vichitanie; 3 -ymnojenie; 4 -delenie: "; cin >> count;
Пример: фрагмент программы, которая складывает, вычитает, умножает, делит два числа введенных с клавиатуры switch (count) // начало оператора switch { case 1: // если count = 1 { cout << a << " + " << b << " = " << a + b << endl; // выполнить сложение break; } case 2: // если count = 2 { cout << a << " - " << b << " = " << a - b << endl; // выполнить вычитание break; } case 3: // если count = 3 { cout << a << " * " << b << " = " << a * b << endl; // выполнить умножение break; } case 4: // если count = 4 { cout << a << " / " << b << " = " << a / b << endl; // выполнить деление break; } default: // если count равно любому другому значению cout << "Nepravilni vvod" << endl; } getch (); return 0; }
Пример: фрагмент программы, которая складывает, вычитает, умножает, делит два числа введенных с клавиатуры
Разберем пример: особенности и маленькие хитрости использования оператора switch Пользователь вводит температуру воды (t). Нужно дать ему ответ в каком состоянии вода: газообразном, жидком или твердом. РЕШЕНИЕ Условия состояния воды t < = 0 – лед; 0 < t < 99 – жидкость ; t >=100 – пар.
пример: определение состояния воды #include <iostream> #include <cmath> void main() { int t=0; cout<<"Введи температуру: "; cin>>t; switch (t) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79: case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87: case 88: case 89: case 90: case 91: case 92: case 93: case 94: case 95: case 96: case 97: case 98: case 99: cout<<"Вода в жидком состоянииn"; break; default: t = t/abs(t); //маленькая хитрость - опредлим знак t switch (t) { case 1: cout<<"Вода в газообразном состоянииn"; break; case -1: cout<<"Вода в твердом состоянии"; break; } //это тот случай, когда default не нужен } }
Домашнее задание 1. Выучить - Павловская Т. А. С/С++. Программирование на языке высокого уровня – Спб. : Питер, 2004. – 461 с. : ил. ISBN 5 -94723 -568 -4 – раздел - Базовые конструкции структурного программирования: реализация ветвления (if, switch, условный оператор) Приведите примеры: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Операции увеличения на 1 (+ +). 4 примера Операции уменьшения на 1 (- -). 4 примера. Операция определения размера sizeof. 4 примера. Операции отрицания (-, ! и ~). По 2 примера. Операция деление (/). 4 примера. Операция остаток от отделения (%). 4 примера. Операции сдвига (<< и >>). 4 примера. Операции отношения (<, <=, >, >=, ==, !=). По 2 примера. Поразрядные операции (&, |, ^). По 2 примера. Логические операции (&& и ||). По 2 примера. Операции присваивания (=, +=, -=, *=). По 2 примера. Условная операция (? : ). 3 примера. Виды преобразования типов данных. 3 примера. 2. Придумать пример и реализовать его операторами if и switch Напишите алгоритм и программу на отдельном листе
seminar_1-5.ppt