- •Введение
- •План лекции
- •Лекция 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: Переменные и константы Лекция 3.1. Встроенные типы данных. План лекции
Стандартные типы
Диапазон значений
Определение размера типа
Имена переменных
Объявление переменных и инициализация
Усечение дробной части
Переполнение
Символы
Строки
Логический тип
Стандартные типы
Программы обладают способностью хранить в ОЗУ (RAM) используемые данные посредствам переменных и констант. ОЗУ компьютера можно рассматривать как ряд ячеек. Одна ячейка ОЗУ имеет размер равный одному байту (byte). Байт состоит из 8 бит (bit), двоичных чисел 0 или 1. Все ячейки последовательно пронумерованы, начиная с нуля. Эти номера называют адресами (address) памяти. Переменная, в зависимости от ее типа (type), занимает в ОЗУ определенный размер (size) - одну или несколько смежных ячеек памяти, в которых можно хранить некоторое значение (value). Имя переменной можно представить себе как надпись на ячейке памяти, по которой, не зная настоящего адреса памяти, можно ее найти. Базовые (встроенные в компилятор) типы переменных , используемые в программах на С++ , представлены в следующей таблице :
Тип (Type) |
Размер (Size) |
Диапазон (Range) |
unsigned char |
1 байт |
от 0 до 255 (256 символов) |
char |
1 байт |
от –128 до 127 |
short int, short |
2 байта |
от –32768 до 32767 |
long int, long |
4 байта |
от –2147483648 до 2147483647 |
int |
2 байта |
от –32768 до 32767 |
unsigned short int |
2 байта |
от 0 до 65535 |
unsigned long int |
4 байта |
от 0 до 4294967295 |
unsigned int |
2 байта |
от 0 до 65535 |
float |
4 байта |
1.2E-38 - 3.4E38 (точность 7 знаков) |
double |
8 байтов |
2.2E-308 - 1.8E308 (точность 15 знаков) |
long double |
10 байтов |
3.4E-4932 - 1.1E4932 (точность 18 знаков) |
bool |
1 байт |
true или false |
wchat_t |
2 байта |
от 0 до 65535 (символы Unicode) |
Примечание : размеры переменных могут отличаться в зависимости от используемого компилятора, версии компилятора, типа компьютера и ОС.
Диапазон значений
Диапазон допустимых значений целых переменных можно определить используя научный калькулятор Windows, применив следующую методику (например для беззнакового символа):
unsigned char занимает 1 байт в оперативной памяти – это 8 бит;
наибольшее двоичное число, которое можно сохранить 8 битах – это 11111111 ( у величин со знаком (signed) левый старший бит определяет знак числа: 0 - положительное число, 1- отрицательное ) ;
наберите 8 двоичных единиц в научном калькуляторе Windows, предварительно выбрав на нем двоичную систему (Bin)
переключите калькулятор в десятичную систему счисления (Dec).
Определение размера типа
В программах на С++ для определения размера выделенной под переменную памяти используется встроенная функция sizeof.
// Пример 3.1.1
// Определение размера типов переменных
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
cout << "Размер целого int:\t\t" << sizeof(int) << " байта.\n";
cout<<"Размер целого short:\t\t" << sizeof(short) << " байта.\n";
cout<<"Размер целого long:\t\t" << sizeof(long) << " байта.\n";
cout<<"Размер символа char:\t\t" << sizeof(char) << " байт.\n";
cout<<"Размер вещественного float:\t"<<sizeof(float)<< " байта\n";
cout<<"Размер вещественного double:\t"<<sizeof(double)<<" байтов.\n";
cout<<"Размер long double:\t"<<sizeof(long double)<<" байтов.\n";
cout<<"Размер типа bool:\t\t" << sizeof(bool) << " байт.\n";
cout<<"Размер символа wchar_t :\t"<<sizeof(wchar_t)<<" байта.\n";
cin.get();
}
Имена переменных
При объявлении переменной нужно указать ее тип и дать ей имя. Имя переменной должно начинаться с буквы или _ . Нельзя использовать в качестве имен ключевые слова языка (int, unsigned, sizeof и т.д.) Пробелы внутри имени недопустимы. Имена даются по смыслу переменных. С++ различает малые и большие буквы. На практике обычно применяется три формы записи имен: с подчеркиванием (my_Car ), верблюжья(myCar) и венгерская (iCar-целое; lCar-длинное целое и т.д.).
Объявление переменных и инициализация
Одним оператором можно объявить сразу же несколько переменных одного типа. При объявлении переменных их рекомендуется инициализировать – определить начальное значение. Инициализацию можно выполнить с помощью неименованной константы, другой ранее объявленной переменной или константы, выражения и даже путем вызова функции. C++ по умолчанию инициализации не выполняет и во всех переменных находятся неопределенные значения – мусор.
// Пример 3.1.2
// Пример использования переменных и инициализация
#include <iostream>
using namespace std;
// прототип функции для вычисления площади прямоугольника
unsigned int FArea(unsigned int, unsigned int);
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned int Length; // инициализация не проведена
unsigned int Width=5; // инициализация константой
cout << "Ширина: " << Width << "\t" << "Длина: " << Length << "\n";
cin.get();
Length=10; // присваивание
cout << "Ширина: " << Width << "\t" << "Длина: " << Length << "\n";
cin.get();
unsigned int Area=Width*Length; // инициализация выражением
cout << "Ширина: " << Width << "\t" << "Длина: " << Length << "\n";
cout << "Площадь: " << Area << "\n";
cin.get();
unsigned int S=FArea(Width-1,Length+2); // инициализация с помощью
//функции
cout << "Ширина: " << Width-1 << "\t";
cout << "Длина: " << Length+2 << "\t";
cout << "Площадь: " << S << "\n";
cin.get();
}
// реализация функции для вычисления площади прямоугольника
unsigned int FArea(unsigned int a, unsigned int b) {
return a*b;
}
Усечение дробной части
При присвоении целым величинам вещественных значений происходит усечение (truncation) дробной части вещественного числа и работа программы продолжается.
// Пример 3.1.3
// Усечение дробной части
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
double dVar=1.8;
int iVar=0;
cout << "Перед : dVar=" << dVar << "\t\t" << "iVar=" << iVar << endl;
iVar=dVar; // потеря дробной части
cout << "После : dVar=" << dVar << "\t\t" << "iVar=" << iVar << endl;
cin.get();
// Вычисление рублей и копеек
long double sum; // сумма денег
int r,k; // рубли и копейки
cout << "Введите сумму денег : ";
cin >> sum;
r=sum; // рубли
k=(sum-r)*100; // копейки
cout << "Сумма =" << r << " руб. " << k << " коп." << endl;
cin.get();
}
Переполнение
При работе с числовыми величинами возможно их переполнение - overflow. Значение сбрасывается в минимально/максимально возможное для данного типа и работа программы продолжается.
// Пример 3.1.4
// Переполнение беззнакового целого
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned short int small; // диапазон 0-65535
small=65535;
cout << "small: " << small << "\n";
small=small+1; // увеличить на 1 -> больше,чем допустимо
cout << "small: " << small << "\n";
small++; // увеличить на 1
cout << "small: " << small << "\n";
small=small-1; // уменьшить на 1
cout << "small: " << small << "\n";
small--; // уменьшить на 1
cout << "small: " << small << "\n";
cin.get();
}
// Пример 3.1.5
// Переполнение знакового целого
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
short int small; // диапазон от -32768 до 32767
small=32767;
cout << "small: " << small << endl;
small++;
cout << "small: " << small << endl;
small--;
cout << "small: " << small << endl;
//small=0;
//cout << "Введите целое число от -32768 до 32767 " << endl;
//cin >> small;
//cout << "Введено число " << small;
cin.get();
}
Символы
Для работы с одним символом применяется тип char. Нужно обязательно понимать, что в ОЗУ хранятся не изображения символов, а их числовые номера.
// Пример 3.1.6
// Преобразования символов в целые и целых в символы
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
char ch='A';
cout << "Символ:" << ch << "\t\tНомер:" << (int) ch << endl;
int code=65;
cout << "Символ:" << (char)code << "\t\tНомер:" << code << endl;
cin.get();
}
Строки
Для работы со строками в С++ применяются символьные массивы (строки С-стиля), состоящие из элементов типа char и заканчивающиеся управляющим символом ‘\0’ (null symbol) или объекты-строки.
// Пример 3.1.7
// Строки С-стиля и строки-объекты
#include <iostream>
#include <string> // библиотека языка С++
using namespace std;
#include <string.h> // библиотека языка С
int main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
// C, C++
char name[21]="Иванов"; //массив символов, строка С-стиля
cout << "name=" << name << endl;
cin.get();
//C++
string sName("Иванов"); //объект-строка
cout << "sName=" << sName << endl;
cin.get();
}
Логический тип
Для работы с логическими величинами в Standart C++ введен тип данных bool. Переменные этого типа используются в логических выражениях и могут принимать только два значения : true – истина (1) и false – ложь (0).
// Пример 3.1.8
// Логические величины
#include <iostream>
using namespace std;
int main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
bool result=true;
cout << "result=" << result << endl;
result=false;
cout << "result=" << result << endl;
cin.get();
}