ГПОУ «Ленинск-Кузнецкий политехнический техникум»
Основы алгоритмизации
и программирование
Переменные и константы. Типы данных
Преподаватель Щеглова Алена Александровна
Теоретическое занятие
для студентов II курса
Ленинск-Кузнецкий, 2022
Переменная
Переменная - именованная область памяти, в которой хранится значение определенного типа.
Каждая переменная имеет имя, тип, размер и значение.
Перед использованием переменную надо определить.
Синтаксис определения переменной выглядит следующим образом:
тип имя_переменной;
Тип определяет, какого рода информацию может хранить переменная.
Ячейки памяти
Имя переменной number
Тип переменной int
Значение переменной 1
int number = 1;
00000001
Имя переменных
Имя переменной - любое название, которое удовлетворяет требованиям:
- имя может содержать цифры, буквы и символ подчеркивания
- первый символ в имени должен быть буквой или символом подчеркивания
- в имени не должно быть знаков пунктуации и пробелов
- имя не может быть ключевым словом языка C#. Ключевые слова подсвечиваются синим цветом
имя переменой носит описательный характер, который говорит о предназначении переменной
1
1
тип имя_переменной;
string name;
Тип данных
Тип определяет, какие данные, множество значений могут быть записаны в ячейку памяти, допустимые действия, которые можно применять над объектом
Типы
Простые (скалярные)
Составные
Вещественные
Целые
массивы
классы
Указатели
Логический
объединения
структуры
Типы данных C#
Тип
Описание
bool
Диапазон значений
логический
true и false
Логический тип:
bool alive = true;
bool isDead = false;
Типы данных C#
char: хранит одиночный символ
char a = 'A';
char b = '\x5A';
char c = '\u0420';
string: хранит набор символов
string hello = "Hello";
string word = "world";
Тип
char
Описание
string
символьный
Диапазон значений
строка
0 … 65535
последовательность символов
1
2
Типы данных C#
Тип
Описание
sbyte
Диапазон значений
целое
byte
-128 … 127
short
целое
целое
ushort
0 … 255
int
-32768 … 32767
целое
целое
uint
0 … 65535
-2147483648 …2147483647
целое
long
0 … 4294967295
целое
ulong
– 9 223 372 036 854 775 808 … 9 223 372 036 854 775 807
целое
0 … 18 446 744 073 709 551 615
Базовые типы данных
byte: хранит целое число от 0 до 255
byte bit1 = 1;
byte bit2 = 102;
Базовые типы данных
sbyte: хранит целое число от -128 до 127
sbyte bit1 = -101;
sbyte bit2 = 102;
short: хранит целое число от -32768 до 32767
short n1 = 1;
short n2 = 102;
ushort: хранит целое число от 0 до 65535
ushort n1 = 1;
ushort n2 = 102;
Базовые типы данных
int: хранит целое число от -2147483648 до 2147483647
int a = 10;
int b = 0b101;
int c = 0xFF;
Базовые типы данных
uint: хранит целое число от 0 до 4294967295
uint a = 10;
uint b = 0b101;
uint c = 0xFF;
long: хранит целое число
от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
long a = -10;
long b = 0b101;
long c = 0xFF;
Базовые типы данных
ulong: хранит целое число от 0 до 18 446 744 073 709 551 615
ulong a = 10;
ulong b = 0b101;
ulong c = 0xFF;
Типы данных C#
Тип
Описание
float
Диапазон значений
Вещественное
double
3,4e-38 … 3,4e+38
с повышенной точностью
1,7e-308 … 1,7e+308
Переменные
string name;
string Name;
Определите, какие данные могут хранить следующие переменные. Назовите имена переменных.
Указанные переменные программа будет воспринимать, как разные переменные или как одну и ту же?
Переменные
После определения переменной можно присвоить некоторое значение:
string name;
name = "Tom";
Вопросы:
1. Что выведет следующий код:
string name = "Tom";
Console.WriteLine(Name);
Вопросы:
2. Что выведет следующий код:
string person = "Tom";
person = "Sam";
Console.WriteLine(person);
Вопросы:
3. Какие из следующих вариантов представляют корректное определение переменных:
string person = "Tom";
person = "Tom";
string "Tom";
string person;
Базовые типы данных
object: может хранить значение любого типа данных
object a = 22;
object b = 3.14;
object c = "hello code";
Базовые типы данных
Пример
string name = "Tom";
int age = 33;
bool isEmployed = false;
double weight = 78.65;
Console.WriteLine($"Имя: {name}");
Console.WriteLine($"Возраст: {age}");
Console.WriteLine($"Вес: {weight}");
Console.WriteLine($"Работает: {isEmployed}");
Переменные
После определения переменной можно присвоить некоторое значение:
string name;
name = "Tom";
Алфавит языка С#
Каждая переменная доступна в рамках определенного контекста или области видимость. Вне этого контекста переменная не существует.
void func1(void)
{
int x;
x = 10;
}
Целая переменная х объявлена дважды: один раз в func1() и второй — в func2(). При этом переменная х в одной функции никак не связана и никак не влияет на переменную с тем же именем в другой функции. Это происходит потому, что локальная переменная видима только внутри блока, в котором она объявлена, за пределами этого блока она невидима.
void func2(void)
{
int x;
x = -199;
}
Алфавит языка C#
Существуют различные контексты:
1) Контекст класса. Переменные, определенные на уровне класса, доступны в любом методе этого класса. Их называют глобальными переменными или полями
сlass Person // начало контекста класса
{
string type = "Person"; // переменная уровня класса
public void PrintName() // начало контекста метода PrintName
{ .... }
public void PrintSurname() // начало контекста метода PrintSurname
{ … }
Переменная type существует в контексте всего класса Person и доступна в любом месте и блоке кода в методах PrintName и PrintSurname.
Алфавит языка C#
Существуют различные контексты:
2) Контекст метода. Переменные, определенные на уровне метода, являются локальными и доступны только в рамках данного метода. В других методах они недоступны
class Person
{ string type = "Person";
public void PrintName()
{ string name = "Tom"; }
public void PrintSurname()
{ string surname = "Smith"; } }
Переменная name существует в рамках метода PrintName. Переменная surname существует в рамках метода PrintSurname. В методе PrintName мы не можем обратиться к переменной surname, так как она в другом контексте.
Алфавит языка C#
Существуют различные контексты:
3) Контекст блока кода. Переменные, определенные на уровне блока кода, также являются локальными и доступны только в рамках данного блока. Вне своего блока кода они не доступны.
class Person // начало контекста класса
{ string type = "Person"; // переменная уровня класса
public void PrintName() // начало контекста метода PrintName
{ string name = "Tom"; // переменная уровня метода
{ // начало контекста блока кода
string shortName = "Tomas"; // переменная уровня блока кода
Console.WriteLine(type); // в блоке доступна переменная класса
Console.WriteLine(name); /* в блоке доступна переменная окружающего метода*/
Литералы
Литералы - неизменяемые значения.
Бывают: логическими, целочисленными, вещественными, символьными, строчными, отдельный литерал представляет ключевое слово null.
Логические литералы
Есть две логических константы - true (истина) и false (ложь):
Console.WriteLine(true);
Console.WriteLine(false);
Литералы
Целочисленные литералы
Целочисленные литералы представляют положительные и отрицательные целые числа, например, 1, 2, 3, 4, -7, -109. Целочисленные литералы могут быть выражены в десятичной, шестнадцатеричной и двоичной форме.
Console.WriteLine(-11);
Console.WriteLine(5);
Console.WriteLine(505);
Литералы
Числа в двоичной форме предваряются символами 0b, после которых идет набор из нулей и единиц:
Console.WriteLine(0b11); // 3
Console.WriteLine(0b1011); // 11
Console.WriteLine(0b100001); // 33
Литералы
Для записи числа в шестнадцатеричной форме применяются символы 0x, после которых идет набор символов от 0 до 9 и от A до F, которые собственно представляют число:
Console.WriteLine(0x0A); // 10
Console.WriteLine(0xFF); // 255
Console.WriteLine(0xA1); // 161
Литералы
Вещественные литералы представляют дробные числа. Этот тип литералов имеет две формы. Первая форма - вещественные числа с фиксированной запятой, при которой дробную часть отделяется от целой части точкой. Например:
3.14
-0.38
2. Вещественные литералы в экспоненциальной форме MEp, где M — мантисса, E - экспонента, которая фактически означает "*10^" (умножить на десять в степени), а p — порядок. Например:
Console.WriteLine(3.2e3); // 3.2 * 10 3 = 3200
Console.WriteLine(1.2E-1); // 1.2 * 10 -1 = 0.12
2
3
Литералы
Символьные литералы представляют одиночные символы. Символы заключаются в одинарные кавычки.
Символьные литералы бывают нескольких видов. Прежде всего это обычные символы:
'2'
'A'
'T'
Также мы можем передать их вывести на консоль с помощью Console.WriteLine:
Console.WriteLine('2');
Console.WriteLine('A');
Console.WriteLine('T');
2
3
Литералы
Управляющая последовательность представляет символ, перед которым ставится слеш.
'\n' - перевод строки
'\t' - табуляция (длинный отступ)
'\' - слеш
Литералы
Символы могут определяться в виде шестнадцатеричных кодов ASCII (https://www.asciitable.com/)
Console.WriteLine('\x78'); //х
Console.WriteLine('\x5A'); // какой результат?
Литералы
Символы могут определяться в виде шестнадцатеричных кодов ASCII (https://www.asciitable.com/)
Console.WriteLine('\x78'); //х
Console.WriteLine('\x5A'); // какой результат?
Литералы
Символы могут определяться в виде шестнадцатеричных кодов Unicode(https://unicode-table.com/ru/)
Console.WriteLine('\u0020'); // @
Console.WriteLine('\u0041'); // какой результат?
Литералы
Строковые литералы представляют строки. Строки заключаются в двойные кавычки:
Console.WriteLine("hello");
Console.WriteLine("фыва");
Console.WriteLine("hello word");
Если внутри строки необходимо вывести двойную кавычку, то такая внутренняя кавычка предваряется обратным слешем:
Console.WriteLine("Компания \"Рога и копыта\"");
последовательность '\n' осуществляет перевод на новую строку:
Console.WriteLine("Привет \nмир");
null представляет ссылку, которая не указывает ни на какой объект. То есть по сути отсутствие значения.
Суффиксы
Вещественные литералы (дробные числа) рассматриваются как значения типа double. И чтобы указать, что дробное число представляет тип float или тип decimal, необходимо к литералу добавлять суффикс:
F/f - для float
M/m - для decimal.
float a = 3.14F;
float b = 30.6f;
decimal c = 1005.8M;
decimal d = 334.8m;
Суффиксы
Целочисленные литералы рассматриваются как значения типа int. Чтобы явным образом указать, что целочисленный литерал представляет значение типа uint, надо использовать суффикс U/u, для типа long - суффикс L/l, а для типа ulong - суффикс UL/ul:
uint a = 10U;
long b = 20L;
ulong c = 30UL;
Суффиксы
Использование системных типов
Выше при перечислении всех базовых типов данных для каждого упоминался системный тип. Потому что название встроенного типа представляет собой сокращенное обозначение системного типа. Например, следующие переменные будут эквивалентны по типу:
int a = 4;
System.Int32 b = 4;
Явная типизация
int x;
Компилятор при запуске знал, что x хранит целочисленное значение.
Неявная типизация:
var hello = "Hell to World";
var c = 20;
Для неявной типизации вместо названия типа данных используется ключевое слово var.
При компиляции компилятор сам выводит тип данных исходя из присвоенного значения.
Т.к. по умолчанию все целочисленные значения рассматриваются как значения типа int, то переменная c будет иметь тип int.
hello будет иметь тип string
string name;
name = "Tom";
Суффиксы
При использовании неявного типа нельзя:
1. сначала объявить переменную, а затем инициализировать:
// этот код работает
int a;
a = 20;
// этот код не работает
var c;
c= 20;
2. указать в качестве значения неявно типизируемой переменной null:
// этот код не работает
var c=null;
Вопросы:
1. Какой тип данных языка C# будет представлять следующая переменная?
bool enabled = true;
Вопросы:
5. Какой тип данных языка C# будет представлять следующая переменная?
var weight = 84.45f;
Константы
Константы предназначены для описания таких значений, которые не должны изменяться в программе.
Для определения констант используется ключевое слово const, которое указывается перед типом константы:
const string NAME = "Tom"; /* Определена константа NAME, которая хранит строку "Tom”*/
Объявить константу можно один раз, ее нельзя изменить в процессе работы программы:
Если нужно хранить в программе некоторые данные, но их не следует изменить, они определяются в виде констант.
1
const string NAME; // ! Ошибка - константа NAME не инициализирована
1
2
const string NAME = "Tom"; // определяем константу
NAME = "Bob"; // !Ошибка - у констаты нельзя изменить значение
Вопросы:
7. Верно ли объявление константы?
1
const string NAME;
Ошибка - константа NAME не инициализирована
Вопросы:
7. Верно ли объявление константы?
1
2
const string NAME = "Tom";
NAME = "Bob";
Ошибка - у константы нельзя изменить значение