ОПЕРАТОРЫУПРАВЛЕНИЯ
В языке С# реализован полный набор управляющих конструкций структурного программирования: следование, ветвление, цикл. Кроме того, имеются дополнительные операторы управления.
Следование
Операторы по умолчанию выполняются последовательно в порядке записи. Операторы, заключенные в фигурные скобки {} образуют блок операторов. Блок операторов рассматривается транслятором как один составной оператор.
{оператор … оператор} блок операторов
В качестве оператора могут быть:
· объявление
· выражение, заканчивающееся символом точи с запятой
· управление
· блок операторов
Поскольку блок операторов может содержать объявление переменных, то возникает проблема области видимости локальной переменной. Проблема решается следующим образом: переменная, объявленная в блоке, видна в этом блоке и во вложенных блоках, но не видна в охватывающем блоке.
Ветвление
If (логическое выражение P)
Оператор1
Else
Оператор2
В качестве оператора может использоваться любая из управляющих конструкций в виде строго одного оператора, но этот оператор может быть блоком. Это правило справедливо для всех управляющих конструкций.
Допускается сокращенное ветвление.
if (P) оператор;
Пример:
Вычислить значение переменной, заданной соотношением
x2, если х<0
y=
х+10, если х≥0
Фрагмент программы с использованием ветвления:
double x, y;
x = double.Parse(Console.ReadLine());
if (x < 0)
y = x * x;
else
y = x + 10;
Фрагмент программы с использованием ветвления:
double x, y;
x = double.Parse(Console.ReadLine());
y = 0.0;
if (x < 0)
y = x * x;
if (x>=0)
y = x + 10;
3. Циклы
Цикл с предусловием
While (P) оператор
Цикл с постусловием
do
Оператор
while (P);
Универсальный цикл
For(выражение1; выражение2; выражение3) оператор
Схема выполнения универсального цикла:
1. вычисляется выражение1, которое играет роль начальной установки параметров цикла
2. вычисляется выражение2, которое играет роль условия повтора цикла. Если значение этого выражения false, выполнение цикла завершается, в противном случае переходим к шагу 3.
3. Выполняется оператор, образующий тело цикла
4. вычисляется выражение3, которое играет роль модификатора параметров цикла
5. переход на шаг 2
Любое из выражений в заголовке цикла может отсутствовать, при этом разделяющие их скобки должны сохраняться. Отсутствующее выражение2 означает, что условие повтора цикла имеет значение true.
Примеры использования циклов
int i=0; //Счетчик
while (i<2)
{
Console.WriteLine (“Снег”); //1
i++; //2
}
Шаг i в начале шага Экран i в конце шага
1 0 Снег 1
2 1 Снег 2
3 2
Если не образовать блок операторов, заключив строки 1 b 2 в фигурные скобки, то цикл будет выполняться до бесконечности, так как изменение значения счетчика не будет.
int i=0;
do
{
Console.WriteLine (“Снег”);
i++;
}
while (i<2);
Шаг i в начале шага Экран i в конце шага
1 0 Снег 1
2 1 Снег 2
int i;
for (i=0;i<2;i++)
Console.WriteLine (“Снег”);
Шаг i в начале шага Экран i в конце шага
1 0 Снег 1
2 1 Снег 2
3 2
for (;;)
Console.WriteLine (“Снег”);.//Бесконечный вывод этого сообщения
Выражение инициализации может содержать объявление локальных переменных. Локальные переменные, объявленные в заголовке цикла, видны только внутри цикла.
Выражение инициализации может содержать несколько выражений, разделенных “, ”, а объявлений – не более одного
Пример
Вычислить сумму n элементов следующего ряда. Сумму выводить после прибавления каждого слагаемого.
N
S=∑ i/(i2+1) = 1/2 + 2/5 + 3/10 + … + N/N2+1
i=1
int N;
string str; // рабочая строка для вывода на экран
int i;
double s; // переменная, в которой будет накапливается сумма
N=5;
for (i=1, s=0; i<=N; i++, Console.WriteLine(str))
{
s+=(double)i/(i*i+1.0);
str=s.ToString();
}
Второй вариант решения задачи
int N;
string str;
double s;
N=5;
s=0;
for (int i=0; i<=N; i++, Console.WriteLine(str))
{
s+=(double)i/(i*i+1.0);
str=s.ToString();\
}