- •Лекция 4 Операции и выражения
- •Понятие выражения и операции
- •Классификация операций
- •Приоритеты (ранги) операций
- •Арифметические операции
- •Примеры использования арифметических операций Выделение цифр в целом числе
- •Выделение цифр в вещественном числе
- •Арифметические операции над переменными символьного типа
- •Операции инкремента и декремента
- •Особенности выполнения операций инкремента и декремента
- •Операции присваивания
- •Примеры использования
- •Операции отношения
- •Логические операции
- •Особенности выполнения логических операций
- •Примеры использования логических операций
- •Логические выражения и примеры их записи
- •Поразрядные логические операции
- •Примеры выполнения поразрядных логических операций:
- •Операции поразрядного сдвига
- •Дополнительные операции Операции доступа к компонентам структурированного объекта
- •Операции доступа к адресуемым компонентам классов
- •Определение размера sizeof
- •Вызов функции ( )
- •Индексация [ ]
- •Операция запятая ,
- •Операция расширения области видимости ::
- •Преобразование типа
- •Правила преобразования типов
- •Примеры преобразования типов
- •2. Особенности преобразования типов int и double:
- •7. Проанализируйте преобразование типов в операторах присваивания:
- •8. Приведение типа в случае использования указателей:
- •9. Преобразование старшего типа к младшему удобно использовать для выделения отдельных частей переменной или константы:
- •10. С помощью приведения типа можно получить дробную часть числа:
- •Программирование вычисления алгебраических выражений
- •Определение первого символа вводимого значения
- •Контроль правильности ввода значения переменной
- •Основные встроенные (стандартные) функции
- •Пример вычисления по формуле
- •Замечания по программированию алгебраических выражений
- •Особенности представления чисел по двоичному основанию*
- •Особенности выполнения арифметических операций над вещественными числами*
- •Операции умножения и деления
- •Операции сложения и вычитания
- •Особые ситуации Ошибки округления
- •Ошибки переполнения
- •Потеря (исчезновение) порядка
- •Катастрофическая потеря порядка
- •Потеря значащих цифр
- •Особенности выполнения операций отношения (сравнения)
- •Обратить внимание
- •Правила работы с данными вещественных типов
Программирование вычисления алгебраических выражений
Ввод символов до некоторого ограничителя //(в данном случае х)
int main(){
char ch;
cout << "Input char (end - x)\n ";
do {
cout << ":"; //приглашение к вводу
cin >> ch; //ввод символа завершаем нажатием <enter>
} while (ch != 'x');
cout << " <x> -- end " << endl;
_getch();
return 0;
}
getchar() – ждет ввода символа и нажатия <enter> //функции С
getche() – вводит символ c эхо и не ждет <enter>
getch(), _getch() – ждет ввода символа и нажатия <enter>
while ((ch=getche()) !=’\r’) //пока не нажата клавиша <enter>
{ if ch==’ ‘ …..
else ……}
Определение первого символа вводимого значения
Функция (метод) peek( ) объекта cin класса istream возвращает из потока очередной символ (оставляя его в потоке), или EOF, если достигнут конец файла;
//1
char c[10], c2;
cout << "Type 'abcde': ";
//abcde, набранные на клавиатуре, попадают в буфер ввода;
//принимающий объект cin класса istream с помощью своего метода peek( ) извлекает // из буфера ввода очередной (первый, в данном случае) символ, т.е. а (оставляя его там)
c2 = cin.peek( ); //определяет первый вводимый символ
cin.getline( &c[0], 9 ); //с помощью метода getline() в символьный массив с //вводится строка abcde
cout << c2 << " " << c << endl; //вывод символа a и строки abcde
//2
double f;
char c2;
cout << "Type 123.456: ";
c2 = cin.peek();
cin >> f;
cout << c2 << " " << f << endl; //1 123.456
//3
char c, c2;
cout << "Type simvol a: ";
c2 = cin.peek( ); //определяет вводимый символ
cin >> c;
cout << c2 << " " << c << endl; //a a
Контроль правильности ввода значения переменной
При вводе значения любого из целочисленных типов, превосходящего максимально допустимое значение для диапазона типа соответствующей переменной, фактически вводится неверное значение. Чтобы обнаружить ошибку, необходимо контролировать вводимые данные.
Контроль правильности ввода значения некоторого типа можно реализовать, например, таким образом:
//проверка ввода значения из диапазона значений типа unsigned char
unsigned int uchar; //более широкий тип unsigned int
do {
cout << "input unsigned char:" << endl;
cin >> uchar;
} while(uchar < 0 || uchar > UCHAR_MAX); //диапазон значений типа unsigned char
//проверка ввода значения из диапазона значений типа int
float f; //более широкий тип float
int i;
do {
cout << "input int:" << endl;
cin >> f;
} while(f < INT_MIN || f > INT_MAX);
i=f;
cout <<"ok " << i << endl;
Если компилируем как C++:
#define _USE_MATH_DEFINES
#include <cmath>
Если компилируем как C:
#define _USE_MATH_DEFINES
#include <math.h>
Математические константы
Symbol |
Expression |
Value |
M_E |
e |
2.71828182845904523536 |
M_LOG2E |
log2(e) |
1.44269504088896340736 |
M_LOG10E |
log10(e) |
0.434294481903251827651 |
M_LN2 |
ln(2) |
0.693147180559945309417 |
M_LN10 |
ln(10) |
2.30258509299404568402 |
M_PI |
pi |
3.14159265358979323846 |
M_PI_2 |
pi/2 |
1.57079632679489661923 |
M_PI_4 |
pi/4 |
0.785398163397448309616 |
M_1_PI |
1/pi |
0.318309886183790671538 |
M_2_PI |
2/pi |
0.636619772367581343076 |
M_2_SQRTPI |
2/sqrt(pi) |
1.12837916709551257390 |
M_SQRT2 |
sqrt(2) |
1.41421356237309504880 |
M_SQRT1_2 |
1/sqrt(2) |
0.707106781186547524401 |