If служит для разветвления программы на два направления. Если некоторое условие выполняется, то программа идет в одну сторону, если не выполняется - то в другую. Вот сразу пример, определяющий, четное или нечетное число ввел пользователь:
...
class Class1
{
...
static void Main(string[] args)
{
int k = Int32.Parse(Console.ReadLine());
if(b)
{
Console.WriteLine("Четное число");
}
else
{
Console.WriteLine("Нечетное число");
}
Console.ReadLine();
}
}
Как и в других C-подобных языках, фигурные скобочки можно не писать в случае одного оператора. Также написание веточка else тоже не является необходимым - все зависит от конкретной задачи.
Оператор switch примеряется тогда, когда программа должна разделится более чем на два направления (т. е. будем двигаться или сюда, или сюда, или сюда). Вот пример:
int k = Int32.Parse(Console.ReadLine());
Console.WriteLine(k.ToString());
switch (k){
case 1:
case 2:
Console.WriteLine("Неудовлетворительно");
break;
case 3:
Console.WriteLine("Удовлетворительно");
break;
case 4:
Console.WriteLine("Хорошо");
break;
case 5:
Console.WriteLine("Отлично");
break;
default:
Console.WriteLine("Ошибка");
break;
}
В приведенном примере в зависимости от введенного пользователем числа на экран выводится та или иная оценка. Если число k не лежит в промежутке от 1 до 5, то выполняются операторы в веточке default и выводится надпись "Ошибка". Ветока default не обязательна. Обратите внимание на оператор break. Если его не написать, то будут выполнятся операторы из следующей веточки case до строки с break'ом (т. е. в данном примере если пользователь введет 1 или 2, то программы выведет "Неудовлетворительно"). Обратите внимание, что если в некоторой веточке case или default есть операторы, то написание break обязательно. Так, в следующих двух кусках кода есть ошибки:
...
case 1:
Console.WriteLine("Совсем неудовлетворительно");
//Ошибка! Тут пропушен breakcase 2:
Console.WriteLine("Неудовлетворительно");
break;
...
...
default:
Console.WriteLine("...");
//Ошибка! Тут пропушен break
}
int k = Int32.Parse(Console.ReadLine());
int sum=0;
for(int i=1; i<=k; i++){
sum+=i;
}
Console.WriteLine(sum);
Этот пример подсчитывает сумму чисел от 1 до введенного пользователем числа k. Сумма записывается в переменную sum и выводится на экран.
Очень часто циклы используются для некоторых действий с массивами. Так как нумерация элементов массива идет с нуля, то типичный цикл будет выглядеть так:
int[] a = {-5, 4, 55};
int sum=0;
for(int i=0; i<3; i++){
sum+=a[i];
}
В этом примере начальное значение для счетчика цикла равно нулю, и в условии продолжения цикла мы пишем знак "меньше", после которого ставится количество элементов в массиве. Разумеется, если в цикле должен выполнится только один оператор, то фигурные скобки можно не писать. Тут все, как в других C/C++-подобных языках.
Теперь рассмотрим пример цикла foreach:
int[] m = {-5, 4, 10};
int sum=0;
foreach(int i in m){
sum+=i;
}
В данном примере мы суммируем все элементы массива m, записывая сумму в sum.
В приведенном примере наш цикл перебирает все элементы массива m. На это нам указывает строка
...
foreach(int i in m){
...
которая интерпретируется так: для каждого целого числа из массива m делам что-то там. Если бы элементами массива были бы не целые, а, скажем, вещественные, то мы записали бы что-то вроде:
...
foreach(float i in m){
...
Т. е. мы пишем именно тип элементов массива. На самом деле foreach используется не только для массивов, но и для других объектов (например, для хэш-таблиц). Но это будет рассмотрено в последующих уроках.
Циклы while бывают двух видов - собственно цикл while и do-while. Оба эти цикла используются, как правило, тогда, когда точно не известно, сколько раз цикл должен выполнится. Например, при вводе пользователем пароля или при подсчете чего-либо с определенной точностью. Оба эти цикла будут выполняться до тех пор, пока условие в круглых скобках после слова while будет истинно. Как только условие станет равным false, выполнение цикла прекращается. Самое важное отличие между while и do-while в том, что while может не выполниться ни одного раза, тогда как do-while по крайней мере один раз выполнится. Вот примеры их использования:
int k=0; //Количество попыток//заводим новую последовательность случайных чисел
Random rnd=new Random(112); //Пишем любой параметрwhile(rnd.Next(1, 6)!=5)
{
k++;
};
Console.WriteLine("С "+(k+1).ToString()+"-го раза выпало 5");
В первом примере цикл будет вращаться до тех пор, пока пользователь не введет правильный пароль (wi98zK), во втором - пока некоторое случайное число не окажеться равным 5. При этом если число с самого начала оказалось равным пяти, то цикл вообще выполняться не будет.