Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен в гаи redacted.doc
Скачиваний:
5
Добавлен:
27.09.2019
Размер:
676.35 Кб
Скачать

3. Что будет выведено в результате выполнения цикла?

float begin = 1000000000;

int counter = 0;

for (float i = begin; i < (begin + 10); i++)

counter++;

Console.WriteLine(counter);

Ответ: бесконечный цикл.

Оригинальное обоснование: Для таких больших значений float нет разницы между begin+1 и begin+10.

Альтернативное обоснование: Если более корректно, то в данном случае при операции инкремента идет потеря значимости числа, т.к. точность представления для типа float 7 знаков. Но тогда возникает резонный вопрос, а почему нет потери значимости в выражении (begin+10), ведь цикл то выполняется? А ее нет там потому, что компилятор с какого-то перепугу приводит это выражение к типу System.Int64(System.Int64.MaxValue = 9223372036854775807) и только потом выполняет операцию сравнения, т.е. потери значимости здесь не происходит.

Экзаменационный билет №9

1. Пространство имён – определение, примеры.

Пространство имён – это способ организации системы типов в единую группу. Существует общая общеязыковая библиотека базовых классов. И концепция пространства имён обеспечивает эффективную организацию и навигацию в этой библиотеке. Вне зависимости от языка программирования доступ к определённым классам обеспечивается за счёт их группировки в рамках общих пространств имён.

Наиболее часто используемое пространство имён – System. Расположение соответствующей сборки известно. Если не использовать оператора usung System, корректное обращение к функции WriteLine() члену класса Console выглядело бы следующим образом:

System.Console.Writeline(“Hello!”); //Полное квалифицированное

При компиляции модуля, транслятор по полному имени функции (если используется оператор using – то по восстановленному) находит её код, который и используется при выполнении сборки.

2. Циклы for, while, do. Прерывание циклов.

  • for (<инициализация>; <условие>; <операция>)

{

<код, подлежащий выполнению в цикле>

}

  • while (<проверка>)

{

<код, подлежащий выполнению в цикле>

}

  • do

{

<код, подлежащий выполнению в цикле>

}

while (<проверка>);

  1. break - выход из цикла;

  2. continue - выход из итерации;

  3. goto - переход на метку;

  4. return - выход из метода, содержащего цикл.

Пример:

int i = 1;

while (i <= 10)

{

if (i == 6)

break;

Console.WriteLine("{0}", i++);

}

3. Что будет выведено в результате выполнения цикла?

int end = int.MaxValue;

int begin = end - 100;

int counter = 0;

for (int i = begin; i <= end; i++)

counter++;

Console.WriteLine(counter);

Ответ: цикл бесконечный по определению - все значения int меньше или равны int.MaxValue.

Экзаменационный билет №10

1. Сокрытие методов базового класса.

При наследовании какого-нибудь (не абстрактного) члена базового класса, так же наследуется и его реализации. Если унаследованный член является виртуальным, тогда его реализацию можно легко переопределить с помощью ключевого слова override. Однако, помимо этого, независимо от того, является унаследованный член виртуаль­ным или нет, при желании его реализацию еще можно и просто сокрыть. Это удобно в случае, например, когда общедоступный унаследованный член работает не совсем так, как хотелось бы. Делается это с использованием приблизительно такого кода:

public class MyBaseClass

{

public void DoSomething ()

{

// Базовая реализация.

}

}

public class MyDerivedClass : MyBaseClass

{

public void DoSomething()

{

// Реализация в производном классе, скрывающая базовую реализацию.

}

}