
- •Введение
- •План лекции
- •Лекция 1.2. Работа в среде Visual Studio План лекции
- •Практические задания
- •Контрольные вопросы
- •Лекция 2.1. Структура простой программы План лекции
- •Лекция 2.2. Использование функций План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 3: Переменные и константы Лекция 3.1. Встроенные типы данных. План лекции
- •Лекция 3.2. Константы, перечисления, синонимы типа План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 4: Операции и выражения Лекция 4.1. Математические операторы и выражения План лекции
- •Лекция 4.2. Логические операторы и выражения. План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 5: Функции. Лекция 5.1. Личные и встроенные функции. План лекции
- •Основные библиотечные функции c для работы с символьными массивами (string.H)
- •Лекция 5.2. Параметры. Значения по умолчанию. Перегрузка. Рекурсия. План лекции
- •Inline-функции
- •Практические задания
- •Контрольные вопросы
- •Тема 6: Структуры. Классы и объекты. Лекция 6.1. Структуры в языке с. План лекции
- •Лекция 6.2. Классы с открытыми данными. План лекции
- •Лекция 6.3. Конструкторы и деструктор.Cкрытие данных. План лекции
- •Лекция 6.4. Введение в библиотеки классов План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 7: Циклы, выбор вариантов. Лекция 7.1. Циклы. План лекции
- •Лекция 7.2. Выбор из вариантов. План лекции
- •Практические задания
- •Контрольные вопросы
- •Заключение
- •Литература
- •Содержание
Лекция 3.2. Константы, перечисления, синонимы типа План лекции
Константы и перечисления
Особенности использования констант
Использование заголовка limits.h
Использование констант в библиотеках
Синонимы типов
Использование синонимов типов в системных заголовках
Особенности использования типа char
Таблица символов
Функции ввода одиночных символов
Расширенные символы wchar_t
Константы и перечисления
Для определения именованных констант лучше использовать операторы С++ const и enum (перечисления) вместо директивы препроцессора #define.
// Пример 3.2.1
// Объявление констант с помощью директивы #define - язык С
#define MAX 1000
#define PI 3.14
#define Qe -1.6e-19
#define str "Программа завершила работу."
// Объявление констант с помощью оператора const - язык С++
const int MAX=1000;
const float PI=3.14;
const double Qe -1.6e-19;
const char str[]="Программ завершила работу.";
// Перечисляемые константы заданы с помощью директивы #define - язык С
// названия цветов и их условные номера
#define BLACK 0
#define RED 1
#define GREEN 2
#define YELLOW 3
#define BLUE 4
#define MAGENTA 5
#define CYAN 6
#define WHITE 7
// названия кнопок клавиатуры их стандарные номера
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
#define ENTER 13
#define ESC 27
#define BLANK 32
// Перечисляемые константы определены с помощью оператора enum
// язык С++
enum COLOR {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
enum Keys {LEFT=75, RIGHT=77, UP=72, DOWN=80, ENTER=13, ESC=27, BLANK=32};
// Примеры перечисляемых констант заданых с помощью оператора enum
// язык С++
enum BOOL {FALSE,TRUE};
enum ERROR {NOERROR,WARNING=8,SMALLERR,HARDERR=16};
enum DaysOfWeek {Sunday, Monday};
enum MonthOfYear {Jan=1,Feb,Mar, Apr};
enum Shape {Circle, Rectangle, Square, Triangle};
enum Disks {HARD, FLOPPY, CDR, CDRW};
enum WindowStyle { Sizeable, Single, Dialog};
enum Figura { Ocrugnost, Priamougolnic, Kvadrat, Treugolnic};
Особенности использования констант
Константы нужно обязательно инициализировать и их значение нельзя изменить в ходе выполнения программы. Именованные константы улучшают читаемость программы, позволяют избежать нелепых ошибок и увеличивают эффективность выполнения приложения.
// Пример 3.2.2
// определение констант с помощью #define (язык С)
#include <iostream>
using namespace std;
#include <conio.h>
#define s1 "Введите число не больше , чем "
#define s2 "Вы ввели число "
#define s3 "Нажмите клавишу\n"
#define MAX 200
#define PI 3.14
#define QE -1.6E-19
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
#define ENTER 13
#define ESC 27
#define BLANK 32
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
int nomer;
cout << s1 << MAX << endl;
cin >> nomer;
cout << s2 << nomer << endl;
cin.get();
cout << s3;
nomer=getch();
if (nomer==ESC)
cout << "ESC - ";
else if (nomer==ENTER)
cout << "ENTER - ";
else if (nomer==BLANK)
cout << "BLANK - ";
else
cout << "Другие клавиши... - ";
cout << nomer << endl;
cin.get();
}
// Пример 3.2.3
// определение констант с помощью const и enum (язык С++)
#include <iostream>
using namespace std;
#include <conio.h>
const char s1[]="Введите число не больше , чем ";
const char s2[]="Вы ввели число ";
const char s3[]="Нажмите клавишу\n";
const int MAX=2000;
const double PI=3.14151;
const double QE=-1.6e-19;
enum Keys {LEFT=75,RIGHT=77, UP=72, DOWN=80, ENTER=13, ESC=27, BLANK=32};
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
int nomer;
cout << s1 << MAX << endl;
cin >> nomer;
cout << s2 << nomer << endl;
cin.get();
cout << s3;
nomer=getch();
if (nomer==ESC)
cout << "ESC - ";
else if (nomer==ENTER)
cout << "ENTER - ";
else if (nomer==BLANK)
cout << "BLANK - ";
else
cout << "Другие клавиши... - ";
cout << nomer << endl;
cin.get();
}
Использование заголовка limits.h
Для определения минимальных и максимальных значений величин данного типа можно использовать заголовочный файл <limits.h> , в котором оператором #define объявлены имена и заданы значения для минимумов и максимумов величин стандартных типов С++ для данной ОС и типа компьютера .
// Пример 3.2.4
// Определение диапазона значений (limits.h)
#include <iostream>
#include <limits.h>
using namespace std;
void main() {
cout << "Int MIN=" << INT_MIN
<< "\tInt MAX=" << INT_MAX << endl;
cout << "Unsigned Int MIN=" <<0
<< "\tUnsigned Int MAX="<< UINT_MAX << endl;
cout << "Short MIN=" << SHRT_MIN
<< "\tShort MAX=" << SHRT_MAX << endl;
cout << "Unsigned Short MIN="<<0
<<"\tUnsigned Short MAX="<<USHRT_MAX << endl;
cout << "Long MIN=" << LONG_MIN
<< "\tLong MAX=" << LONG_MAX<<endl;
cout << "Unsigned Long MIN="<<0
<<"\tUnsigned Long MAX="<<ULONG_MAX<<endl;
cout << "Char MIN=" << CHAR_MIN
<< "\t\tChar MAX=" << CHAR_MAX << endl;
cout << "Unsigned Char MIN="<<0
<<"\tUnsigned Char MAX="<<UCHAR_MAX<<endl;
cin.get();
}
// Пример 3.2.5
// Использование диапазона значений (limits.h)
#include <iostream>
#include <limits.h>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
short number;
// так можно - cout << "Введите число от -32768 до 32767 > ";
// так лучше - не зависит от ОС
cout << "Введите число от " << SHRT_MIN << " до " << SHRT_MAX << " > ";
cin >> number;
cout <<"Введено число " << number;
cin.get();
}
Использование констант в библиотеках
C помощью директивы препроцессора #define и оператора enum создано множество объявлений констант и перечислений, которые находятся в системных заголовочных файлах. ( см. например math.h , limits.h и т.д. )
// Пример 3.2.6
// Объявление констант (из заголовка math.h)
#define _USE_MATH_DEFINES
#define M_E 2.71828182845904523536
#define M_LOG2E 1.44269504088896340736
#define M_LOG10E 0.434294481903251827651
#define M_LN2 0.693147180559945309417
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.785398163397448309616
#define M_1_PI 0.318309886183790671538
#define M_2_PI 0.636619772367581343076
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.707106781186547524401
// Пример 3.2.7
// Объявление констант (из заголовка limits.h)
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 0xff
#define SHRT_MIN (-32768)
#define SHRT_MAX 32767
#define USHRT_MAX 0xffff
#define INT_MIN (-2147483647 - 1)
#define INT_MAX 2147483647
#define UINT_MAX 0xffffffff
#define LONG_MIN (-2147483647L - 1)
#define LONG_MAX 2147483647L
#define ULONG_MAX 0xffffffffUL
Синонимы типов
Оператор typedef позволяет упростить объявление переменных путем назначения синонима длинным названиям типов.
// Пример 3.2.8
// Пример использования переменных оператора typedef
#include <iostream>
using namespace std;
// примеры личных операторов typedef
typedef unsigned char UCH;
typedef unsigned short int USH;
typedef unsigned long int ULN;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
UCH symbol='Б';
USH age=33;
ULN number=1234567;
cout << symbol << '\t' << age << '\t' << number << endl;
cin.get();
}
// Пример 3.2.9
// Пример использования typedef
#include <iostream>
using namespace std;
typedef unsigned short int USH;
//unsigned short int Func(unsigned short int,unsigned short int);
USH Func(USH,USH);
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
//unsigned short int Width=5,Length; // инициализация
USH Width=5,Length=10;
cout << "Ширина: " << Width << "\n" << "Длина: " << Length << "\n";
cin.get();
//unsigned short int Area=Width*Length; // инициализация выражением
USH Area=Width*Length;
cout << "Площадь: " << Area << "\n";
cin.get();
//unsigned short int Square=Func(Width,6); // инициализация функцией
USH Square=Func(Width,6);
cout << "Площадь: " << Square << "\n";
cin.get();
}
//unsigned short int Func(unsigned short int a,unsigned short int b)
USH Func(USH a,USH b) {
return a*b;
}
Использование синонимов типов в системных заголовках
C помощью оператора typedef для программирования в Windows спроектировано много новых типов данных, объявление которых находится в системных заголовочных файлах. ( см. например windef.h)
// Пример 3.2.10
// Использования typedef (из заголовка windef.h)
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef unsigned char UCHAR;
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef float FLOAT;
typedef int INT;
typedef unsigned int UINT;
Особенности использования типа char
При работе с типом char используется таблица символов компьютера. Каждый символ в этой таблице имеет свой номер. На различных компьютерах (в разных ОС) применяются различные таблицы символов (кодовые таблицы). Работая с символами, вы на самом деле работаете с их числовыми кодами. При работе в Windows и DOS используется набор из 256 символов, называемый ASCII (American Standard Code for Information InterChange).
Таблица символов
Программа Charmap системы Windows показывает таблицу символов на экране. Первая ее половина (0-128) стандартная. Это служебные символы (0-31), специальные символы, цифры и буквы английского алфавита. Вторая – содержит символы псевдографики и национальных алфавитов и зависит от страны и ОС. Русские символы при работе в Windows и DOS имеют различные номера! Для работы с символами национальных алфавитов нужно использовать тип unsigned char.
// Пример 3.2.11
// Преобразования символов в целые и целых в символы
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned char ch='Б';
cout << "Символ:" << ch << "\t\tНомер:" << (int) ch << endl;
cin.get();
int nch=65;
cout << "Номер:" << nch << "\t\tСимвол:" << (char) nch << endl;
cin.get();
nch=nch+32;
cout << "Номер:" << nch << "\t\tСимвол:" << (char) nch << endl;
cin.get();
nch=(int)ch-1; // явное преобразование
//nch=ch-1; // неявное преобразование
cout << "Номер:" << nch << "\t\tСимвол:" << (char) nch << endl;
cin.get();
// печать таблицы символов
for (int i=0; i<=255; i++) { // повторение, цикл
cout << "Номер:" << i << "\t\tСимвол:" << (char) i << endl;
}
cin.get();
}
Функции ввода одиночных символов
Для ввода одиночных символов часто используются функции getchar() из <stdio.h> - ввод с эхом и нажатием Enter или getch() из <conio.h> - ввод без эха и нажатия Enter (например для приостановки работы приложения).
// Пример 3.2.12
// Функции для ввода символов с клавиатуры
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned char ch='Б';
cout << "Символ : " << ch << "\t\tНомер : " << (int) ch << '\n';
//Ввод ASCII-символа с эхом
cout << "Введите символ\n";
//ch=getchar(); // C
ch=cin.get();// C++
cout << "Символ : " << ch << "\t\tНомер : " << (int) ch << '\n';
//Ввод символов без эха
cout << "Введите символ\n";
ch=getch();
cout << "Символ : " << ch << "\t\tНомер : " << (int) ch << '\n';
_getch();
}
Расширенные символы wchar_t
В настоящее время получает распространение набор 2-х байтовых символов Unicode, с помощью которого возможно кодировка 65535 символов, входящих в большинство языков мира. Для работы с символами Unicode в Standart C++ введен тип данных wchar_t.
// Пример 3.2.13
// Расширенные символы (Wide Char)
#include <iostream>
using namespace std;
int main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
wchar_t ch='A'; // англ.
cout << "Символ : " << ch << "\tКод символа : " << (unsigned)ch
<< "\tРазмер символа : " << sizeof(ch) << endl;
ch='А'; // русск.
cout << "Символ : " << (char)ch << "\tКод символа : " << (unsigned)ch
<< "\tРазмер символа : " << sizeof(ch) << endl;
wchar_t str[]= L"abcd";
cout << sizeof(str) << endl;
cout << str << endl;
cin.get();
}