Все темы
Основы C#
Структура программы, вывод в консоль, переменные, встроенные типы, операторы, преобразования типов и строки.
Сортировка:
11 вопросов
JuniorТеорияЧастоЧто выведет программа (строки через пробел)?
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
2 3
Открыть задачу →Типичные ошибки
- ✗Ждать
3 3:a = bкопирует вaчисло2и не связываетaсb, поэтомуb = 3уже не меняетa. - ✗Ждать
1 3:=копирует значение справа в переменную слева, поэтомуa = bменяетa, а неb.
Уточняющие вопросы
- →Что напечатает программа, если строку
b = 3;поставить передa = b;? - →Как поменять местами значения
aиbс помощью третьей переменной?
JuniorТеорияЧастоЧто произойдёт при компиляции и запуске программы?
JuniorТеорияЧасто
Что произойдёт при компиляции и запуске программы?
Не скомпилируется
Открыть задачу →Типичные ошибки
- ✗Ждать, что
Startнапечатается до ошибки: неизвестное имя — ошибка компиляции, поэтому программа не запускается и не печатает ни одной строки. - ✗Считать, что C# не различает регистр:
consoleиConsole— разные имена, и компилятор знает толькоConsole.
Уточняющие вопросы
- →Какой код ошибки компилятор выдаёт на
consoleи что говорит её сообщение? - →Что сообщит компилятор, если во второй строке вызвать
Console.Writeline?
JuniorТеорияЧастоЧто выведет программа (строки через пробел)?
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
3 -3
Открыть задачу →Типичные ошибки
- ✗Ждать
4 -4: приведение кintне округляет до ближайшего целого, а отбрасывает дробь, поэтому3.99превращается в3. - ✗Ждать
-4для отрицательного числа: отбрасывание дроби сдвигает число к нулю, поэтому-3.99даёт-3, а не-4.
Уточняющие вопросы
- →Что вернёт
Convert.ToInt32(3.99)и почему это отличается от приведения? - →Почему
int x = 3.99;не компилируется, аint x = (int)3.99;— компилируется?
JuniorТеорияЧастоЧто выведет программа (строки через пробел)?
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
False True
Открыть задачу →Типичные ошибки
- ✗Ждать, что
0.1 + 0.2 == 0.3дастtrue:doubleхранит двоичные дроби, и сумма равна0.30000000000000004. - ✗Ждать, что
decimalтоже промахнётся: он хранит десятичные цифры, и0.1m + 0.2m— ровно0.3m.
Уточняющие вопросы
- →Как проверить, что два значения
doubleравны с точностью до допуска? - →Почему для денег выбирают
decimal, хотя он медленнееdouble?
JuniorТеорияЧастоЧто произойдёт при компиляции и запуске программы?
JuniorТеорияЧасто
Что произойдёт при компиляции и запуске программы?
Не скомпилируется
Открыть задачу →Типичные ошибки
- ✗Ждать
2: C# никогда не отрезает дробную часть молча, поэтомуint x = 2.5;останавливает компиляцию с ошибкойCS0266. - ✗Ждать ошибку только при запуске: компилятор уже видит, что
doubleкладут в переменнуюint, поэтому программа не компилируется и ничего не запускается.
Уточняющие вопросы
- →Как намеренно положить
2.5вint, отбросив дробную часть? - →Почему
double y = 2;компилируется, аint x = 2.5;— нет?
JuniorТеорияЧастоЧто выведет программа (строки через пробел)?
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
3 -1
Открыть задачу →Типичные ошибки
- ✗Ждать
3.5: делениеintнаintотбрасывает дробную часть, поэтому7 / 2— это3. - ✗Считать остаток неотрицательным, как в математике: в C# знак остатка совпадает со знаком делимого, поэтому
-7 % 3— это-1.
Уточняющие вопросы
- →Как изменить первую строку, чтобы она напечатала
3.5? - →Чему равно
7 % -3и почему?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
-2147483648
Открыть задачу →Типичные ошибки
- ✗Ждать
2147483648:max + 1тоже имеет типint, аintтакое число не вмещает, поэтому значение перескакивает наint.MinValue. - ✗Ждать исключения
OverflowException: арифметика с переменными по умолчанию не проверяется, а исключение бывает только внутриchecked.
Уточняющие вопросы
- →Что произойдёт, если написать
checked(max + 1)? - →Почему не компилируется
Console.WriteLine(int.MaxValue + 1);?
JuniorТеорияЧастоЧто выведет программа (строки через пробел)?
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
False 0
Открыть задачу →Типичные ошибки
- ✗Ждать
False 1:&&останавливается, как только левая часть равнаfalse, поэтому++nне выполняется иnостаётся0. - ✗Ждать
True 1, будто++nвыполняется первым: C# всегда сначала вычисляет левую часть&&, аn > 0равноfalse.
Уточняющие вопросы
- →Что выведет программа, если заменить
&&на&? - →Что она выведет, если левой частью станет
n >= 0?
JuniorТеорияЧастоЧто выведет программа (строки через пробел)?
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
abc ABC
Открыть задачу →Типичные ошибки
- ✗Ждать
ABCв первой строке:ToUpperне меняетs, а возвращает новую строку, и вызов без присваивания её теряет. - ✗Считать, что
s = s.ToUpper()не сработает: строка неизменяема, но переменной можно в любой момент присвоить новую строку.
Уточняющие вопросы
- →Какие ещё методы строки ведут себя здесь так же, как
ToUpper? - →Что скажет компилятор на строку
s[0] = 'A';?
JuniorТеорияЧастоЧто выведет программа?
JuniorТеорияЧасто
Что выведет программа?
board
Открыть задачу →Типичные ошибки
- ✗Ждать
bo: второй аргументSubstring— длина куска, а не индекс его конца, поэтомуSubstring(3, 5)берёт пять символов. - ✗Ждать исключения: кусок может кончаться последним символом, поэтому начало 3 и длина 5 ровно помещаются в строку из 8 букв.
Уточняющие вопросы
- →Что напечатает
s.Substring(3)для той же строки? - →Что произойдёт, если заменить вызов на
s.Substring(3, 6)?
JuniorТеорияЧастоЧто выведет программа (строки через пробел)?
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
AB CD
Открыть задачу →Типичные ошибки
- ✗Ждать
A B C D:Writeпечатает текст и оставляет курсор в той же строке, поэтомуAиBоказываются рядом в первой строке. - ✗Ждать перевода строки перед текстом:
WriteLineсначала печатает текст и только потом переводит строку, поэтомуCначинает вторую строку.
Уточняющие вопросы
- →Что печатает
Console.WriteLine()с пустыми скобками? - →Почему
WriteиWriteLineпечатают два слова без пробела между ними?