Глава 1. Первая программа на C#


Среда разработки, вывод, переменные, ввод и преобразования типов

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

Где писать и запускать программы

Можно начать в браузере на NET Fiddle. Для работы на своём компьютере используйте Visual Studio Community. В обоих случаях программа будет выполнять команды C# и показывать результат в консоли — текстовом окне ввода и вывода.

Установка Visual Studio и создание проекта
  1. Скачайте установщик Visual Studio Community.
  2. В установщике выберите рабочую нагрузку .NET desktop development. Для консольных упражнений этого курса дополнительные средства веб-разработки не требуются.
  3. После установки выберите Create a new project, затем шаблон Console App для C#.
  4. Дайте проекту понятное имя на английском, например FirstProgram, и выберите папку, в которой сможете найти его позже.
  5. Если есть флажок Do not use top-level statements, установите его: в примерах курса команды находятся внутри Main.

На иллюстрации из исходного урока показан выбор рабочих нагрузок в Visual Studio 2026. Для начала найдите .NET desktop development.

Выбор рабочих нагрузок при установке Visual Studio

Видеодемонстрации ниже — на иврите, для дополнительного просмотра. Все необходимые шаги описаны выше.

Первая программа

Откройте NET Fiddle или консольный проект Visual Studio. Используйте такую программу:

1
2
3
4
5
6
7
8
9
using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Привет, мир!");
    }
}

Нажмите кнопку запуска ▶. В Visual Studio можно нажать F5. Результат:

Привет, мир!

Console.WriteLine выводит текст и переводит курсор на следующую строку. Текст записывается в двойных кавычках. Команда заканчивается точкой с запятой ;.

Пока сохраняйте внешнюю структуру Program и Main, а новые команды пишите внутри фигурных скобок метода Main. Каждой открывающей скобке { нужна закрывающая }.

Попробуйте:

  1. Добавьте команду, которая напечатает ваше имя под приветствием.
  2. Наберите Console. и посмотрите, предлагает ли среда завершить имя команды.
  3. Замените первый WriteLine на Write. Предскажите, где появится ваше имя, и запустите программу.

Переменные и присваивание

Переменная — именованное место в памяти для хранения значения. Во время выполнения программы значение может изменяться.

int age = 16;           // Целое число
double average = 85.5;  // Число с дробной частью
string name = "Sara";   // Строка текста

Сначала указывается тип переменной, затем её имя. Знак = присваивает значение. В этих примерах объявление переменной сразу сопровождается начальной инициализацией.

Тип переменной остаётся одним и тем же. Например, переменная age типа int не может позднее стать строкой.

Объявление и присваивание — разные действия

Объявление создаёт переменную с заданным именем и типом. Присваивание помещает в неё значение. Эти действия можно записать отдельно:

int age;   // Объявляем переменную age
age = 16;  // Присваиваем ей значение
age = 17;  // Заменяем прежнее значение новым

Локальной переменной нужно присвоить значение до того, как программа прочитает её, например в вычислении или при выводе.

Несколько переменных в одной строке

Переменные одного типа можно объявить через запятую:

int a = 5, b = 10, c = 0; // Объявление и инициализация
double x, y, z;           // Только объявление

При присваивании сначала вычисляется правая часть, затем результат записывается в переменную слева. В a = b; значение b копируется в a; значение b не меняется. Запись a = a + 1; увеличивает прежнее значение a на один.

Основные типы

Тип Что хранит Пример
int Целое число 16, -3, 0
double Число с дробной частью 85.5, -2.75
char Одну кодовую единицу символа 'A', '%', '9'
string Строку — последовательность символов "Sara", "Привет"
bool Логическое значение: истина или ложь true, false

Для имён переменных используйте понятные английские слова в стиле camelCase: первое слово со строчной буквы, следующие — с заглавной, например firstName и totalPrice. C# различает регистр: name и Name — разные имена.

Вывод и ввод пользователя

Console.Write("Введите имя: ");       // Приглашение остаётся на той же строке
string name = Console.ReadLine();     // Читаем введённую строку
Console.WriteLine("Привет, " + name); // Соединяем текст и значение name

Если пользователь введёт Dan, в консоли будет:

Введите имя: Dan
Привет, Dan

Знак + между строками соединяет их. Такое соединение называется конкатенацией.

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

Преобразование ввода из текста в число

Console.ReadLine() читает строку. Чтобы выполнить числовые вычисления, преобразуйте её с помощью int.Parse для целого числа или double.Parse для дробного.

1
2
3
4
5
6
7
8
Console.Write("Введите возраст: ");
int age = int.Parse(Console.ReadLine());

// Скобки заставляют сначала выполнить сложение чисел.
Console.WriteLine("Через год вам будет " + (age + 1));

// Без скобок выполняется последовательное соединение со строкой.
Console.WriteLine("Неверный результат: " + age + 1);

Для введённого возраста 16 первая строка покажет 17, а вторая — 161. Запустите программу и объясните, почему скобки изменили результат.

Пример ввода дробного числа:

Console.Write("Введите цену: ");
double price = double.Parse(Console.ReadLine());
Console.WriteLine("Две такие покупки стоят " + (price * 2));

В коде дробная часть числа отделяется точкой: 85.5. При вводе для double.Parse разделитель зависит от языковых настроек среды: это может быть точка или запятая.

Если ввести hello вместо целого числа, int.Parse не сможет выполнить преобразование, и программа завершится с ошибкой. В этих упражнениях вводите значения указанного типа и диапазона.

Целочисленное деление

Если оба операнда имеют тип int, / выполняет целочисленное деление: дробная часть результата отбрасывается.

Console.WriteLine(10 / 3); // 3
Console.WriteLine(13 / 5); // 2

Если хотя бы один операнд имеет тип double, выполняется деление с дробным результатом:

Console.WriteLine(13.0 / 5); // 2.6
Console.WriteLine(13 / 5.0); // 2.6

Для отрицательных целых чисел дробная часть также отбрасывается в направлении нуля: -13 / 5 равно -2.

Попробуйте Console.WriteLine("Результат: " + 13 / 5);, а затем замените 13 на 13.0. Сравните вывод.

Явное и автоматическое преобразование типов

Приведение типа, или cast, явно меняет тип значения в выражении. Например, (double)a даёт значение a в типе double:

1
2
3
4
5
6
int a = 5;
int b = 2;
double result = (double)a / b; // 2.5: сначала преобразование, затем деление
double result2 = a / b;       // 2: сначала целочисленное деление
Console.WriteLine(result);
Console.WriteLine(result2);

Сам тип переменной a остаётся int. Приведение действует на значение в этом выражении.

Присваивание результата переменной double не возвращает уже отброшенную дробную часть. Чтобы получить 2.5, один из операндов должен стать double до деления.

Из int в double значение можно преобразовать автоматически. В обратном направлении требуется явное приведение; дробная часть отбрасывается:

int count = 7;
double value = count;       // Автоматическое преобразование: 7.0
double length = 7.9;
int whole = (int)length;    // Явное преобразование: 7

Арифметические операторы

Оператор Действие Пример
+ Сложение int c = a + b;
- Вычитание int d = a - b;
* Умножение int e = a * b;
/ Деление double f = a / (double)b;
% Остаток от деления int r = a % b;

Например, 13 / 5 равно 2, а 13 % 5 равно 3: в числе 13 помещаются две пятёрки, и остаётся 3. Делитель в этих примерах должен быть ненулевым.

Умножение, деление и остаток выполняются раньше сложения и вычитания. Операции одного приоритета выполняются слева направо. Скобки позволяют изменить порядок: 2 + 3 * 4 равно 14, а (2 + 3) * 4 равно 20.

Справка: сокращённые операции присваивания

Эти записи часто встречаются в примерах. Сначала прочитайте их как обычное присваивание.

Оператор Действие Короткая запись Соответствующая полная запись
++ Увеличить на 1 count++; count = count + 1;
-- Уменьшить на 1 count--; count = count - 1;
+= Прибавить значение price += 5; price = price + 5;
-= Вычесть значение price -= 9; price = price - 9;
*= Умножить на значение price *= 1.17; price = price * 1.17;
/= Разделить на значение sum /= 5; sum = sum / 5;

В примере price *= 1.17; используйте double price. Для переменной int sum запись sum /= 5; выполняет целочисленное деление.

Справка: допустимые имена переменных

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

Допустимые примеры:

int myVar;
int _index;
int count2;

Примеры с ошибками — не добавляйте их в рабочую программу:

int 1stValue;  // Начинается с цифры
int my-var;    // Содержит дефис
int class;     // Ключевое слово языка
int full name; // Содержит пробел
int %value;    // Содержит недопустимый знак

C# допускает буквы других алфавитов, например int число = 7;, а префикс @ позволяет использовать ключевое слово как имя: int @int;. В упражнениях выбирайте обычные понятные английские имена, например number и total.

У C# есть и другие типы: byte, short, long, float, decimal и другие. Для первых упражнений достаточно типов из основной таблицы.

Если программа не запускается или окно исчезает
  • Не узнаётся имя Console. Проверьте наличие using System; в начале файла. Некоторые шаблоны подключают его автоматически.
  • В шаблоне есть только одна строка вывода. Это вариант с командами верхнего уровня. Чтобы получить структуру как в курсе, создайте Console App с флажком Do not use top-level statements, если он доступен, или замените содержимое Program.cs полной первой программой выше. Не вставляйте вторую программу рядом с уже имеющимися командами.
  • Написано internal class Program, а в примере — public class Program. Для запуска наших консольных примеров подходят оба варианта; оставьте структуру своего шаблона.
  • Окно закрывается слишком быстро. Запустите через Ctrl+F5 без отладки либо добавьте последней командой внутри Main строку Console.ReadLine();, чтобы программа ждала нажатия Enter.
  • Не удаётся записать выходной файл при сборке. Закройте оставшееся окно предыдущего запуска, остановите отладку и попробуйте снова. Если ошибка сохраняется, прочитайте полное сообщение: причина может быть иной.
  • Ошибка компиляции. Откройте список ошибок, начните с первой и проверьте указанную строку: кавычки, скобки, точку с запятой, имена и типы переменных.

Сохраняйте программы в доступной вам папке или в своей учётной записи онлайн-среды. Если работаете за общим компьютером, заранее сохраните копию своей работы там, откуда сможете открыть её дома.

Практика

Если ваш класс работает в CodeClassroom, войдите в систему и используйте код присоединения к классу, полученный на уроке. При отправке решения соблюдайте формат ввода и вывода из условия: лишние приглашения к вводу могут мешать автоматической проверке.

Для самостоятельной практики откройте выбранные упражнения курса. Сначала составьте решение сами, затем сравните с разбором, если он есть.

Дополнительные видео на иврите

Плейлист к главе 1. Просмотр необязателен: основные объяснения и задания приведены на этой странице.

Содержание курса