- Автор темы
- #1
Условия и циклы.
В C# поддерживаются многие операторы условий и циклов, применяемых в C++, поэтому рассмотрим только отличия.
Оператор условия if-else внешне выглядит, как в C++
Однако, в C# выражение в скобках должны иметь тип bool. Это означает, что выражения типа if(a)/* a не имеет тип bool) */ и if(a = 5) будут вызывать ошибку компиляции. Таким образом C# позволяет избежать известной ошибки, связанной с потерей одного знака = внутри оператора условия.
Условный оператор
условие ? выражение /* условие истинно */ : выражение /* условие ложно */
Оператор множественного выбора
В данном случае отличия от языка C++ более существенны:
Проходить сквозь case можно, если он не содержит операторов
3.Выход из метки case можно осуществить при помощи оператора goto
4. Выражение, передаваемое оператору switch ( switch( a ) ), может быть целого ( не float, не double, не decimal ) или строкового типа
Циклы
Цикл с предусловием
Цикл с постусловием
Параметрический цикл
Во всех циклах, как и в операторе if, условие должно иметь тип bool.
Цикл foreach
Данный оператор позволяет перебрать все значения в массиве (см. следующий раздел) или в классе-коллекции (см. следующие уроки). Например, если arr - массив, а N - его длина, то вывести на экран значения элементов массива можно следующими способами (рассматриваются циклы for и foreach):
***********
параметр цикла в блоке операторов, следующих за foreach, доступен только для чтения !!!
***********
В C# поддерживаются многие операторы условий и циклов, применяемых в C++, поэтому рассмотрим только отличия.
Оператор условия if-else внешне выглядит, как в C++
Код:
if ( условие )
{
...
}
else if ( условие )
{
...
}
...
else
{
...
}
Однако, в C# выражение в скобках должны иметь тип bool. Это означает, что выражения типа if(a)/* a не имеет тип bool) */ и if(a = 5) будут вызывать ошибку компиляции. Таким образом C# позволяет избежать известной ошибки, связанной с потерей одного знака = внутри оператора условия.
Условный оператор
условие ? выражение /* условие истинно */ : выражение /* условие ложно */
Оператор множественного выбора
Код:
switch( выражение )
{
case константное выражение:
выражение;
...
оператор выхода из case;
...
default:
выражение;
...
оператор выхода из default;
}
В данном случае отличия от языка C++ более существенны:
- Оператор выхода из метки case или необязательной метки default должен присутствовать, даже если данная метка последняя в операторе switch.
- Прохождение сквозь метки case недопустимы
Код:
switch ( a )
{
case 5:
++a;
case 6: // ошибка компиляции ( нельзя "забыть" выйти из case )
--a;
break;
}
Проходить сквозь case можно, если он не содержит операторов
Код:
switch ( a )
{
case 5:
case 6: // ошибок нет
--a;
break;
}
3.Выход из метки case можно осуществить при помощи оператора goto
Код:
switch ( a )
{
case 5:
++a;
goto default; // переход на другую метку
case 6:
--a;
break; // выход из switch
default:
b = 0;
goto case 6; // переход на другую метку
}
4. Выражение, передаваемое оператору switch ( switch( a ) ), может быть целого ( не float, не double, не decimal ) или строкового типа
Код:
switch ( a )
{
case "Hello":
Console.WriteLine(a + ", World!!!");
break;
}
Циклы
Цикл с предусловием
Код:
while ( условие )
{
...
}
Цикл с постусловием
Код:
do
{
...
}while ( условие );
Параметрический цикл
Код:
for ( инициализация; условие; приращение )
{
...
}
Во всех циклах, как и в операторе if, условие должно иметь тип bool.
Цикл foreach
Данный оператор позволяет перебрать все значения в массиве (см. следующий раздел) или в классе-коллекции (см. следующие уроки). Например, если arr - массив, а N - его длина, то вывести на экран значения элементов массива можно следующими способами (рассматриваются циклы for и foreach):
Код:
for(int i = 0; i < N; i++)
Console.WriteLine("{0} ", arr[i]);
foreach(int i in arr) // знать длину массива не обязательно
Console.WriteLine("{0} ", i);
***********
параметр цикла в блоке операторов, следующих за foreach, доступен только для чтения !!!
Код:
foreach(int i in arr) // знать длину массива не обязательно
i++; // Ошибка
***********