Как заполнить массив с клавиатуры си шарп

Обновлено: 07.07.2024

Вместо введения

Так можно объявить массивы строк и вещественных чисел:

Например, создадим массив, который будет хранить 5 чисел типа int :

В цикле foreach

Выше я показал один из способов как перебрать элементы массива с использованием цикла foreach :

Здесь в цикле foreach мы указали тип элементов int , так как у нас массив содержит элементы этого типа и после ключевого слова in указали массив элементы которого необходимо перебрать. Если бы у нас был массив строк, то цикл выглядел бы, соответственно, следующим образом:

Цикл foreach достаточно удобный для работы, но иногда бывает так, что возможностей цикла не достаточно. Например, мы создаем массив и нам требуется обеспечить доступ только к элементам с чётными индексами (0, 2, 4, 6 и т.д.). Технически, мы можем использовать тот же foreach , ввести дополнительную переменную и с помощью неё проверять какой индекс у очередного элемента, но это усложнит наш код. Более гибким в этом плане является цикл for в котором мы можем задавать порядок выполнения.

В цикле for

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

Счётчик цикла: 0. Читаем элемент с индексом 0 значение: 12

Счётчик цикла: 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 тип [] ;

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

После того как объявлен массив и выделена память для хранения его элементов, можно обратиться к элементам массива с использованием соответствующего индекса:

Начальный элемент массива всегда имеет индекс 0 , последний элемент имеет индекс КоличествоЭлементов-1 . То есть если массив содержит 5 элементов, то эти элементы имеют индексы 0 , 1 , 2 , 3 , 4 .

Создание массива

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

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 < 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();
>
>
>
Результат выполнения программы представлен на рисунке.

image articles/506/506_1.jpg

Поиск максимума можно осуществить с использованием цикла перебора элементов foreach .

Запись и считывание элементов массива

  • SetValue (значение, индекс) — для записи значения в элемент массива;
  • GetValue (индекс) — для считывания значения из элемента массива. Функция возвращает объект типа Object , для дальнейшего использования которого необходимо явное приведение его к типу элементов массива.
using System;
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();
>
>
>

image articles/506/506_3.jpg

Копирование массива

Для копирования массивов можно использовать один из двух методов класса 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 ]

  1. Создайте консольное приложение с именем Lesson_7Lab1 .
  2. В окне Обозреватель решений (Solution Explorer) найдите файл Program.cs и переименуйте его в L7Lab1.cs .
  3. Подключите класс 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 ]

  1. Создайте приложение с именем Lesson_7Lab2 . Переименуйте файл Program.cs в L7Lab2.cs .
  2. Подключите класс 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 ]

Выполнение:

  1. Создайте новый проект. Расположите элементы управления на новой форме (см. рисунок).
  2. Задайте свойству Multiline для текстового окна txtArray значение равное true (для того, чтобы в текстовом окне можно было выводить текст в несколько строк).
  3. Далее необходимо запрограммировать кнопку Вычислить (btnCalc) так, чтобы в текстовое окно выводились элементы массива, их сумма, а затем их среднее арифметическое. Для этого в процедуре, описывающей событие щелчка мыши по кнопке Вычислить, опишем переменные, которые мы будем использовать при решении поставленной задачи:

Читайте также: