Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курс лекций CS (первый семестр)

.pdf
Скачиваний:
9
Добавлен:
20.05.2015
Размер:
2.69 Mб
Скачать

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

итерации, при нарушении истинности выражения, задающего это условие, выполнение цикла будет прервано еще до запуска первого оператора тела цикла. При использовании конструкции do … while условие проверяется после выполнения тела цикла. Это гарантирует выполнение операторов цикла по крайней мере один раз.

do

тело цикла

while (условие продолжения цикла);

Пример: найдем сумму цифр целого числа, которое задает пользователь.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class MyProgram

{

static void Main(string[] args)

{

int f,n; int s=0;

Console.WriteLine("Введите положительое целое число"); n=Convert.ToInt32(Console.ReadLine());

if (n <= 0)

{

Console.WriteLine("Вы ввели неположительное число");

Console.ReadLine();

return;

81

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

}

f=n; do

{

s=s+f%10;

f=f/10;

}while (f!=0);

Console.WriteLine("Сумма цифр числа {0} равна {1}",n,s); Console.ReadLine();

}

}

}

Результат:

82

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №13.

Оператор for.

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

Оператор for позволяет объединить три операции, необходимые для работы цикла, в одну. Кратко эти операции можно охарактеризовать так: инициализация, проверка условия и приращение счетчика цикла.

for (инициализация; условие; обновление)

тело цикла;

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

Цикл for работает в такой последовательности:

1.Присваивается начальное значение счетчику цикла.

2.Вычисляется значения выражения, устанавливающего условие продолжения цикла.

3.Если выражение условия возвращает true, то сначала выполняется тело цикла, а затем операция над счетчиком цикла.

На каждой итерации шаги 2 и 3 повторяются.

Пример. using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

class MyProgram

83

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

{

static void Main(string[] args)

{

int n,i;

Console.Write("введите количество приветствий: "); n=Convert.ToInt32(Console.ReadLine());

if(n<=0) return; for (i=1;i<=n;i++)

Console.WriteLine("Привет");

Console.WriteLine("i:{0}",i);

Console.ReadLine();

}

}

Результат:

Множественные инициализации и приращения счетчиков цикла.

Синтаксис задания цикла for позволяет инициировать несколько переменных-счетчиков, проверять сложные условия продолжения цикла или последовательно выполнять несколько операций над счетчиками цикла. Если присваиваются значения нескольким счетчикам или выполняется несколько операций, они записываются последовательно и разделяются запятыми.

Пример. using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

class MyProgram

{

84

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

static void Main(string[] args)

{

for (int i=0, j=0; i<3;i++,j++) Console.WriteLine("i: {0} j: {1} ",i,j);

Console.ReadLine();

}

}

}

Результат:

Вложенные циклы.

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

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class MyProgram

{

static void Main(string[] args)

{

int r,c; char t;

Console.WriteLine("Количество строк?"); r=Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Количество столбцов?"); c=Convert.ToInt32(Console.ReadLine());

85

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Console.WriteLine("Какой вид?"); t=Convert.ToChar(Console.ReadLine()); for (int i=0; i<r; i++)

{

for (int j=0; j<c; j++) Console.Write(t); Console.Write('\n');

}

Console.ReadLine();

}

}

Результат:

Область действия переменных-счетчиков циклов for.

Мы с Вами рассмотрели три примера с циклом for. Необходимо обратить внимание, что в первом примере счетчик цикла объявлялся до оператора for. Во втором и третьем примерах счетчики цикла объявлялись непосредственно в «шапке» цикла. Такие переменные имеют различную область действия. Переменная-счетчик объявленная в «шапке» цикла существует только в теле цикла, после перехода на следующий оператор программы эта переменная не действует. Поэтому в первом примере нельзя объявлять переменную i в цикле.

Операторы break и continue.

Часто бывает необходимо перейти на следующую итерацию цикла еще до завершения выполнения всех операторов цикла. Для этого используется оператор continue.

Пример.

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

86

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

{ class Program

{static void Main(string[] args)

{int i,MAX;

char c;

Console.WriteLine("Сколько символов будем обрабатывать?");

MAX=Convert.ToInt32(Console.ReadLine());

for(i=0;i<MAX;i++)

{Console.Write("\nВведите символ ");

c=Convert.ToChar(Console.ReadLine()); if (Char.IsDigit(c))

continue;

Console.WriteLine("Вы набрали символ ,0-",c); }// continue прыгает сюда

Console.ReadLine(); } }}

Результат.

Замечание.

1.В программе используется метод Char.IsDigit(c). Этот метод возвращает true, если символ является числом и false в противном случае.

2.Недостатком этой программы является то, что пользователя заранее спрашивают о количестве обрабатываемых символов.

87

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

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

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

char c;

Console.WriteLine("Привет! Это программа обработки символов."); while(true)

{ Console.Write("\nХотите ввести символ?\n1-да\n2-нет\n"); c = Convert.ToChar(Console.ReadLine());

if (c == '2') break; Console.Write("\nВведите символ ");

c=Convert.ToChar(Console.ReadLine()); if (Char.IsDigit(c))

continue;

Console.WriteLine("Вы набрали символ ,0-",c);

}

Console.WriteLine("Пока!");

Console.ReadLine();

88

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

}

Результат.

89

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №14.

Производные типы данных.

Язык C# предлагает несколько производных типов. Это типы данных, сформированные на основе типа целого числа и типов с плавающей запятой. Массив – это тип данных, который может содержать несколько значений, все одно типа. Каждое значение сохраняется в отдельном элементе массива, и компьютер хранит все элементы массива последовательно в памяти.

Массивы объявляются следующим образом:

базовыйТип [] имя;

В объявлении базовыйТип может быть произвольным типом. Прежде чем получить доступ к массиву, его необходимо инициализировать. Массивы могут быть инициализированы двумя способами. Мы можем либо задать полное содержимое массива в литеральной форме, либо указать размер массива и использовать для инициализации всех его элементов ключевое слово new (НОВЫЙ). Определение значений элементов массива в литеральной форме предполагает задание списка значений, разделенных запятыми и заключенных в фигурные скобки. Например:

int [] mylntArray = {5, 9, 10, 2, 99};

В данном случае описывается массив, состоящий их пяти элементов, и всем им присваивается целое значение.

Второй способ предполагает использование следующего синтаксиса:

int [] myIntArray = new int [5];

Здесь используется ключевое слово new для явной инициализации массива и константа для определения его размера. При этом методе всем вхождениям массива будет присвоено значение по умолчанию, которое для численных типов равно 0. Для инициализации массивов вместо констант с тем же успехом можно использовать переменные, например:

90