1. Основы C# Flashcards

1
Q

Что такое тип переменной?

A

Тип определяет множество допустимых значений переменной и формат хранения значения этого типа в памяти.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как преобразовать строковое представление числа в double?

A

double.Parse или Convert.ToDouble или double.TryParse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

3/2+1.5

A

2.5 (деление целочисленное!)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Math.Round(5)/2 + 3.5

A

6.0 (Math.Round возвращает double!)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое метод?

A

Аналог функции в математике. Именованная последовательность инструкций, с входными параметрами и, возможно, с возвращаемым результатом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое var? Корректна ли следующая запись? var a;

A

Ключевое слово, заменяющее тип при объявлении переменной. Заставляет компилятор определить наиболее подходящий тип на основании анализа выражения справа от знака присваивания. var a = new int[5]; полностью эквивалентно int[] a = new int [5]; Если справа нет значения, то компилятор не сможет вывести тип var и выдаст ошибку компиляции.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как прочитать целое число из консоли?

A

Console.ReadLine, а затем int.Parse. Или посимвольное чтение с помощью Console.Read, а затем int.Parse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Пусть n и m имеют тип int и n < m. Возможно ли, что m*m < n?

A

Возможно, если случилось арифметическое переполнение при умножении. Для этого достаточно, достаточно, чтобы m*m было больше int.Max — максимального числа, которое представимо типом int

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Пусть a и b имеют тип double. Какие значения может принимать следующее выражение? (a + b)(a + b) == aa + 2ab + b*b

A

и true и false. false, если в результате арифметических операций над типом double накопилась погрешность. Погрешность появляется из-за того, что double может принимать лишь ограниченное количество значений, а действительных чисел бесконечно много. Поэтому из-за порядка вычисления операций результат может отличаться.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Какие типы ошибок могут возникать в процессе разработки программы?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Когда стоит использовать enum?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что может находиться внутри круглых скобок выражения if?

A

Любое выражение с типом bool

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Для чего применяется слово default в выражении switch?

A

Чтобы указать инструкции, которые надо выполнить, если ни один из case не подошел.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Когда целесообразно использовать for, а когда foreach для перебора всех элементов коллекции?

A

for если нужен индекс. Иначе foreach

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что делает break в цикле?

A

Выходит из текущего цикла. С случае нескольких вложенных циклов — только из внутреннего

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что делает continue в цикле?

A

Переходит к следующей итерации текущего цикла.

17
Q

Как сделать бесконечный цикл на for?

A

for ( ; ; ){ … }

18
Q

Как получить последний элемент в массиве?

A

Использовать длину массива xs[xs.Length - 1]

19
Q

Чему равно выражение new int[] { 1, 2, 3 } == new int[] { 1, 2, 3 }

A

false. Массивы сравниваются по ссылкам. Здесь массивы — это 2 разных объекта, поэтому ссылки не будут равны.

20
Q

Какое значение получить быстрее в массиве из 1000 элементов values[0] или values[999]

A

Одинаково. Индекс всего лишь означает сдвиг адреса, из которого будет прочитано значение.

21
Q

Где хранится строка? В куче или на стеке?

A

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

22
Q

В чем ошибка? Как исправить?File.ReadAllLines(“C:\Users\user123\document.txt”)

A

Слеши считаются спец-символами экранирования. Либо их нужно экранировать (удвоить) “C:\Users\user123\document.txt”, либо использовать “дословный” формат строки @”C:\Users\user123\document.txt”

23
Q

Чем отличается массив от списка (List)?

A

У массива фиксирована длина — она задаётся при создании массива и её нельзя поменять. Список увеличивает свою длину по мере необходимости. В отличие от массива у него есть метод Add(item)

24
Q

В каких случаях нужно использовать StringBuilder?

A

Когда надо собрать длинную строчку из большого числа маленьких. Например, из массива строк.
Другие способы эффективно собрать строку из нескольких маленьких: string.Concat, string.Join и string.Format

25
Q

Что общего у StringBuilder и List?

A

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

26
Q

Что такое автоматическое тестирование?

A

Процесс, когда корректность одной программы проверяется другой программой, путём запуска тестируемой программы в разных ситуациях и сравнения ее результата с эталоном.

27
Q

Как создать библиотеку в C#?

A

Создать отдельный проект и указать у него тип Class Library

28
Q

Как бороться с дублирование кода в тестах?

A

Выделить специальный метод, который в параметрах принимает данные и ожидаемый результат, а внутри делает проверку. В тестах использовать его

29
Q

Что такое покрытие тестами?

A

Доля строк кода тестируемой программы, выполненных при запуске комплекта тестов

30
Q

В классе объявлены следующие поля, но нигде нет кода инициализации полей. Какие значения лежат в полях в этом случае? string a; int b; int[] xs; bool f; А если бы это были не поля класса, а переменные внутри метода?

A

Поля классов автоматически инициализируются значениями по умолчанию. string a == null, int b == 0, int[] xs == null, bool f == false.

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

31
Q

Когда следует выделять метод?

A

Если метод слишком длинный, его стоит разбить на логические этапа, выделяя их в методы. Когда одна последовательность инструкций повторяется несколько раз, с небольшими вариациями стоить выделить ее в метод (DRY). Если метод делает несколько различных дел одновременно, стоит их разнести по разным методам.

32
Q

Как создать заглушку метода (stub)?

A

Надо написать сигнатуру метода, а внутри выкинуть NotImplementedException

33
Q

Что может находиться в:
1-ой секции for?
2-ой секции for?
3-ой секции for?

A

В 1-ей секции for: Декларация либо присваивание значений нескольким переменным одного типа.
Во 2-ой секции for: Условие: любое выражение, возвращающее bool.
В 3-ей секции for: Выражения, разделенные запятой. Например, использование операторов или вызов методов.

34
Q
Перепишите for с помощью цикла while:
for (var i = 0; i < 10; i += 2) {}
A
{
    var i = 0;
    while(i < 10)
    {
        i += 2;
    }
}