Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Циклы в Си-шарп. Операторы break и continue

Поиск

Циклы служат для многократного повторения некоторого фрагмента кода.
В Си-шарп есть четыре оператора циклов: for, while, do-while, foreach.

Цикл for

Этот цикл используется тогда, когда наперед известно, сколько повторений нужно сделать. Он имеет следующую структуру:

 

for (инициализация счетчика; условие продолжения; итерация)
{
//блок кода, который будет повторяться
}

 

Пример программы, которая выводит на экран числа 0, 1, 2, 3, 4:

 


static void Main(string[] args)
{
for (int i = 0; i < 5; i++) // цикл выполнится 5 раз
{
Console.WriteLine(i);
}
}


Сначала происходит создание и инициализация счетчика, i=0. Дальше идет проверка условия (i < 5), если результат будет «истина», то дальше выполняется блок кода в теле цикла. В конце итерации происходит изменение значения счетчика (в данном примере увеличение на единицу). После этого вновь происходит проверка условия и так далее. Когда условие будет «ложь», цикл работу завершит.

Пример программы, которая находит и выводит на экран сумму элементов массива:

 

static void Main(string[] args)
{
int[] numbers = { 4, 7, 1, 23, 43 };
int s = 0;
for (int i = 0; i < numbers.Length; i++)
{
s += numbers[i];
}
Console.WriteLine(s);
Console.ReadKey();
}


Пример цикла for, когда счетчик уменьшается после каждой итерации:

 

for (int i = 5; i > 0; i--) //выполнится 5 раз
{
Console.WriteLine(i);
}


Счетчик можно изменять не только на единицу. Пример программы, которая выводит чётные числа (по число 50):

 

for (int i = 0; i <= 50; i+=2) //выполнится 26 раз
{
Console.WriteLine(i);
}


Цикл while

Слово while переводится, как «пока», что хорошо его характеризует. Он продолжает выполнятся до тех пор, пока «истинно» некоторое условие. Он имеет такую структуру:

 

while (условие продолжения)
{
//блок кода, который будет повторяться
}


Сначала проверяется условие, а дальше выполняется блок кода.

Пример той же программы, которая выводит на экран числа 0, 1, 2, 3, 4:

 

int i = 0;
while (i < 5)
{
Console.WriteLine(i);
i++;
}


Цикл может выполнятся «вечно», если задать всегда истинное условие:

 

while (true)
{
Console.WriteLine("Вечный цикл");
}


Цикл do-while

Этот тот же цикл while, только здесь сначала выполняется блок кода, а уже потом идет проверка условия. Это гарантирует хотя бы один проход цикла.

 

do
{
//блок кода, который будет повторяться
}
while (условие продолжения);

 

Пример программы, которая не завершит работу, пока с клавиатуры не введут число 5:

 

static void Main(string[] args)
{
int number;
do
{
Console.WriteLine("Введите число 5");
number = Convert.ToInt32(Console.ReadLine());
}
while (number!= 5);
}


О цикле foreach мы поговорим в отдельном уроке.

Оператор break

Из любого цикла можно досрочно выйти, используя оператор break. Использовать данный оператор есть смысл после удовлетворения некоторого условия, иначе цикл завершится на первой итерации.

Пример программы, которая проверяет, есть ли в массиве число кратное 13-ти. Найдя такое число, нет смысла дальше проверять остальные элементы массива, и здесь мы используем оператор break:

 

static void Main(string[] args)
{
int[] numbers = { 4, 7, 13, 20, 33, 23, 54 };
bool b = false;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 13 == 0)
{
b = true;
break;
}
}
Console.WriteLine(b? "В массиве есть число кратное 13": "В массиве нет числа кратного 13");
Console.ReadKey();
}


Оператор continue

Данный оператор позволяет перейти к следующей итерации, не завершив до конца текущую.

Пример программы, которая находит сумму нечетных элементов массива:

 

static void Main(string[] args)
{
int[] numbers = { 4, 7, 13, 20, 33, 23, 54 };
int s = 0;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 == 0)
continue; //переход к следующей итерации
s += numbers[i];
}
Console.WriteLine(s);
Console.ReadKey();
}

 

Домашнее задание

Задача 1. Вывести на экран 20 элементов последовательности 1, 4, 7, 10, 13…
Задача 2. Напишите программу, которая будет «спрашивать» правильный пароль, до тех пор, пока он не будет введен. Правильный пароль пусть будет «root».
Задача 3. Дано два массива одинаковой длины (по 10 элементов). Создайте третий массив, который будет отображать сумму первых двух массивов. Первый элемент третьего массива равен сумме первых элементов двух первых массивов и так далее.

Урок 7

Оператор цикла foreach в Си-шарп

Оператор цикла foreach в Си-шарп служит для перебора элементов коллекции. К коллекциям относятся массивы, списки List и пользовательские классы коллекций. В данном операторе не нужно создавать переменную-счетчик для доступа к элементам коллекции, в отличии от других циклов. Оператор foreach имеет следующую структуру:

foreach ([тип] [переменная] in [коллекция])
{
//тело цикла
}

Пример программы, в которой находится сумма элементов массива с использованием цикла foreach:

 

static void Main(string[] args)
{
int[] numbers = { 4, 7, 13, 20, 33, 23, 54 };
int s = 0;

foreach (int el in numbers)
{
s += el;
}
Console.WriteLine(s);
Console.ReadKey();
}


На каждой итерации в переменную el последовательно записывается элемент коллекции. На первой итерации значение переменной el равно “4”, на второй итерации - “7” и т.д.

Как и в других циклах, в foreach можно использовать операторы break и continue.

Данный оператор стоит использовать для получения (чтения) данных из коллекции. Не стоит использовать его для добавления или удаления элементов из коллекции, иначе вы получите исключение (ошибку) Collection was modified; enumeration operation may not execute.

Домашнее задание

Используя цикл foreach, выведите на экран все элементы массива целых чисел, которые больше 20 и меньше 50.

 

Урок 8

Функции в Си-шарп. Оператор return

Функция являет собой небольшую подпрограмму. Если просто программа - это решение какой-то прикладной задачи, то функция – это тоже решение, только уже в рамках программы и, соответственно, она выполняет задачу «попроще». Функции позволяют уменьшить размер программы за счет того, что не нужно повторно писать какой-то фрагмент кода - мы просто вызываем сколько угодно и где нужно объявленную функцию.

Функции в Си-шарп также называют методами. Между этими двумя понятиями разница небольшая, и тут мы будем использовать термин функция.

До этого, мы весь код писали в функции main. Функция main является главной функцией приложения и точкой входа программы. Любая функция в Си-шарп может быть объявлена только в рамках класса, так как C# - полностью объектно-ориентированный язык программирования (ООП). Объявление пользовательской функции внутри другой функции (например main) недопустимо. Объявление функции имеет следующую структуру:

[модификатор доступа] [тип возвращаемого значения] [имя функции] ([аргументы])
{
// тело функции
}

Модификатор доступа (области видимости) может быть public, private, protected, internal. Для чего это нужно будем говорить в отдельном уроке, а пока будем везде использовать public.

Между модификатором и типом может стоять ключевое слово static, что означает, что функция будет статичной. Подробно говорить о статичных функциях и переменных мы будем в отдельном уроке. Скажу только, что из статичной функции можно вызывать другие функции, если они тоже статичные. Главная функция main – всегда static, поэтому все функции в этом уроке мы будем объявлять также статичными.

Функция может возвращать значение или не возвращать. Если функция, например, возвращает целое число, то нужно указать тип int. Если функция не возвращает никакого значения, то для этого используется ключевое слово void. Функции, которые не возвращают значение, еще называют процедурами.

Называть функции стоит так, чтобы имя отображало суть функции. Используйте глаголы или словосочетания с глаголами. Примеры: GetAge(), Sort(), SetVisibility().

Аргументы – это те данные, которые необходимы для выполнения функции. Аргументы записываются в формате [тип] [идентификатор]. Если аргументов несколько, они отделяются запятой. Аргументы могут отсутствовать.

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

Итак, хватит теории, переходим к практике.

Пример функции, которая не возвращает значение

Напишем простую функцию, которая будет заменять в массиве строк указанное имя на другое. Данная функция будет принимать три аргумента: массив строк, имя, которое необходимо заменить и новое имя. Так как функция не будет возвращать значение, указываем тип void перед именем функции.

 

public static void ReplaceName(string[] names, string name, string newName)
{
for (int i=0; i < names.Length; i++)
{
if (names[i] == name)
names[i] = newName;
}
}


Сама функция очень простая. Проходим в цикле по элементам и смотрим, равен ли элемент указанному имени. Если да, то заменяем его на новое имя.

Функция написана, и теперь используем ее:

 

class Program
{
public static void ReplaceName(string[] names, string name, string newName)
{
for (int i=0; i < names.Length; i++)
{
if (names[i] == name)
names[i] = newName;
}
}
static void Main(string[] args)
{
string[] names = { "Sergey", "Maxim", "Andrey", "Oleg", "Andrey", "Ivan", "Sergey" };
ReplaceName(names, "Andrey", "Nikolay"); // вызов функции. Все строки "Andrey" в массиве будут заменены на "Nikolay"
ReplaceName(names, "Ivan", "Vladimir");
}
}


После вызова функции два раза в этой программе, массив будет выглядеть так: "Sergey", "Maxim", " Nikolay ", "Oleg", " Nikolay ", " Vladimir ", "Sergey".


Пример функции, которая возвращает значения

Напишем функцию, которая будет находить максимальное число в массиве. Аргумент у этой функции будет один – массив целых чисел. Тип возвращаемого значения – целое число int.

 

public static int GetMax(int[] array)
{
int max = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] > max)
max = array[i];
}
return max;
}


Логика функции проста. Создаем переменную max, в которую записываем первый элемент массива. Дальше в цикле сравниваем каждый элемент со значением в max, если элемент больше, чем max, то записываем в max этот элемент. В конце функции используем оператор return, чтобы вернуть наш результат.

Оператор return должен быть обязательно в функции, которая возвращает значение.

Используем нашу функцию:

 

class Program
{
public static int GetMax(int[] array)
{
int max = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] > max)
max = array[i];
}
return max;
}
static void Main(string[] args)
{
int[] numbers = { 3, 32, 16, 27, 55, 43, 2, 34 };
int max;
max = GetMax(numbers); //вызов такой функции можно использовать при присваивании значения
Console.WriteLine(GetMax(numbers)); // вызов функции также можно использовать как аргумент при вызове другой функции. WriteLine() – тоже функция.
Console.ReadKey();
}
}


Оператор return

Когда встречается этот оператор, происходит выход из функции и код ниже (если он есть) выполняться не будет (например, в функцию передан такой аргумент, при котором нет смысла выполнять функцию). Он похож на оператор break, который используется для выхода из циклов. Этот оператор также можно использовать и в функциях, которые не возвращают значение. Оператор return допустимо использовать несколько раз в функции, но этого делать не рекомендуется.

Домашнее задание

Задача 1. Напишите функцию, которая будет менять в массиве целых чисел все элементы, которые равны указанному значению (аргумент) на противоположное значение по знаку. Например, все элементы массива которые равны 5, будут меняться на -5.

Задача 2. Напишите функцию, которая будет находить минимальное число из трех.

Задача 3. Напишите функцию, которая будет возвращать указанный элемент ряда Фибоначчи. Ряд Фибоначчи – это ряд, в котором каждый следующий элемент равен сумме двух предыдущих. 1 1 2 3 5 8 13 21… Функция принимает порядковый номер элемента, и возвращает соответствующий элемент.

Урок 9



Поделиться:


Последнее изменение этой страницы: 2016-04-07; просмотров: 1577; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.10.104 (0.011 с.)