> For the complete documentation index, see [llms.txt](https://axideli.gitbook.io/osnovy-programmirovaniya-na-yazyke-c/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axideli.gitbook.io/osnovy-programmirovaniya-na-yazyke-c/tipy-dannykh-i-peremennye.md).

# Типы данных и переменные

## **Введение**

В искусстве программирования язык C# является неотъемлемым инструментом, открывающим перед разработчиком широкие горизонты для творчества и решения сложных задач. Однако перед тем как взлететь в высокие сферы программирования, необходимо тщательно изучить его фундаментальные составляющие, среди которых ключевое место занимают **типы данных и переменные**.

Типы данных служат строительными блоками программы, определяя, как информация будет представлена и обрабатываться внутри кода. От целочисленных значений до символов и текста, типы данных обеспечивают языку C# гибкость в работе с разнообразными данными. С другой стороны, переменные являются контейнерами, призванными хранить и управлять этой информацией в ходе выполнения программы.

На страницах этой главы мы погрузимся в увлекательный мир типов данных и переменных языка C#. Разберем разнообразие типов, научимся правильно объявлять и использовать переменные, и поймем, как эти фундаментальные концепции служат основой для создания более сложных и эффективных программных решений. Приготовьтесь к увлекательному и плодотворному путешествию в основы программирования на C#.

Язык программирования C# предлагает богатый набор встроенных типов данных, каждый из которых предназначен для работы с определенным видом информации. Эта разнообразная палитра типов обеспечивает гибкость и точность при работе с данными. Давайте рассмотрим основные категории типов данных в C#:

## Основные типы данных в C\#

В языке программирования C# используются разнообразные типы данных, каждый из которых обладает своими особенностями и предназначен для работы с определенными видами информации. Давайте подробно рассмотрим основные категории типов данных и их практическое применение.

#### **Целочисленные типы данных**

Целочисленные типы данных предоставляют возможность хранения целых чисел. Они необходимы для работы с количественной информацией, такой как возраст, количество товаров и индексы. Разные целочисленные типы имеют различный диапазон значений, что позволяет выбирать подходящий тип в зависимости от конкретной задачи.

* `sbyte`: 8-битное знаковое целое число (-128 до 127).
* `byte`: 8-битное беззнаковое целое число (0 до 255).
* `short`: 16-битное знаковое целое число (-32,768 до 32,767).
* `ushort`: 16-битное беззнаковое целое число (0 до 65,535).
* `int`: 32-битное знаковое целое число (-2,147,483,648 до 2,147,483,647).
* `uint`: 32-битное беззнаковое целое число (0 до 4,294,967,295).
* `long`: 64-битное знаковое целое число (-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807).
* `ulong`: 64-битное беззнаковое целое число (0 до 18,446,744,073,709,551,615).

**Применение**: Используются для хранения и обработки целых чисел в программе.

Примеры:

```csharp
csharpCopy codesbyte mySByte = -10;
ushort myUShort = 500;
int myInt = 10000;
long myLong = 1234567890123456789;
```

#### **Вещественные типы данных**

Вещественные типы данных предназначены для хранения чисел с плавающей точкой. Они применяются в ситуациях, где требуется точность представления дробных значений, таких как вес, расстояние или координаты.

* `float`: 32-битное число с плавающей точкой одинарной точности.
* `double`: 64-битное число с плавающей точкой двойной точности.

**Применение**: Используются для представления дробных чисел и точных вычислений.

Примеры:

```csharp
csharpCopy codefloat myFloat = 3.14f;
double myDouble = 3.14;
```

**Символьные и строковые типы данных**

Символьные типы данных предназначены для хранения отдельных символов, в то время как строковые – для работы с последовательностями символов (текстом). Они являются неотъемлемой частью обработки информации, связанной с символами и текстовыми данными.

* `char`: Одиночный символ Unicode.
* `string`: Строка символов Unicode.

**Применение**: Используются для работы с символами и текстовой информацией в программах.

`char`: Одиночный символ Unicode, объявляется с использованием одинарных кавычек.

```csharp
csharpCopy codechar myChar = 'A';
```

`string`: Строка символов Unicode, объявляется с использованием двойных кавычек.

```csharp
csharpCopy codestring myString = "Hello, World!";
```

#### **Логический тип данных**

Логический тип данных принимает только два значения: `true` или `false`. Это необходимо для представления условий и принятия решений в программе.

* `bool`: Логический тип данных.

**Применение**: Используется для организации условных операторов и логических проверок.

`bool`: Логический тип данных, принимает значения `true` или `false`.

```csharp
csharpCopy codebool isTrue = true;
bool isFalse = false;
```

#### **Константы**

Константы представляют собой переменные, значения которых не могут изменяться во время выполнения программы. Они используются для определения постоянных значений, таких как числовые константы или строки.

**Применение**: Константы обеспечивают стабильность значений в программе и облегчают понимание кода.

```csharp
csharpCopy codeconst double PI = 3.14159265359;
const int DAYS_IN_WEEK = 7;
```

#### **Прочие типы данных**

В дополнение к основным типам данных в C# существуют и другие, такие как:

* `byte`: 8-битное беззнаковое целое число.
* `decimal`: 128-битное число с фиксированной точкой для работы с финансовыми данными.

**Применение**: Используются для специфических задач, например, хранения малых беззнаковых чисел или финансовых величин.

```csharp
csharpCopy codebyte smallNumber = 200;
decimal financialValue = 1234.5678m;
```

Знание различных типов данных в C# помогает программисту эффективно выбирать подходящие инструменты для представления и обработки данных в зависимости от конкретной задачи. В этой главе мы рассмотрели основные типы данных и научились их применению в реальных сценариях программирования.

## Объявление и использование переменных

В мире программирования переменные играют ключевую роль, предоставляя средство для хранения и управления данными. Объявление переменной в C# включает в себя указание ее типа и, при необходимости, инициализацию. Давайте рассмотрим основы объявления и использования переменных:

#### **Объявление переменных**

Для объявления переменной в C# используется следующий синтаксис:

```
тип_данных имя_переменной;
```

где `тип_данных` - это тип переменной, а `имя_переменной` - это уникальное имя, которое вы выбираете. Например:

```csharp
int age;            // Объявление целочисленной переменной
double salary;      // Объявление переменной с плавающей точкой
string name;        // Объявление строковой переменной
```

#### **Инициализация переменных**

Инициализация переменных предполагает присвоение начального значения при их объявлении. Это может быть выполнено следующим образом:

```csharp
int quantity = 10;          // Объявление и инициализация целочисленной переменной
double temperature = 25.5;  // Объявление и инициализация переменной с плавающей точкой
string greeting = "Привет"; // Объявление и инициализация строковой переменной
```

#### **Использование переменных**

Переменные могут использоваться для хранения данных и их последующего использования в коде программы. Например:

```
int a = 5;
int b = 10;
int sum = a + b; // Использование переменных для вычисления суммы
Console.WriteLine(sum); // Вывод результата
```

## Приведение типов

Приведение типов представляет собой процесс изменения типа переменной от одного к другому. В C# существует два вида приведения типов: явное и неявное.

#### **Явное приведение типов**

Явное приведение типов осуществляется с использованием оператора приведения. Например:

```csharp
csharpCopy codedouble d = 123.45;
int i = (int)d; // Явное приведение double к int
```

#### **Неявное приведение типов**

Неявное приведение типов автоматически выполняется компилятором. Например:

```csharp
csharpCopy codeint x = 5;
double y = x; // Неявное приведение int к double
```

Приведение типов является важным инструментом при работе с различными данными, и его использование требуется в определенных сценариях программирования.

С этими инструментами – объявлением переменных и приведением типов – вы можете более гибко управлять данными в вашей программе, что является ключевым моментом в разработке на C#. Они позволяют создавать более сложные и эффективные программы, а также обеспечивают точное управление данными в различных сценариях.

***

{% embed url="<https://www.youtube.com/watch?v=dDqvqWwAfW0>" fullWidth="true" %}

***

## Упражнения

#### **Упражнение 1: Практика объявления переменных**

Вам предстоит создать программу, которая будет сохранять информацию о студенте. Используйте разные типы данных для различных характеристик:

```csharp
csharpCopy code// Объявление переменных для хранения информации о студенте
string studentName;
int studentAge;
char gender;
double averageGrade;

// Заполнение переменных данными
studentName = "Иванов Иван";
studentAge = 20;
gender = 'M';
averageGrade = 4.5;

// Вывод информации на экран
Console.WriteLine("Имя студента: " + studentName);
Console.WriteLine("Возраст студента: " + studentAge);
Console.WriteLine("Пол студента: " + gender);
Console.WriteLine("Средний балл: " + averageGrade);
```

Ваша задача: Добавьте дополнительные характеристики студента и объявите переменные для их хранения. Используйте разные типы данных в соответствии с характером информации (например, дата рождения, адрес).

<details>

<summary>Решение</summary>

```csharp
// Объявление переменных для хранения информации о студенте
string studentName;
int studentAge;
char gender;
double averageGrade;
DateTime dateOfBirth;
string address;

// Заполнение переменных данными
studentName = "Иванов Иван";
studentAge = 20;
gender = 'M';
averageGrade = 4.5;
dateOfBirth = new DateTime(2002, 5, 15); // Пример даты рождения
address = "ул. Примерная, д. 123";

// Вывод информации на экран
Console.WriteLine("Имя студента: " + studentName);
Console.WriteLine("Возраст студента: " + studentAge);
Console.WriteLine("Пол студента: " + gender);
Console.WriteLine("Средний балл: " + averageGrade);
Console.WriteLine("Дата рождения: " + dateOfBirth.ToShortDateString());
Console.WriteLine("Адрес: " + address);
```

</details>

#### **Упражнение 2: Приведение типов и операции с переменными**

Представьте, что у вас есть следующая информация:

```csharp
csharpCopy codedouble pricePerItem = 19.99;
int quantity = 3;
```

Вам нужно рассчитать общую стоимость покупки и вывести результат на экран.

Ваша задача:

1. Создайте переменную `totalCost` и рассчитайте общую стоимость покупки, умножив цену за единицу товара на количество товаров.
2. Выведите результат на экран в виде строки, например: "Общая стоимость покупки: $59.97".
3. После этого измените тип данных переменной `totalCost` на целочисленный (`int`) и повторите расчет. Выведите новый результат на экран.
4. Объясните, почему произошли изменения в результатах при изменении типа данных переменной `totalCost`.

<details>

<summary>Решение</summary>

```csharp
using System;

class Program
{
    static void Main()
    {
        // Исходные данные
        double pricePerItem = 19.99;
        int quantity = 3;

        // Расчет общей стоимости с использованием типа данных double
        double totalCostDouble = pricePerItem * quantity;

        // Вывод результата с использованием типа данных double
        Console.WriteLine("Общая стоимость покупки (double): $" + totalCostDouble);

        // Изменение типа данных переменной totalCost на int
        int totalCostInt = (int)(pricePerItem * quantity);

        // Вывод нового результата с использованием типа данных int
        Console.WriteLine("Общая стоимость покупки (int): $" + totalCostInt);

        // Объяснение изменений в результатах при изменении типа данных
        Console.WriteLine("При приведении к целочисленному типу (int), дробная часть была отброшена.");
    }
}
```

</details>

***

## Вопросы

#### **Основные типы данных в C#**

* Какие основные категории типов данных поддерживаются в языке программирования C#? Приведите примеры по крайней мере по одному типу из каждой категории.
* Как выбрать правильный тип данных для хранения целых чисел в C#? Какой тип данных будет использоваться для хранения чисел с плавающей запятой?

#### **Объявление и использование переменных**

* Как объявить переменную в C#? Приведите пример объявления переменной и присвоения ей значения.
* Что такое область видимости переменной, и как она определяет доступ к переменной в различных частях кода?

#### **Раздел: Приведение типов**

* Что представляет собой приведение типов в C#? Приведите пример неявного и явного приведения типов.
* Как избежать потери данных при приведении типов? Какие могут возникнуть проблемы при неудачном приведении типов?

#### **Основные типы данных в C# (повторение)**

* Какова роль типа данных `string` в C#? Приведите примеры использования строковых переменных.
* Как определить, сколько байт занимает переменная определенного типа данных в C#? Как это влияет на использование памяти в программе?

***

## Тесты

{% embed url="<https://docs.google.com/forms/d/e/1FAIpQLSdpZ_TMT-bw3qcX8moMtdV0XKz6ljnlG1tt1w116JuDbFgjdg/viewform?usp=sf_link>" fullWidth="true" %}
