Как заполнить массив с клавиатуры си шарп
Вместо введения
Так можно объявить массивы строк и вещественных чисел:
Например, создадим массив, который будет хранить 5 чисел типа int :
В цикле foreach
Выше я показал один из способов как перебрать элементы массива с использованием цикла foreach :
Здесь в цикле foreach мы указали тип элементов int , так как у нас массив содержит элементы этого типа и после ключевого слова in указали массив элементы которого необходимо перебрать. Если бы у нас был массив строк, то цикл выглядел бы, соответственно, следующим образом:
Цикл foreach достаточно удобный для работы, но иногда бывает так, что возможностей цикла не достаточно. Например, мы создаем массив и нам требуется обеспечить доступ только к элементам с чётными индексами (0, 2, 4, 6 и т.д.). Технически, мы можем использовать тот же foreach , ввести дополнительную переменную и с помощью неё проверять какой индекс у очередного элемента, но это усложнит наш код. Более гибким в этом плане является цикл for в котором мы можем задавать порядок выполнения.
В цикле for
Вывод консоли будет выглядеть следующим образом:
Счётчик цикла: 1. Читаем элемент с индексом 2 значение: 16
Счётчик цикла: 2. Читаем элемент с индексом 4 значение: -12
Счётчик цикла: 3. Читаем элемент с индексом 6 значение: 80
Счётчик цикла: 4. Читаем элемент с индексом 8 значение: 90
Счётчик цикла: 5. Читаем элемент с индексом 10 значение: 102
Условие в теле цикла:
Многомерные массивы
До сих пор мы имели дело с так называемыми одномерными массивами, которые можно себе представить в уме как ряд переменных (числовых, строковых, символьных и т.д.). Визуально, наши одномерные массивы выглядели так:
Название | Тип данных | Описание |
Length | int | Возвращает общее число элементов во всех измерениях массива |
Rank | int | Получает ранг (число измерений) массива |
Long Length | long | Возвращает 64-разрядное целое число, представляющее общее число элементов во всех измерениях массива |
Название | Тип данных | Описание |
Get Length() | int | Возвращает 32-разрядное целое число, представляющее количество элементов в заданном измерении массива |
Get Lower Bound() | int | Получает Индекс первого элемента заданного измерения в массиве |
Get Upper Bound() | int | Получает Индекс последнего элемента заданного измерения в массиве. |
В цикле foreach
Цикл foreach предоставляет нам самый простой и понятный способ доступа к каждому элементы массива. Например, возьмем наш двумерный массив и попробуем перебрать все его элементы в цикле foreach:
В результате, в консоли появится строка, содержащая элементы массива:
В цикле for
здесь в условии цикла мы воспользовались методом GetLength() , чтобы получить количество элементов по первому измерению ( 5 ), а уже в теле цикла получаем значения элементов в каждой строке во втором столбце (помним, что индекс первых элементов в массиве всегда равен 0 ).
В цикле мы запрашиваем элемент с индексами:
Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные измерения и размеры. Массив массивов также иногда называется нерегулярным или зубчатым массивом. Объявление массива массивов выглядит следующим образом:
Теперь наш массив содержит три массива на 2, 3 и 4 элемента соответственно и каждый из этих массивов будет содержать целые числа. Чтобы заполнить массив значениями элементов, можно воспользоваться любым из способов, которые мы рассмотрели для одномерных массивов, например, так:
Для доступа к элементам массива массивов необходимо использовать вот такую языковую конструкцию:
Неявно типизированные массивы
При этом, если Вы попытаетесь объявить вот такой массив:
Ошибка CS0826 Нет подходящего типа для неявно типизированного массива.Работать с такими массивами можно точно также, как и со всеми другими типами массивов, которые были рассмотрены выше.
Итого
Массивы строк. Примеры решения наиболее распространенных задач
Содержание
- 1. Массив строк. Тип string[] . Создание массива строк
- 2. Пример инициализации массива строк
- 3. Пример ввода строк с клавиатуры и создания массива строк
- 4. Пример сортировки массива строк методом вставки
- 5. Пример поиска заданной строки в массиве строк
- 6. Пример подсчета количества вхождений заданной строки в массиве строк
Поиск на других ресурсах:
1. Массив строк. Тип string[] . Создание массива строк
Для создания массива строк нужно выполнить следующие шаги.
1. Объявить ссылку на тип string , например
где arrString – название ссылки;
2. Выделить память для массива
здесь size – количество строк (экземпляров) типа string .
2. Пример инициализации массива строк
Массив строк может быть инициализирован при его объявлении. Ниже приводится пример инициализации и вывод на экран массива daysOfWeek , определяющего дни недели.
Результат выполнения программы
3. Пример ввода строк с клавиатуры и создания массива строк
Как видно из вышеприведенного кода, не нужно делать освобождение предварительно выделенной памяти для массива AS как в языках C/C++. Этим занимается сборщик мусора.
Результат работы программы
4. Пример сортировки массива строк методом вставки
В примере демонстрируется ввод массива из n строк ( n >0) и его сортировка методом вставки. Строки сортируются по возрастанию.
Как видно из вышеприведенного примера, для сравнения двух массивов используется функция Compare() . Эта функция возвращает число больше 0, если первая строка находится в лексикографическом порядке после второй строки. Если строки равны, функция возвращает нулевое значение.
Результат работы программы
5. Пример поиска заданной строки в массиве строк
В примере вводится массив строк и вводится некоторая строка. Если строка есть в массиве, то определяется ее позиция. Результат поиска выводится на экран.
Результат работы программы
6. Пример подсчета количества вхождений заданной строки в массиве строк
В примере вводится строка и массив строк. Затем осуществляется подсчет количества вхождений заданной строки в массиве строк.
Работая с этим сайтом, Вы даете согласие на использование файлов Cookie.
Одномерные массивы
- одномерные массивы;
- многомерные массивы;
- массивы массивов.
Для использования массива его необходимо объявить и выделить память для хранения его элементов. Для объявления одномерного массива используется следующий синтаксис:
В этой строке тип указывает на тип элементов, которые будут храниться в массиве. Имя предполагает ячейку, в которой будет храниться ссылка (адрес) участка памяти, в котором и будут размещаться элементы массива. Но на текущий момент сам участок памяти для хранения элементов массива еще не выделен.
Для его выделения используется операция new без инициализации или с инициализацией:
имя new тип [] ;
Результатом выполнения операции new является ссылка на выделенный участок памяти для хранения массива.
При выделении памяти всем элементам массива присваивается значение по умолчанию (для базовых типов данных это значение равно 0 ).
Объявление массива и выделение памяти для хранения его элементов можно осуществить в одной строке. Например,
После того как объявлен массив и выделена память для хранения его элементов, можно обратиться к элементам массива с использованием соответствующего индекса:
Начальный элемент массива всегда имеет индекс 0 , последний элемент имеет индекс КоличествоЭлементов-1 . То есть если массив содержит 5 элементов, то эти элементы имеют индексы 0 , 1 , 2 , 3 , 4 .
Создание массива
В качестве примера рассмотрим задачу найти максимальный элемент массива, состоящего из n элементов.
Сначала введем количество элементов, которые будут храниться в массиве, затем последовательно в цикле введем сами элементы. Для поиска максимального элемента можно воспользоваться параметрическим циклом.
namespace MyProgram
class Program
static void Main( string [] args)
int n = int .Parse( Console .ReadLine());
int [] arr = new int [n];
for ( int i = 0; i < n; i++)
arr[i] = int .Parse( Console .ReadLine());
int max = arr[0];
for ( int i = 0; i < n; i++)
if (arr[i] > max) max = arr[i];
Console .WriteLine(max);
Console .ReadKey();
>
>
>
Результат выполнения программы представлен на рисунке.
Поиск максимума можно осуществить с использованием цикла перебора элементов foreach .
Запись и считывание элементов массива
- SetValue (значение, индекс) — для записи значения в элемент массива;
- GetValue (индекс) — для считывания значения из элемента массива. Функция возвращает объект типа Object , для дальнейшего использования которого необходимо явное приведение его к типу элементов массива.
namespace MyProgram
class Program
static void Main( string [] args)
int n = int .Parse( Console .ReadLine());
int [] mas = new int [n];
for ( int i = 0; i < mas.Length; i++)
mas.SetValue( int .Parse( Console .ReadLine()), i);
int max = ( int )mas.GetValue(0);
for ( int i = 0; i < mas.Length; i++)
int a = ( int )mas.GetValue(i);
if (a > max) max = a;
>
Console .WriteLine(max);
Console .ReadKey();
>
>
>
Для установки диапазона элементов массива в значение по умолчанию можно использовать статический метод класса Array — Clear() , в качестве аргументов которому передаются ссылка на массив, начальный элемент, с которого необходимо осуществить сброс элементов к начальным значениям и длина диапазона (количество таких элементов.
Пример использования метода Clear() для обнуления диапазона элементов. using System;
namespace MyProgram
class Program
static void Main( string [] args)
int n = int .Parse( Console .ReadLine());
int [] arr = new int [n];
for ( int i = 0; i < arr.Length; i++)
arr[i] = int .Parse( Console .ReadLine());
for ( int i = 0; i < arr.Length; i++)
Console .Write(arr[i] + " " );
Array .Clear(arr,1,2);
Console .WriteLine();
for ( int i = 0; i < arr.Length; i++)
Console .Write(arr[i] + " " );
Console .ReadKey();
>
>
>
Копирование массива
Для копирования массивов можно использовать один из двух методов класса Array – Clone() и CopyTo() . Оба метода создают поверхностную копию массива, то есть копируют элементы из одного массива в другой массив. При этом если элементы массива являются ссылками, то копируются сами значения этих ссылок, а сам объект, на который они ссылаются, остается единственным.
Кардинальное отличие методов Clone() и CopyTo() заключается в том, что метод Clone() самостоятельно выделяет память под вновь создаваемый массив и заполняет ее копиями элементов, а метод CopyTo() предусматривает, что память должна быть предварительно выделена под заполняемый этим методом массив в достаточном объеме.
Метод Clone() возвращает объект класса Object , который необходимо явно привести к ссылке на массив указанного типа.
Рассмотрим пример копирования массива с помощью функции Clone() :
В следующем примере кода показано, как создать одномерный массив целых чисел с элементами от 0 до 9:
int[] arrayName = new int[10];
Создание и одновременно инициализация массива:
В следующем примере кода используется индекс для доступа к элементу с индексом 2:
int[] oldNumbers = < 1, 2, 3, 4, 5 >; int number = oldNumbers[2]; // 3
В следующем примере кода показано, как использовать цикл for для итерации по массиву:
int[] oldNumbers = < 1, 2, 3, 4, 5 >; for (int i = 0; i < oldNumbers.Length; i++)
Использование цикла foreach :
foreach (var x in oldNumbers ) Console.Write($" ");
Функция Random
Рассмотрим пример инициализации массива из пяти элементов байтового типа со случайными значениями:
1. Создайте экземпляр генератора случайных чисел, используя системное значение в качестве начального:
var rand = new Random();
2. Сгенерируйте и отобразите 5 случайных значений:
var bytes = new byte[5]; rand.NextBytes(bytes); Console.WriteLine("Five random byte values:"); // output: foreach (byte byteValue in bytes) Console.Write("", byteValue); Console.WriteLine();
Задания и лабораторные си шарп
Лабораторная работа 1 (Lab 1). Работа с одномерными массивамиВыполнить: Дан массив целых чисел (значения элементов: -1, -2, 3, 4, 5, 6, 7). Создайте функцию для вывода массива. Создайте еще одну функцию для вычисления числа нечетных элементов в этом массиве, а также числа положительных элементов в нем.
Указание 1: Создайте функцию Print для вывода элементов массива.
Указание 2: Создайте функцию CountOddPositive с циклом foreach и операторами if , чтобы проверить, является ли элемент нечетным или положительным.
Пример выполнения:
[Название проекта: Lesson_7Lab1 , название файла L7Lab1.cs ]
- Создайте консольное приложение с именем Lesson_7Lab1 .
- В окне Обозреватель решений (Solution Explorer) найдите файл Program.cs и переименуйте его в L7Lab1.cs .
- Подключите класс Console , чтобы постоянно не писать его название при обращении к его методам:
To do: Дан массив вещественных чисел (значения элементов: 1.1 , -2.3 , 3.7 , 4.1 , 5.6 , 6.1 , 7.1 ).
1. Создайте функцию для печати массива.
2. Создайте еще одну функцию для поиска минимального и максимального элементов массива. При этом использовать стандартные min и max функции запрещено.
Указание 1: Поиск максимального и минимального значения осуществлен в Лабораторной работе 4 5-го урока.
Указание 2: Создайте функцию Print для печати элементов массива.
Указание 3: Создайте функцию FindMaxMin с циклом foreach и оператором if для поиска максимального и минимального значения. Заголовок функции должен выглядеть следующим образом:
static void FindMaxMin(double[] arr, ref double max, ref double min)
Пример выполнения:
[Название проекта: Lesson_7Task1 , название файла L7Task1.cs ]
Выполнить:
1. Создайте функцию FillRandomArray для заполнения массива из 10 элементов случайно сгенерированными числами диапазона от -10 до 15.
2. Создайте еще одну функцию PrintArray для вывода элементов массива.
3. Создайте функцию DivisibleBy3 для подсчета и вывода количества элементов массива, кратных 3.
Пример выполнения:
[Название проекта: Lesson_7Lab2 , название файла L7Lab2.cs ]
- Создайте приложение с именем Lesson_7Lab2 . Переименуйте файл Program.cs в L7Lab2.cs .
- Подключите класс Console :
. using static System.Console; .
Указание 1: Для выхода из цикла используйте оператор break :
Указание 2: Для проверки того, найден ли искомый элемент, используйте логическую переменную:
Примерный результат:
Дополнительное задание: Выведите также индекс найденного элемента.
[Название проекта: Lesson_7Task2 , название файла L7Task2.cs ]
Указание 1: Для генерации случайных вещественных чисел используйте границы:
// например, от -20 до 20: Random rand = new Random(); . a[i]=rand.NextDouble() * 40 - 20;
Указание 2: Для вывода вещественных значений с указанием количества цифр после десятичной точки:
// две цифры после десятичной точки Write(" ",arr[i] ); // например 1.21
Пример выполнения:
[Название проекта: Lesson_7Task3 , название файла L7Task3.cs ]
Приложения для Windows forms
Выполнить: Создайте проект для подсчета суммы и среднего арифметического значения элементов одномерного массива.
Пример выполнения:
[Название проекта: Lesson_7Lab3 , название файла L7Lab3.cs ]
Выполнение:
- Создайте новый проект. Расположите элементы управления на новой форме (см. рисунок).
- Задайте свойству Multiline для текстового окна txtArray значение равное true (для того, чтобы в текстовом окне можно было выводить текст в несколько строк).
- Далее необходимо запрограммировать кнопку Вычислить (btnCalc) так, чтобы в текстовое окно выводились элементы массива, их сумма, а затем их среднее арифметическое. Для этого в процедуре, описывающей событие щелчка мыши по кнопке Вычислить, опишем переменные, которые мы будем использовать при решении поставленной задачи:
Читайте также: