Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операторы цикла

Лекция 10

 

Лекция 11.

 

 

 

 

 

 

 

 

 

Оператор цикла с параметром (for)

Цикл for повторно выполняет оператор или блок операторов, пока определенное выражение не примет значение false. Цикл for удобно использовать для итераций в массивах и для последовательной обработки. В следующем примере значение i печатается на экран, и затем увеличивается на 1 за каждое прохождение цикла. Рекомендуется использовать оператор for в тех случаях, когда заранее известно число повторений.

int i;for (i = 1; i <= 5; i++) Console.WriteLine(i); //тело цикла - всего один //оператор и скобки {} не нужны/*напечатается12345 */ for (double j = 3.2+0.6; j > 2.1; j=j-0.3) //переменная j Console.WriteLine(j);//локальна только для цикла /*напечатается3.83.53.22.92.62.3 */


Блок-схема для оператора for

Оператор for повторно выполняет заключенный в цикл оператор (или несколько операторов) следующим образом.

§ Сначала вычисляется начальное значение параметра цикла.

§ Затем, пока условие получает значение true, оператор в теле цикла выполняется и затем происходит новое вычисление параметра цикла.

§ Когда условие получает значение false управление передается вне цикла.

Поскольку тестирование условного выражения осуществляется до выполнения цикла, оператор for выполняется ноль или более раз. Все выражения оператора for являются необязательными. Например, следующий оператор используется для создания бесконечного цикла:

for (;;) { //... }

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

Пример:

double i;for (i = 3.8; i > 2.1; i = i - 0.3) { Console.WriteLine(i); if (i == 3.5) break; }Console.WriteLine(i);/* напечатается3.83.53.5 */ for (i = 2; i < 7.2; i += 0.7) { if (i < 4.5) continue; Console.WriteLine(i); }Console.WriteLine(i);/* напечатается4.85.56.26.97.6 */

Можно изменять значение переменной внутри цикла

double i;for (i = 3.8; i > 3; i = i - 0.3) { if (i == 3.5) i = 3.9; Console.WriteLine(i); }Console.WriteLine(i);/*напечатается3.83.93.63.332.7хотя цикл должен был прекратиться раньшеиз-за 3 этого не произошло из-запогрешности в арифметических операцияхс дейcтвительным типом (3.00000000004) */

Пример: Дано целое число N > 0. Найти сумму 11 + 22 + … + NN, не используя функций непосредственного возведения в степень.

int N, i,j, sum, s1; string s;Console.Write("Введите N=");s = Console.ReadLine();N = Convert.ToInt32(s); sum=0;for (i=1;i<=N;i++) { s1=i; for (j=1;j < i;j++) s1=s1*i; sum = sum + s1; }Console.WriteLine("Сумма ряда равна {0} ", sum);Console.ReadKey();

Оператор цикла с постусловием (do - while)

Оператор do повторно выполняет оператор или блок операторов, заключенных в {}, пока определенное выражение не примет значение false. В следующем примере операторы цикла do - while выполняются до тех пор, пока пользователь не введёт значение из допустимого диапазона. Если в теле цикла всего один оператор, фигурные скобки ставить не нужно.

int N; string s; do { Console.Write("Введите N в интервале 0..10 N="); s = Console.ReadLine(); N = Convert.ToInt32(s); } while (N<0|| N>10); Console.WriteLine("Введённое число равно {0} ", N);Console.ReadKey();


Блок-схема для оператора do-while

Цикл do-while выполняется как минимум один раз, так как вычисление значения условного выражения выполняется после тела цикла. В любой точке блока do-while цикл можно разорвать с помощью оператора break. Для перехода непосредственно к оператору вычисления выражения while используется оператор continue; если выражение имеет значение true, выполнение продолжается в первом операторе цикла. Если выражение имеет значение false, выполнение продолжается в первом операторе после цикла do-while.

Пример: Дано целое число N > 0. С помощью операций деления нацело и взятия остатка от деления определить, имеются ли в записи числа N нечетные цифры.

int N; string s;bool f;Console.Write("Введите целое положительное число N=");s = Console.ReadLine();N = Convert.ToInt32(s);int n = N; //сохраним исходное значение f=false;do{ if (N % 2 == 1) f = true; N = N / 10;} while (N!= 0 &&!f); if (f) Console.WriteLine("Нечётные цифры в числе {0} есть", n); else Console.WriteLine("Нечётных цифр в числе {0} нет", n); Console.ReadKey();

Оператор цикла с предусловием (while)


Блок-схема для оператора while

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

Цикл while может быть прерван оператором break, который передает управление за пределы цикла. Чтобы передать управление на следующую итерацию без выхода из цикла, используйте оператор continue.

Пример: Внесённая в банк сумма равна S, процентная ставка N годовых, определить с помощью цикла while на сколько лет нужно сделать размещение чтобы получить сумму F.

double S, F, N; string s; int i; Console.Write("Введите начальную сумму S=");s = Console.ReadLine();S = Convert.ToDouble(s); Console.Write("Введите процентную ставку годовых (%) N=");s = Console.ReadLine();N = Convert.ToDouble(s); Console.Write("Введите желаемую сумму F=");s = Console.ReadLine();F = Convert.ToDouble(s); i = 0; //счётчик годовwhile (S < F){ S = S * (1 + N / 100); i++;} Console.WriteLine("Нужную сумму придётся ждать {0} лет, она составит {1} ", i,S);Console.ReadKey();
Модуль 3. Массивы, строки Массивы одномерные  
Хранение группы связанных элементов данных является основным требованием большинства программных приложений. Для этого существуют два основных способа: массивы и коллекции. Индексный массив — именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу.Индексный массив Коллекция в программировании — программный объект, содержащий в себе, тем или иным образом, набор значений одного или различных типов, и позволяющий обращаться к этим значениям. Массивы являются коллекциями объектов одного типа. Поскольку длина массивов практически не ограничена, они могут использоваться для хранения тысяч или даже миллионов объектов, но размер массива должен быть указан при его создании. Каждый элемент массива доступен по числовому индексу, указывающему позицию или ячейку, в которой объект хранится в массиве. Массивы могут хранить как ссылочные типы, так и типы значений. Массив является индексированной коллекцией объектов. Одномерный массив объектов объявляется следующим образом: тип_элемента[] имя_массива; int[] myArray1; Часто элементы в массиве инициализируются в это же время, как показано ниже: int[] massiv1 = new int[12]; Здесь между разделителями [ и ] находится константное выражение, значение которого определяет размерность массива. Значение по умолчанию числовых элементов массива задано равным нулю, а элементы ссылок имеют значение null, но значения можно инициализировать при создании массива следующим образом: int[] myArray2 = new int[] {7, 13, 4, 2};int[] myArray3 = {5, 9, 3, 17, 9}; Можно создавать массивы из строк: string[] days = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"}; Индексация массивов начинается с нуля, поэтому номер первого элемента массива равен 0. Обращение к элементу массива осуществляется через квадратные скобки [ и ]. myArray2[2]=17; Пример: Написать программу, осуществляющую ввод целых чисел в массив. Из полученного массива распечатать элементы превышающие среднее арифметическое всего массива. //описываем необходимые переменныеint i,N; string s;double av;//вводим число элементовConsole.Write("Введите число элементов массива N=");s = Console.ReadLine();N = Convert.ToInt32(s); //создаём массив необходимой длиныint[] massiv1 = new int[N]; av = 0; //запускаем цикл по всем элементам массиваfor (i = 0; i < N; i++) { //вводим i-ый элемент Console.Write("Введите {0}-й элемент массива ",i); s = Console.ReadLine(); massiv1[i] = Convert.ToInt32(s); //суммируем все элементы массива av += massiv1[i]; }//находим среднее арифметическоеav /=N; //запускаем цикл по всем элементам массиваfor (i = 0; i < N; i++) //печатаем только элементы больше среднего if (massiv1[i] > av) Console.Write("{0} ", massiv1[i]); Console.ReadKey(); Массивы можно целиком переприсваивать: int[] massiv1 = new int[50];...//обрабока элементов массива //обьявляем массив massiv2 без инициализацииint[] massiv2;massiv2 = massiv1;//переприсваиваем Чтобы узнать число элементов в массиве используют свойство Length: N = massiv1.Length; Оператор foreach
Блок-схема оператора foreach

Оператор foreach повторяет группу внедренных операторов для каждого элемента в коллекции массива или объекта. Оператор foreach используется для итерации коллекции с целью получения необходимой информации, однако его не следует использовать для изменения содержимого коллекции во избежание непредвиденных побочных эффектов.

Внедренные операторы продолжают выполняться для каждого элемента массива или коллекции. После завершения итерации всех элементов коллекции управление переходит к следующему оператору после блока foreach.

В любой точке блока foreach можно разорвать цикл с помощью ключевого слова break или перейти к следующей итерации в цикле с помощью ключевого слова continue.

Цикл foreach также может быть разорван при помощи операторов goto, return или throw.

Пример: Распечатать содержимое массива в одну колонку

int[] myarray5 = new int[] { 0, 1, 2, 3, 5, 8, 13 }; // В операторе foreach требуется указать и тип, и идентификаторforeach (int i in myarray5) Console.WriteLine(i);

Пример: Во введённом массиве определить минимальный элемент

int i,N; string s;Console.Write("Введите число элементов массива N=");s = Console.ReadLine();N = Convert.ToInt32(s); int[] massiv1 = new int[N];for (i = 0; i < N; i++) { Console.Write("Введите {0}-й элемент массива ",i); s = Console.ReadLine(); massiv1[i] = Convert.ToInt32(s); } /* Временно считаем, что самый первыйэлемент и есть минимальный */int min = massiv1[0]; /* запускаем цикл по всем элементам массивапри этом очередной элемент массивабудет помещаться во временную переменную x*/foreach (int x in massiv1) /* сравниваем текущий минимум с очередным элементом и если нужно обновляем текущий минимум */ if (x < min) min = x; Console.WriteLine("Минимальный элемент массива равен {0}", min);Console.ReadKey();
Строки. Средства работы со строками  
Строка в C# — это массив знаков, объявленный с помощью ключевого слова string. Строковый литерал объявляется с помощью кавычек, как показано в следующем примере. string s = "Hello, World!"; Переприсваивание Строки можно целиком переприсваивать: string s1 = "Hello";string s2 = s1; //переприсваиваем Объединение строк Можно объединять строки с помощью оператора +, как показано в следующем примере: string s1 = "orange";string s2 = "red";s1 += s2;Console.WriteLine(s1); // напечатается "orangered" Escape-знаки Строки могут содержать escape-знаки, такие как "\n" (новая строка) и "\t" (табуляция). Пример: string hello = "Hello\nWorld!";Console.WriteLine(hello);/* НапечатаетсяHelloWorld!*/string s = "чтобы вставить \"кавычки\" в строку используем обратный слэш";Console.WriteLine(s); Если требуется добавить в строку обратную косую черту, перед ней нужно поставить еще одну обратную косую черту. Следующая строка: string filePath = "\\\\My Documents\\";Console.WriteLine(filePath);/* Напечатается:\\My Documents\*/ Точные строки: символ @ Символ @ служит для того, чтобы конструктор строк пропускал escape-знаки и переносы строки. Следующие две строки являются идентичными: string p1 = "\\\\My Documents\\My Files\\";string p2 = @"\\My Documents\My Files\"; Чтобы поставить в точной строке знак двойных кавычек, нужно использовать по два таких знака, как показано в следующем примере: string s = @"You say ""goodbye"" and I say ""hello"""; Доступ к отдельным знакам Квадратные скобки [] служат для доступа к отдельным знакам в объекте string, но при этом возможен доступ только для чтения: string str = "test";char x = str[2]; // x = 's'; string s5 = "Printing backwards";for (int i = 0; i < s5.Length; i++) Console.Write(s5[s5.Length - i - 1]); // напечатается "sdrawkcab gnitnirP" Извлечение подстрок Для извлечения подстроки из строки используется метод Substring. string s3 = "Visual C# Express";string s4 = s3.Substring(7, 2);Console.WriteLine(s4);// напечатается "C#" Замена по образцу Для замены подстроки в строке по образцу используется метод Replace. string s3 = "Visual C# Express";string s5 = s3.Replace("C#", "Basic");Сonsole.WriteLine(s5);// напечатается "Visual Basic Express" Смена регистра Чтобы изменить регистр букв в строке (сделать их заглавными или строчными) следует использовать ToUpper() или ToLower(), как показано в следующем примере: string s6 = "АлтГТУ";Console.WriteLine(s6.ToUpper());// Напечатается АЛТГТУConsole.WriteLine(s6.ToLower());// Напечатается алтгтуConsole.WriteLine(s6);// Напечатается АлтГТУ Сравнения Самый простой способ сравнения двух строк — использовать операторы == и!=, осуществляющие сравнение с учетом регистра: string color1 = "red";string color2 = "green";string color3 = "red"; if (color1 == color3) Console.WriteLine("Строки равны");if (color1!= color2) Console.WriteLine("Строки не равны"); Не допускается использование >,<,>=,<= для сравнения строк. Для строковых объектов существует метод CompareTo(), возвращающий целочисленное значение, зависящее от того, что одна строка может быть меньше (<), равна (==) или больше другой (>). При сравнении строк используется значение Юникода, при этом значение строчных букв меньше, чем значение заглавных. Дополнительные сведения о правилах сравнения строк см. в разделах CompareTo(). string string1 = "ИИТ";string string2 = "Иит"; int result = string1.CompareTo(string2);if (result > 0) Console.WriteLine("{0} больше чем {1}", string1, string2); else if (result == 0) Console.WriteLine("{0} равно {1}", string1, string2); else if (result < 0) Console.WriteLine("{0} меньше чем {1}", string1, string2); // Напечатается ИИТ больше чем Иит Удаление фрагментов и вставка строк в строки Может быть выполнена с помощью методов Remove и Insert: string x = "ZX Spectrum";x=x.Remove(2, 1);x = x.Insert(2,"-");Console.WriteLine(x);Console.ReadKey(); Пустые строки Пустая строка — это экземпляр объекта String, содержащий 0 знаков. Пустые строки часто используются в различных сценариях программирования, представляя пустое текстовое поле. Для пустых строк можно вызывать методы, потому что такие строки являются допустимыми объектами String. Пустые строки инициализируются следующим образом: string s = ""; Массивы из строк Могут быть инициализированы начальными значениями: string[] x = { "Алтайский край", "Барнаул", "пр.Ленина", "46" };Console.WriteLine(x[0]);//напечатается Алтайский крайConsole.WriteLine(x[1][0]);//напечатается Б Разбиение строк Следующий пример кода демонстрирует возможность разбора строки при помощи метода String.Split. Работа метода заключается в возврате массива строк, в котором каждый элемент представляет слово. В качестве ввода Split принимает массив символов, определяющих какие символы должны использоваться в качестве разделителей. В этом примере используются пробелы, запятые, точки, двоеточия и табуляция. Массив, содержащий эти разделители, передается в Split, и каждое слово в предложении выводится отдельно при помощи результирующего массива строк. Пример: разбить предложение на слова char razdelitel = ' ';string text = "Шла Саша по шоссе и сосала сушку";Console.WriteLine("Исходный текст: '{0}'", text);string[] words = text.Split(razdelitel);Console.WriteLine("{0} слов в тексте:", words.Length);foreach (string s in words) Console.WriteLine(s);
Рисунок 1 - Пример выполнения

 

В качестве разделителя может выступать массив символов.

char[] delimiterChars = { ' ', ',', '.', ':', '\t' }; string text = "one\ttwo three:four,five six seven";Console.WriteLine("Original text: '{0}'", text);string[] words = text.Split(delimiterChars);Console.WriteLine("{0} words in text:", words.Length);foreach (string s in words) Console.WriteLine(s);
Рисунок 2 - Пример выполнения



Пример: Ввести текстовую строку. Напечатать слова, в которых первая буква встречается еще хотя бы раз.

Console.Write("Введите предложение: ");string s=Console.ReadLine();string[] words= s.Split(' ','.',',');foreach (string word in words) { char c=word[0]; bool flag = false; int i=1; while (i < word.Length &!flag) { if (word[i] == c) flag = true; i++; } if (flag) Console.WriteLine(word); }Console.ReadKey();
Рисунок 3 - Пример выполнения

 

<== предыдущая лекция | следующая лекция ==>
Лекция 8. Две формулы F и H логики предикатов называются равносильными на множестве M, если при любой подстановке в эти формулы вместо предикатных переменных любых | Преобразование строк в другие типы
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 544; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.112 сек.