Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:

Приведу теперь пример работы со случайными числами. Как обычно, для проведения экспериментов по генерации случайных чисел я создал метод Rand в классе Testing. Вот программный код этого метода:

/// <summary>

/// Эксперименты с классом Random I

///</summary>

public void Rand

{

const int initRnd = 77;

Random realRnd = new Random;

Random repeatRnd = new Random(initRnd);

// случайные числа в диапазоне [0,1)

Console.WriteLine("случайные числа в диапазоне[0,1)");

for (int i =1; i <= 5; i + +)

{

Console.WriteLine("Число " + i + "= "

+ realRnd.NextDoubie);

}

//

случайные числа в диапазоне[min,max]

int min = -100, max=-10;

Console.WriteLine("случайные числа в диапазоне [" +

min +"," + max + "]");

for (int i =1; i <= 5; i + +)

{

Console.WriteLine("Число " + i + "= "

+ realRnd.Next(min,max));

}

// случайный массив байтов

byte[] bar = new byte[10];

repeatRnd.NextBytes (bar);

Console.WriteLine("Массив случайных чисел в диапазоне [0, 255]");

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

{

Console.WriteLine("Число " + i + "= " +bar[i]);

}

}//Rand

Приведу краткий комментарий к тексту программы. Вначале создаются два объекта класса Random. У этих объектов разные конструкторы. Объекте именем realRnd позволяет генерировать неповторяющиеся серии случайных чисел. Объект repeatRnd дает возможность повторить при необходимости серию. Метод NextDoubie создает серию случайных чисел в диапазоне [0, 1). Вызываемый в цикле метод Next с двумя параметрами создает серию случайных отрицательных целых, равномерно распределенных в диапазоне [-100, — 10. Метод NextBytes объекта repeatRnd позволяет получить при одном вызове массив случайных чисел из диапазона [0, 255]. Результаты вывода можно увидеть на рис. 7.2.

Рис. 7.2. Генерирование последовательностей случайных чисел в процедуре Rand

На этом заканчивается рассмотрение темы выражений языка С#.

8. Операторы языка С#

Операторы языка С#. Оператор присваивания. Составной оператор. Пустой оператор. Операторы выбора. If-оператор. Switch-оператор. Операторы перехода. Оператор goto. Операторы break, continue. Операторы цикла. For-оператор. Циклы while. Цикл foreach.

Операторы языка C#

Состав операторов языка С#, их синтаксис и семантика унаследованы от языка C++. Как и положено, потомок частично дополнил состав, переопределил синтаксис и семантику отдельных операторов, постарался улучшить характеристики языка во благо программиста. Посмотрим, насколько это удалось языку С#.

Оператор присваивания

Как в языке C++, так и в C# присваивание формально считается операцией. Вместе с тем запись:

X = expr;

следует считать настоящим оператором присваивания, так же, как и одновременное присваивание со списком переменных в левой части:

X1 = X2 =… = Xk = expr;

В отличие от языка C++ появление присваивания в выражениях C# хотя и допустимо, но практически

не встречается. Например, запись:

if(х = expr)…

часто используемая в C++, в языке C# в большинстве случаев будет воспринята как ошибка еще на этапе компиляции.

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

Блок или составной оператор

С помощью фигурных скобок несколько операторов языка (возможно, перемежаемых объявлениями) можно объединить в единую синтаксическую конструкцию, называемую блоком или составным оператором:

{

оператор_1

оператор_N

}

В языках программирования нет общепринятой нормы для использования символа точки с запятой при записи последовательности операторов. Есть три различных подхода и их вариации. Категорические противники точек с запятой считают, что каждый оператор должен записываться на отдельной строке (для длинных операторов определяются правила переноса). В этом случае точки с запятой (или другие аналогичные разделители) не нужны. Горячие поклонники точек с запятой (к ним относятся языки C++ и С#) считают, что точкой с запятой должен оканчиваться каждый оператор. В результате в операторе if перед else появляется точка с запятой. Третьи полагают, что точка с запятой играет роль разделителя операторов, поэтому перед else ее не должно быть. В приведенной выше записи блока, следуя синтаксису С#, каждый из операторов заканчивается символом "точка с запятой". Но, заметьте, блок не заканчивается этим символом!

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

/// <summary>

/// демонстрация блоков (составных операторов)

/// </summary>

public void Block

{

int limit = 100;

int x = 120, у = 50;

int sum1 =0, sum2=0;

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

{

int step = Math.Abs(limit — x)/10;

if (x > limit)

{x — = step; у += step;}

else

{x += step; у — = step;}

sum1 += x; sum2 +=y;

}

//limit = step; //переменная step перестала существовать

//limit = i; // переменная i перестала существовать

Console.WriteLine("x= {0}, y= {1}, sum1 ={2}, sum2 = {3}",

x, у, sum1,sum2);

}

Заметьте, здесь в тело основного блока вложен блок, задающий тело цикла, в котором объявлены две локальные переменные — i и step.

В свою очередь, в тело цикла вложены блоки, связанные с ветвями then и else оператора if. Закомментированные операторы, стоящие сразу за окончанием цикла, напоминают, что соответствующие локальные переменные, определенные в блоке, перестают существовать по его завершении.

Поделиться:
Популярные книги

Господин следователь. Книга пятая

Шалашов Евгений Васильевич
5. Господин следователь
Детективы:
исторические детективы
5.00
рейтинг книги
Господин следователь. Книга пятая

Барон Дубов 4

Карелин Сергей Витальевич
4. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 4

Vivuszero

Таттар Илья
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Vivuszero

Вперед в прошлое 5

Ратманов Денис
5. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 5

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1

Избранное. Компиляция. Книги 1-11

Пулман Филип
Фантастика:
фэнтези
героическая фантастика
5.00
рейтинг книги
Избранное. Компиляция. Книги 1-11

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

От Двуглавого Орла к красному знамени. Кн. 1

Краснов Петр Николаевич
Белая Россия
Проза:
русская классическая проза
6.80
рейтинг книги
От Двуглавого Орла к красному знамени. Кн. 1

Довлатов. Сонный лекарь 2

Голд Джон
2. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 2

Лучше подавать холодным

Аберкромби Джо
4. Земной круг. Первый Закон
Фантастика:
фэнтези
8.45
рейтинг книги
Лучше подавать холодным

Купец V ранга

Вяч Павел
5. Купец
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Купец V ранга

Весь Карл Май в одном томе

Май Карл Фридрих
Приключения:
прочие приключения
5.00
рейтинг книги
Весь Карл Май в одном томе

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2