Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_k_zachetu.docx
Скачиваний:
43
Добавлен:
10.05.2015
Размер:
233.91 Кб
Скачать

Int[] myArray1;

int[] massiv1 = new int[12];

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

int[] myArray2 = new int[] {7, 13, 4, 2};

int[] myArray3 = {5, 9, 3, 17, 9};

Можно создавать массивы из строк:

string[] days = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};

Индексация массивов начинается с нуля, поэтому номер первого элемента массива равен 0. Обращение к элементу массива осуществляется через квадратные скобки [ и ].

myArray2[2]=17;

Пример: Написать программу, осуществляющую ввод целых чисел в массив. Из полученного массива распечатать элементы превышающие среднее арифметическое всего массива.

//описываем необходимые переменные

Int I,n; string s;double av;

//вводим число элементов

Console.Write("Введите число элементов массива N=");

s = Console.ReadLine();

N = Convert.ToInt32(s);

//создаём массив необходимой длины

int[] massiv1 = new int[N]; av = 0;

//запускаем цикл по всем элементам массива

for (i = 0; i < N; i++)

{

//вводим i-ый элемент

Console.Write("Введите {0}-й элемент массива ",i);

s = Console.ReadLine();

massiv1[i] = Convert.ToInt32(s);

//суммируем все элементы массива

av += massiv1[i];

}

//находим среднее арифметическое

av /=N;

//запускаем цикл по всем элементам массива

for (i = 0; i < N; i++)

//печатаем только элементы больше среднего

if (massiv1[i] > av) Console.Write("{0} ", massiv1[i]);

Console.ReadKey();

Массивы можно целиком переприсваивать:

int[] massiv1 = new int[50];

. . .//обрабока элементов массива

//обьявляем массив massiv2 без инициализации

Int[] massiv2;

massiv2 = massiv1;//переприсваиваем

Массивы могут иметь несколько измерений. Например, матрица - это двухмерный массив. В примере показано объявление двухмерного и трёхмерного массивов:

int[,] my_matrix1 = new int[4, 2];

int[, ,] my_cube1 = new int[4, 2, 3];

int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } };

int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

Если нужно создать переменную массива без инициализации, то необходимо использовать оператор new, чтобы присвоить массив переменной. Например:

Int[,] array5;

array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK

//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Будет ошибка!

В следующем примере кода переменные массивов инициализируются значениями по умолчанию:

int[,] array6 = new int[10, 10];

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

array5[2, 1] = 25;

Пример: ввод и распечатку содержимого матрицы:

//описываем необходимые переменные

Int I,j, m,n; string s;

//вводим число элементов

Console.Write("Введите число строк матрицы N=");

s = Console.ReadLine();

N = Convert.ToInt32(s);

Console.Write("Введите число столбцов матрицы M=");

s = Console.ReadLine();

M = Convert.ToInt32(s);

//создаём двухмерный массив необходимой длины

int[,] my_matrix= new int[N,M];

//запускаем циклы по всем элементам матрицы

for (i = 0; i < N; i++) //цикл по строкам

for (j = 0; j < M;j++ ) //цикл по столбцам

{

//вводим i,j-ый элемент

Console.Write("Введите элемент матрицы ({0},{1}) ", i+1,j+1);

s = Console.ReadLine();

my_matrix[i,j] = Convert.ToInt32(s);

}

Console.WriteLine();

for (i = 0; i < N; i++)

{

for (j = 0; j < M; j++)

Console.Write("{0,3} ", my_matrix[i, j]);

Сonsole.WriteLine();

Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные размеры и измерения. Массивы массивов иногда также называются "невыровненными массивами". В следующих примерах показано, как выполняется объявление, инициализация и доступ к массивам массивов. Ниже показано объявление одномерного массива, включающего три элемента, каждый из которых является одномерным массивом целых чисел.

int[][] jaggedArray = new int[3][];

Перед использованием jaggedArray его элементы нужно инициализировать. Сделать это можно следующим образом.

jaggedArray[0] = new int[5];

jaggedArray[1] = new int[4];

jaggedArray[2] = new int[2];

Каждый элемент представляет собой одномерный массив целых чисел. Первый элемент массива состоит из пяти целых чисел, второй — из четырех и третий — из двух. Для заполнения элементов массива значениями можно также использовать инициализаторы, при этом размер массива знать не требуется. Например:

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };

jaggedArray[1] = new int[] { 0, 2, 4, 6 };

jaggedArray[2] = new int[] { 11, 22 };

Также массив можно инициализировать путем объявления.

int[][] jaggedArray2 = new int[][]

{

new int[] {1,3,5,7,9},

new int[] {0,2,4,6},

new int[] {11,22}

}

Пример:

class ArrayTest

{

static void Main()

{

// Declare the array of two elements:

int[][] arr = new int[2][];

// Initialize the elements:

arr[0] = new int[5] { 1, 3, 5, 7, 9 };

arr[1] = new int[4] { 2, 4, 6, 8 };

// Display the array elements:

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

{

System.Console.Write("Element({0}): ", i);

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

{

System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");

}

System.Console.WriteLine();

}

// Keep the console window open in debug mode.

System.Console.WriteLine("Press any key to exit.");

System.Console.ReadKey();

}

}

/* Output:

Element(0): 1 3 5 7 9

Element(1): 2 4 6 8

*/

В языке C# массивы являются объектами, а не просто смежными адресуемыми областями памяти, как в C и C++. Array является абстрактным базовым типом для всех типов массивов. Можно использовать свойства и другие члены класса, которые имеет Array. В примере используется свойство Length для получения длины массива. В следующем коде длина массива numbers, равная 5, присваивается переменной lengthOfNumbers:

int[] numbers = { 1, 2, 3, 4, 5 };

int lengthOfNumbers = numbers.Length;

Класс System.Array позволяет использовать много других полезных методов и свойств для выполнения сортировки, поиска и копирования массивов. В этом примере свойство Rank используется для отображения числа измерений массива.

class TestArraysClass

{

static void Main()

{

// Declare and initialize an array:

int[,] theArray = new int[5, 10];

System.Console.WriteLine("The array has {0} dimensions.", theArray.Rank);

}

}

// Output: The array has 2 dimensions.

  1. Строковый тип данных string.

Тип данных string — это последовательность, содержащая ни одного или любое число знаков Юникода. В платформе.NET Framework string является псевдонимом для String. Несмотря на то, что тип string является ссылочным типом, операторы равенства (== и !=) определены для сравнения значений объектов типа string, а не ссылок. Это упрощает проверку равенства строк. Пример.

string a = "hello";

string b = "h";

// Append to contents of 'b'

b += "ello";

Console.WriteLine(a == b);

Console.WriteLine((object)a == (object)b);

В этом примере отображается "True", а затем "False", поскольку содержимое строк одинаково, но a и b не ссылаются на один и тот же экземпляр строки. Оператор + служит для объединения строк.

string a = "good " + "morning";

В данном примере создается строковый объект, содержащий текст "good morning". Строки являются неизменяемыми: содержимое строкового объекта невозможно изменить после создания объекта, хотя из-за синтаксиса изменения кажутся возможными. Например, при написании этого кода компилятор на самом деле создает новый строковый объект для новой последовательности знаков, а переменная b по-прежнему содержит "h".

string b = "h";

b += "ello";

Оператор [] служит для доступа только для чтения к отдельным знакам объекта string.

string str = "test";

char x = str[2]; // x = 's';

Строковые литералы имеют тип string и могут быть написаны в двух формах: в кавычках и в кавычках с @. Строковые литералы в кавычках заключены в двойные кавычки (").

"good morning" // a string literal

  1. Методы: назначение, определения, вызов.

Метод представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. В C# все инструкции выполняются в контексте метода. Метод Main является точкой входа для каждого приложения C#, и вызывается он средой CLR при запуске программы.

Методы объявляются в классе или в структуре путем указания уровня доступа, например public или private, необязательных модификаторов, например abstract илиsealed, возвращаемого значения, имени метода и списка параметров этого метода. Все вместе эти элементы образуют подпись метода.

Параметры заключаются в круглые скобки и разделяются запятыми. Пустые скобки указывают на то, что у метода нет параметров. Следующий класс содержит три метода.

abstract class Motorcycle

{

// Anyone can call this.

public void StartEngine() {/* Method statements here */ }

// Only derived classes can call this.

protected void AddGas(int gallons) { /* Method statements here */ }

// Derived classes can override the base class implementation.

public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }

// Derived classes must implement this.

public abstract double GetTopSpeed();

}

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

class TestMotorcycle : Motorcycle

{

public override double GetTopSpeed()

{

return 108.4;

}

static void Main()

{

TestMotorcycle moto = new TestMotorcycle();

moto.StartEngine();

moto.AddGas(15);

moto.Drive(5, 20);

double speed = moto.GetTopSpeed();

Console.WriteLine("My top speed is {0}", speed);

}

}

Определение метода задает имена и типы любых необходимых параметров. Когда код вызова вызывает метод, он предоставляет конкретные значения, называемые аргументами, для каждого параметра. Аргументы должны быть совместимыми с типом параметра, но имя параметра (если таковое имеется), используемое в коде вызова, не должно быть таким же, как параметр с именем, определенным в методе. Пример:

public void Caller()

{

int numA = 4;

// Call with an int variable.

int productA = Square(numA);

int numB = 32;

// Call with another int variable.

int productB = Square(numB);

// Call with an integer literal.

int productC = Square(12);

// Call with an expression that evaulates to int.

productC = Square(productA * 3);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]