Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структура программы.doc
Скачиваний:
8
Добавлен:
23.12.2018
Размер:
162.3 Кб
Скачать

Оператор цикла while; do while: их сравнение.

  • Цикл с предусловием while,

  • Цикл с постусловием do . . . while,

  • Цикл с предусловием.

  • while( условие_выполнения_тела_цикла )

  • {

  • // тело цикла

  • }

  • Цикл с постусловием

  • do

  • {

  • //тело цикла

  • } while( условие_выполнения_тела_цикла);

Циклы while бывают двух видов - собственно цикл while и do-while. Оба эти цикла используются, как правило, тогда, когда точно не известно, сколько раз цикл должен выполнится. Например, при вводе пользователем пароля или при подсчете чего-либо с определенной точностью. Оба эти цикла будут выполняться до тех пор, пока условие в круглых скобках после слова while будет истинно. Как только условие станет равным false, выполнение цыкла прекращается. Самое важное отличие между while и do-while в том, что while может не выполниться ни одного раза, тогда как do-while по крайней мере один раз выполнится.

Цикл foreach

Цикл foreach позволяет выполнять тело цикла для элементов массива (в общем случае – для коллекции):

foreach (тип идентификатор in имя_массива)

{

//тело цикла

}

В циклах можно использовать операторы break; (прервать выполнение цикла) и а в цикле for оператор Continue; (перейти к следующему шагу).

Ступенчатые массивы и их обработка

в C# можно создать массивы, в которых количество элементов в строках разное – ступенчатые массивы. В таком случае необходимо выполнять инициализацию каждой строки в отдельности.

Рассмотрим это на примере. Дан ступенчатый массив. Вывести номера его строк, в которых доля положительных элементов максимальна.

static void Main(string[] args)

{ float[][] b; //объявим неровный массив

int n, m;

Console.Write("Строк ");

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

b = new float[n][]; //определим количество строк

for (int i = 0; i < n; i++)

{ Console.Write("Элементов в строке"+i+" ");

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

b[i] = new float[m]; // определим количество

// элементов в i-ой строке }

for(int i=0;i<b.Length;i++)

for (int j = 0; j < b[i].Length; j++)

{ Console.Write("b[" + i + "," + j + "]=");

b[i][j] = Convert.ToSingle(Console.ReadLine()); }

float []dol=new float[n]; // массив для долей

// положительных элементов в строке

int kol;

float maxdol=0; //максимальная доля

for(int i=0;i<b.Length;i++)

{ kol=0;

for (int j = 0; j < b[i].Length; j++)

if(b[i][j]>0)kol++;

if (b[i].Length!=0)

dol[i]=(float)kol/b[i].Length;

else

dol[i]=0;

if(maxdol<dol[i])maxdol=dol[i]; }

if (maxdol == 0)

Console.WriteLine

("Нет положительных элементов в массиве");

else

{ string s=""; //в эту переменную соберем номера строк

for(int i=0;i<b.Length;i++)

if (dol[i]==maxdol) s+=" "+i;

Console.WriteLine

("Максимальная доля в строках "+s);}

Console.ReadLine(); }

Примечания.

  1. Если b неровный массив, то b.Length возвращает количество строк, а b[i].Length количество элементов в i–й строке.

  2. Нулевое количество элементов в строке не является ошибкой, в таком случае b[i].Length=0.

  3. присваивание string s=""; обязательно, даже для пустой строки.