Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс_ред1 С#.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.8 Mб
Скачать

Пример программы: Простые числа

Приведем пример программы, иллюстрирующей использование вложенных циклов и циклов с неоднозначным выходом. Программа вычисляет (и выводит) простые числа от 0 до 100 посредством проверки, делится ли каждое число на какое-либо положительное целое, отличное от 1 и самого себя. Очевидно, что это числа 2, 3, 5, 7, 11 и т.д.

С целью оптимизации работы программы в нее введены два усовершенствования:

  • она проверяет только нечетные числа (после 2);

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

(Замечание: если вам нужна программа, генерирующая большое количество простых чисел, то для этого существует гораздо более быстрый алгоритм.)

Во внешнем цикле переменная i проходит последовательность значений 3, 5, 7, ..., 99. Это сформулировано следующим образом:

for (int i = 3; i <= max; i += 2)

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

bool prime = true;

for (int divisor = 3; prime == true && divisor <= i / 2;

divisor +=2)

{

prime = (i % divisor != 0); // Проверка - простое иди нет

}

if(prime == true)

Console.Write(" {0}" ,i); // Печать найденного числа

Когда цикл прекращается, мы должны проверить, почему он завершился — потому что мы нашли или, наоборот, не нашли простое число. Обнаруженные простые числа выводятся на консоль, и программа переходит к рассмотрению следующего претендента. Полный текст программы Primes.cs приведен ниже.

using System;

namespace Primes

{

class Program

{

///<summary>

///Программа Primes - Н.А.Борисов, 2009

///=======================================

///Выводит все простые числа между 1 и 100

///Демонстрирует использование вложенных циклов

///и циклов с альтернативным выходом

///</summary>

static void Main(string[] args)

{

int max = 100;

Console.Write (" 2"); //Выведем первое простое число

for (int i = 3; i <= max; i +=2)

{

//Предположим, что число простое

bool prime = true;

for (int divisor = 3; prime == true && divisor <= i / 2;

divisor +=2)

{

prime = (i % divisor != 0); // Проверка - простое иди нет

}

if(prime == true)

Console.Write(" {0}" ,i); // Печать найденного числа

}

Console.WriteLine();

Console.ReadLine();

}

}

}

Результат работы этой программы:

Сложные типы данных – массивы чисел и символов

Объявление одномерного массива

Массив содержит в себе множество значений данных (в данном случае – чисел или символов), обращение к которым осуществляется соответственно их позиции в списке. Каждая позиция соответствует определенному значению индекса. Индекс первой позиции, т. е. индекс первого элемента в массиве, всегда равен 0. Второй элемент имеет индекс 1 и т.д.

Одномерный массив может быть объявлен следующим образом:

<тип_элементов>[] идентификатор_массива = new <тип_элементов>[размер];

Примеры массивов:

int[] markCounts = new int [101];

double[] rainfall = new double[13];

char[] monthName = new char[13];

Во всех этих примерах, прежде всего, указывается тип элементов, затем этот тип снова упоминается, когда мы конструируем массив с помощью оператора new. Пара символов [ ] в этом контексте обозначает массив. В объявлении указывается также размер массива. Размер может быть представлен константой, а также выражением, вычисление которого дает целое число.

Заметьте, что размер, представляющий собой число элементов в массиве, всегда на 1 больше последнего допустимого индекса из-за того, что индекс первого элемента равен 0. Это очевидное несоответствие часто бывает источником ошибок в программах.

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

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

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

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

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

int[] myIntArray = new int [5];

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

int arraySize = Convert.ToInt32(Console.ReadLine());

int[] myIntArray = new int [arraySize];

Значение переменной, используемой для указания размера массива, может быть введено с консоли, как в приведенном примере, или вычислено. Можно легко объявить несколько массивов одинакового размера или сделать так, чтобы размеры массивов были кратны друг другу:

int arraySize = 5;

int[] myArray1 = new int [arraySize];

int[] myArray2 = new int [arraySize]; // Два массив одинакового размера

int[] myArray3 = new int [arraySize * 2]; // Этот массив в два раза больше