Вы находитесь на странице: 1из 12

Вопросы к экзамену по дисциплине

«Алгоритмы и структуры данных»

Оценка знаний
1. Приведите имена и синонимы имен целочисленных типов данных в языке
C#. Опишите декларацию и инициализацию(объявление переменной по
правилам этого типа) этих типов данных.
Целочисленные типы — это подмножество простых типов. Они могут
инициализироваться литералами(значениями, которые может принимать переменная
данного типа данных). Кроме того, все целочисленные типы являются типами значений. Все
целочисленные типы поддерживают арифметические операторы, побитовые
логические операторы, операторы сравнения и равенства.

Целочисленные литералы могут быть:

 десятичным числом: без префикса;


 шестнадцатеричным числом: с префиксом 0x или 0X;
 двоичными: с префиксом 0b или 0B (доступно в C# 7.0 и более поздних версиях).
 var decimalLiteral = 42;
 var hexLiteral = 0x2A;
 var binaryLiteral = 0b_0010_1010;
Тип Разрядность в битах Диапазон представления чисел
Byte 8 0-255
sbyte 8 -128-127
short(sustem.int16) 16 -32 768-32 767
ushort 16 0-65 535
int(sustem.int32) 32 -2 147 483 648-2 147 483 647
uint 32 0-4 294 967 295
long(sustem.int64) 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

2. Приведите имена и синонимы имен строковых и булевых типов данных в


языке C#. Опишите декларацию и инициализацию этих типов данных.
String==sustem.String str = “Misha”;
Bool==sustem.Bollean zombie = true(false);
3. Раскройте понятие скалярного и векторного типов данных. Приведите
примеры декларации и инициализации массивов.
Скалярный тип (примитивный) – типы данных, предоставляемые программой по
умолчанию.(как базовая часть языка)( bool,
int,short,long,char,string,double,decimal)
Векторный тип(агрегатный) – множество видимых компонентов, которые
пользователь задал сам. (массив, стек, список)
тип[] имя_массива = new тип[размер];

4. Перечислите арифметические операции в языке C#. Приведите примеры их


использования.
Оператор Действие
+ Сложение
- Вычитание, унарный минус
* Умножение
/ Деление
% Деление по модулю(остаток от деления)
—(--) Декремент
++ Инкремент

5. Перечислите операции отношения в языке C#. Приведите примеры их


использования.
Оператор Значение
== Равно
!= Не равно
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно

6. Перечислите другие типы операций в языке C#. Приведите примеры их


использования.
Оператор присваивания.
имя_переменной = выражение

Оператор “?”
Выражение! ? Выражение2 : Выражение3;

Поразрядные операторы.
Оператор Значение
& Поразрядное И
| Поразрядное ИЛИ
^ Поразрядное исключающее ИЛИ
>> Сдвиг вправо
<< Сдвиг влево
~ Дополнение до 1 (унарный оператор НЕ)

7. Приведите синтаксис оператора выбора if и приведите пример его


использования. Раскройте его отличия от тернарной операции.
Синтаксис.
If (условие) оператор
Else оператор
Использование.
Например для проверки на четность.
for ( int i = 1; i<=10; i++)
if (i%2 ==0)
Console.WriteLine("Число {0} четное", i);
else Console.WriteLine("Число {0} нечетное", i);

От тернарной(тройной) операции «?» отличается записью, также в тернарном


операторе обязательно наличие двух выражений одного типа для проверки (
выражение1 ? Выражени2:Выражение3). Выражение1 имеет тип Boll и если
оно истинно, то выполняется выражение2, если ложно, то выражение3.
Оператор If тоже имеет тип Bool, только если он принимает значение False, то
тело оператора не выполняется или начинается выполнение Else, а если True, то
выполняется.

8. Приведите синтаксис оператора множественного выбора switch приведите


пример его использования.
Синтаксис.
switch(выражение) {
case константа1:
последовательность операторов
break;
case константа2:
последовательность операторов
break;
case константа3:
последовательность операторов
break;
default:
последовательность операторов
break;
}

Применение.
for (byte i = 0; i < 10; i++)
switch (i)
{
case 0:
Console.WriteLine("i равно нулю");
break;
case 1:
Console.WriteLine("i равно единице");
break;
case 2:
Console.WriteLine("i равно двум");
break;
case 3:
Console.WriteLine("i равно трем");
break;
case 4:
Console.WriteLine("i равно четырем");
break;
default:
Console.WriteLine("i равно или больше пяти");
break;
}
9. Раскройте понятие цикла. Приведите синтаксис оператора for и пример его
использования.

Цикл — разновидность управляющей конструкции в высокоуровневых языках


программирования, предназначенная для организации многократного исполнения
набора инструкций.

Синтаксис.
for(инициализация; условие; итерация) оператор;

Приминение.
Посчитаем до 5

For (byte i=1; i<=5;i++)


Console.WriteLine( i);
10. Раскройте понятие цикла. Приведите синтаксис оператора while и пример
его использования.
Цикл — разновидность управляющей конструкции в высокоуровневых языках
программирования, предназначенная для организации многократного исполнения набора
инструкций.

Синтаксис.
while (условие) оператор;

Приминение.
Сколько раз делится на 2 число 20
int i = 20;
int g = 0;
while (i %2 == 0)
{
g++;
i = i/2;

}
Console.WriteLine("число {0} делится на 2 {1} раз(а)", 20, g);

11. Раскройте понятие цикла. Приведите синтаксис оператора do-while и


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

Синтаксис.
do {
операторы;
} while (условие);
Приминение.
Считаем до 10.
int i = 0;
do { i++; Console.WriteLine(i); } while (i != 10);
Console.ReadKey();

12. Раскройте понятие цикла. Приведите синтаксис оператора foreach и пример


его использования.
Цикл — разновидность управляющей конструкции в высокоуровневых языках
программирования, предназначенная для организации многократного исполнения набора
инструкций. Оператор foreach циклически опрашивает массив по
отдельным его элементам от начала и до конца.
Синтаксис.
foreach (тип имя_переменной_цикла in коллекция) оператор;

Использование.
int sum = 0;
int[] nums = new int[10];
// Задать первоначальные значения элементов массива nums.
for(int i = 0; i < 10; i++)
nums[i] = i;
// Использовать цикл foreach для вывода значений
// элементов массива и подсчета их суммы.
foreach(int х in nums) {
Console.WriteLine("Значение элемента равно: " + х);
sum += х;
}
Console.WriteLine("Сумма равна: " + sum);

13. Раскройте понятие функции и процедуры. Приведите формальный


синтаксис их деклараций.
Процедура - может возвращать значение обработки, если объектом объявляет с атрибутом VAR как
параметр - переменная. На выходе может выдавать несколько значений или не одного
Функция - результат вычислений обязательно присваивается переменной, имя которой совпадает с
именем функции
Процедуры и функции. Отличия
Функция отличается от процедуры двумя особенностями:

 всегда вычисляет некоторое значение, возвращаемое в качестве результата функции;

 вызывается в выражениях.
Процедура C# имеет свои особенности:

 возвращает формальный результат void, указывающий на отсутствие результата, возвращаемого


при вызове процедуры;
 вызов процедуры является оператором языка;

 имеет входные и выходные аргументы, причем выходных аргументов – ее результатов – может


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

заголовок_метода { тело_метода}

public void C(){…}; - процедура

public int B() {…; return(значение)}; - функция(возвращает значение)

14. Раскройте понятия формальных и фактических параметров функций и


процедур.
 Формальными параметрами называются переменные описанные в
заголовке программы и используемые только внутри процедуры (функции).

Формальные параметры можно разбить на 2 категории:

1. параметры - значения (эти параметры в основной программе процедурой (функцией) не


меняются );

2. параметры - переменные (эти параметры процедура (функция) может изменить в основной


программе );

        Параметрами - значениями называются переменные, которые могут изменяться внутри


процедуры (функции), но не передают свои значения в программу.

        Параметрами - переменными называются переменные, которые изменяются в


процедуре (функции) и передают свое значение в программу.

<имя процедуры>{(формальные параметры: их тип)};


{(локальные переменные)}

 Фактическими параметрами называются параметры, которые задаются при


вызове процедуры (функции).

  Правила задания фактических параметров:

1. Фактические параметры должны совпадать с формальными по количеству, по порядку


следования, по типу.

2. Если формальный параметр – параметр-переменная, то фактический параметр при вызове


процедуры задается только идентификатором (вызов по ссылке).
3. Если формальный параметр – параметр- значение, то фактический параметр при вызове
процедуры задается:

o         идентификатором
o         константой
o         выражением

(вызов по значению).

4.  Для параметров-переменных (вызов по ссылке) должно быть точное совпадение по типу
фактических и формальных параметров, а для параметров-значений (вызов по значению)
допустима совместимость

<имя процедуры> {(фактические параметры)};

15. Опишите способы вызова функций в языке C# и возврата их результатов.


16. class Num1
17. {
18.
19. public int Num()//Прописываем функцию, которая будет возвращать квадрат
введенного числа.
20. {
21. Console.WriteLine("введите число");
22. int x = int.Parse(Console.ReadLine());
23. return x * x;
24. }
25. }
26.
27.
28. class Num2
29. {
30. static void Main()
31. {
32. Num1 e = new Num1();// Создаем объект класса Num1, которому и будут
присваиваться возвращаемые значения.
33. Console.WriteLine("Число возведенное в квадрат равно "+ e.Num());
34. Console.ReadKey();
35. }
36. }

Оценка умений
1. Обоснуйте выбор типов данных и констант языка C# на примере
конкретной задачи.
Тип данных выбирается в соответствии с тем насколько большими числами
мы будем оперировать в программе или будем ли мы использовать текст.

Byte максимальное число 255 – это значит, что этот тип можно
использовать, когда мы работаем с небольшими целым числом;
Sbyte используется для хранения небольшого целого числа со знаком( от
-128 до 127);
Short используется для чилел, находящихся в диапазоне от  0 до 65 535;
Ushort используется для целых чисел, находящихся в диапазоне от -32 768 до
32 767 со знаком;

UInt используется для хранения целых чисел в диапазоне от  -2 147 483 648 до


2 147 483 647;

Int используется для целых чисел в диапазоне от От 0 до 4 294 967 295;

Long используется для целых чисел в диапазоне От -9 223 372 036 854 775 808 до


9 223 372 036 854 775 807;

Ulog используется для целых чисел в диапазоне От 0 до 18 446 744 073 709 551 615;

Float используется для дробных чисел с точностью до 6-9 знаков после запятой.

Double используется для дробных чисел с точностью до 15-17 знаков после запятой

Decimal используется для дробных чисел с точностью до 28 знаков после запятой.

Тип литерала определяется его суффиксом следующим образом:

 Литерал без суффикса или с суффиксом d или D имеет тип double.


 Литерал с суффиксом f или F имеет тип float.
 Литерал с суффиксом m или M имеет тип decimal.

double d = 3D;
d = 4d;
d = 3.934_001;

float f = 3_000.5F;
f = 5.4f;

decimal myMoney = 3_000.5m;


myMoney = 400.75M;

- Константы используются, если нам в программе нужно какое-то


фиксированное значение.
Константа объявляется следующим образом:
Const_ тип_имя=значение;
Тип – это тип данных, в который входит заданное значение(byte, bool,char,
int и т.д.)
- Переменные используются для того, чтобы ей можно было изменять
значение в программе так, как нам нужно.
Переменная объявляется следующим образом:
Тип_имя переменной = значение;
- Переменная структурой ( относится к типу-значению)
Struct имяструктуры { доступ_тип_имя2;};
Имя структуры_имя переменной;
имя переменной.имя2 = значение;
- Переменная перечислением ( когда нужно задать много значений)
Enum имя перечисления{ значение1,значение2,…,значениеN};
Имяперечисления_имя переменной;
Имя переменной = Имя перечисления.значениеN

2. Обоснуйте выбор операций языка C# на примере конкретной задачи.


Операци Назначение Пример
я
= присвоение х=у
+ сложение а=х+у
- вычитание а=х-у
* умножение а=х*у
/ деление а=х/у
% деление по модулю а=х%у
& поразрядное И i&16
| поразрядное ИЛИ i|12
^ поразрядное И исключающее ИЛИ k^10
~ поразрядное НЕ ~a
<< поразрядный сдвиг влево <<2
>> поразрядный сдвиг вправо >>2
== равно 1==0
!= не равно к!=15
> больше, чем z>15.2
< меньше, чем Tab< -123
>= больше или равно Z11>=0
<= меньше или равно Y1<=10
&& логическое И (R<2)&&(R>20)
|| логическое ИЛИ (L==2)||(L>5)
! логическое НЕ Tab!=13

1. Обоснуйте выбор операторов языка C# на примере конкретной задачи.


Вид Оператор Значение
Присваивания Volume/Radius Идентификатор переменных
Вызов метода Math.Atan вызовов методов
System.Console.ReadLine() вызов используется как операнд
Console.WriteLine вызов записан как оператор
Блок или { Используется там, где по смыслу должен быть
составной оператор_1{ именно единичный оператор
...{
оператор
оператор_N{
}
Операторы Оператор if Позволяет организовать выбор из многих
ветвления возможностей
Оператор switch Используется, когда выбор варианта определяется
значениями некоторого выражения
Операторы for (инициализаторы; Задача параметров цикла, оператор, стоящий
цикла условие; после круглой закрывающей скобки, задаёт тело
список_выражений) цикла
оператор
while (выражение) Является универсальным видом цикла
оператор
Оператор foreach Удобен при работе с массивами
Операторы goto метка уникальный идентификатор
перехода обеспечивают передачу управления в case-ветвь
goto case или default-ветвь
константное_выражение

goto default
Операторы break и Выход из цикла
continue
Оператор return Позволяет завершить выполнение метода

2. Обоснуйте выбор оператор for и foreach на примере конкретной задачи.


//Объявляем и инициализируем счетчик,
//проверяем условие и решаем, будем ли выполнять действие
for(int k = 0; k < 10; k++)
{
//что-то делаем
Console.WriteLine(k);
//возвращаемся к проверке условия
}

int[] someArray = new int[]{1,2,3,4,5,6,7,8,9,10}


foreach (int tempNumber in someArray)
{
//здесь на каждом витке вызова цикла tempNumber
//будет равен следующему числу из набора.
//Сначала 1, потом 2, потом 3 и т.д.
}

3. Раскройте отличия операторов for и foreach.


for – если нужен индекс и элемент массива
foreach – если не нужен индекс, но используется значение массива
4. Обоснуйте выбор тернарной операции или оператора if на примере конкретной задачи.
result = a >5 ? a + 4 : a + 5;

if(a >5)
result = a + 4;
else
result = a + 5;
5. Обоснуйте выбор набора функций или процедур на примере конкретной задачи .
Функция - это мини програмка такая, которая имеет другое имя( не Main)
 
крч скину пример лучше
 
19. public int Num()//Прописываем функцию, которая будет возвращать квадрат
введенного числа. 
20. { 
21. Console.WriteLine("введите число"); 
22. int x = int.Parse(Console.ReadLine()); 
23. return x * x; 
24. } 
25. }
 
А процедура - это просто какое - то действие над данными/объектами
 
Т.е. у процедуры никогда не может быть оператора return

6. Обоснуйте необходимость функциональной декомпозиции на примере конкретной


задачи.
// Good structured programming:
// applying functional decomposition.
float* find_value
  (float *a, size_t size, float val)
{
  for (size_t i = 0; i < size; ++i)
   if (a[i] == val)
      return a + i;
  return nullptr;
}
float* find_row_without_zero_3
  (float **a, size_t rows, size_t cols)
{
  for (size_t i = 0; i < rows; ++i)
    if (!find_value(a[i], cols, 0))
      return a[i];
  return nullptr;
}
7. Обоснуйте выбор операторов if или switch на примере конкретной задачи.
switch (идентификатор переменной)
{
case значение1:
оператор1;
break;
case значение2:
оператор2;
break;

default:
оператор n;
}

int time;
scanf("%d", &time);
if (time>11)
puts ("Пора домой");
else
puts ("еще рано!");
}
Еслив программе необходимо учесть больше трех возможных вариантов,
конструкция if...else может оказаться очень запутанной, даже если использовать
вложенные операторы.
8. Обоснуйте выбор операторов while или do-while на примере конкретной задачи.
using System;
using System.Threading;
namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            int number = 0;
            do
            {
                bool flag = false;
                while (!flag)
                {
                    Console.WriteLine("Введите что-то:");
                  flag= int.TryParse(Console.ReadLine(), out number);
                }
                if (number == 1)
                {
                    Console.WriteLine("Аристарх");
                }
                else if(number==2)
                    Console.WriteLine("Алиев 122");
               else if(number==3)
                   Console.WriteLine("122L");
            } while (number!=4);
 
            Console.WriteLine("Выходим...");
            for (int i = 0; i < 5; i++)
            {
                Console.Write(".");
                Thread.Sleep(300);
            }
        } 
    }  
Оценка навыков
Решение задач, аналогичных задачам из лабораторных работ №1–№5.