Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы программирования на языке C#. Учебное пособие
.pdf
53
public int EmpID
{
get {return empID;}
set
{
Console.WriteLine(“целая величина: {0}”, value.GetType());
Console.WriteLine(“строковая величина: {0}”,
value.ToString());
empID = value;
}
}
Вопросы для самопроверки
1. Что понимается под классом в языке C#?
2. Каков синтаксис описания класса?
3. Перечислите и кратко охарактеризуйте спецификаторы класса.
4. Что понимается под методами класса?
5. Чем функция отличается от процедуры?
6. Для каких целей используются свойства класса?
Задачи
1. Описать класс, реализующий тип данных «Комплексное
число» и работу с ними. Класс должен реализовывать следующие
операции над комплексными числами:
а) сложение;
б) вычитание;
в) умножение;
г) деление;
д) сравнение.
2. Описать класс автостоянка для хранения сведений об
автомобилях. Для каждого автомобиля записываются госномер,
цвет, фамилия владельца и признак присутствия на стоянке.
Обеспечить возможность поиска автомобиля по разным критериям,
вывода списка присутствующих и отсутствующих на стоянке
автомобилей, доступа к имеющимся сведениям по номеру места.
Написать программу, демонстрирующую все разработанные
элементы класс
51

54
6. МАССИВЫ
6.1. Основные понятия
Массив – это структурированный тип данных,
представляющий собой совокупность данных одного типа.
Массив относится к ссылочным типам данных, т.е.
располагается в динамической области памяти, поэтому создание
массива начинается с выделения памяти под его элементы.
Элементами массива могут быть величины как значимых, так и
ссылочных типов (в том числе массивы). Массив значимых типов
хранит значения, массив ссылочных типов – ссылки на элементы.
Всем элементам при создании массива присваиваются значения по
умолчанию: нули для значимых типов и null – для ссылочных.
В С# массивы являются объектами, производными от
базового класса System.Array. В нем есть несколько полезных
методов, упрощающих работу с массивами, например, методы
получения размерности, сортировки и поиска.
Обращение к элементам массива производится по имени
массива и одному или нескольким индексам. В C# различают
одномерные и многомерные массивы.
6.2. Одномерные массивы
Одномерные массивы используются в программах чаще
всего. Варианты описания массива:
тип[] имя:
тип[] имя = new тип [ размерность ];
тип[] имя = { списокинициализаторов };
тип[] имя = new тип [] { списокинициализаторов };
тип[] имя = new тип [ размерность ] { списокинициализаторов };
Примеры описаний:
int[ ] a // элементов
нет
int[ ] b = new int[4] // элементы равны 0
int [ ] с = { 61. 2, 5, -9 } // new
подразумевается
int[ ] d = new int[ ] { 61.2, 5, -9} //размерность вычисляется
int [ ] e = new int[4] { 61.2, 5, -9 // избыточное описание
52

55
Здесь описано пять массивов. Отличие первого оператора от
остальных состоит в том, что в нем, фактически, описана только
ссылка на массив, а память под элементы массива не выделена.
Если список инициализации не задан, размерность может быть не
только константой, но и выражением типа, приводимого к целому.
В каждом из остальных массивов по четыре элемента целого типа.
При работе с массивами, как правило, используются циклы.
В качестве примера рассмотрим программу, которая определяет
сумму и количество отрицательных элементов, а также
максимальный элемент массива, состоящего из 6 целочисленных:
Uses System;
Namespace Consoleapplication;
class Classl
{
static void Main()
{
const int n = 6;
int[] a = new int[n] { 3, 12, 5, -9, 7, -2};
Console.WriteLine("Исходный массив:" );
for ( int i = 0; i < n; ++i )
Console.Write( " \ t " + a [ i ] );
Console.WriteLine();
long sum = 0; // сумма отрицательных элементов
int num = 0 ; // количество отрицательных элементов
for ( int i = 0; i < n; ++i )
if ( a[i] < 0 )
{
sum += a[i];
++num;
}
Console.WriteLine( "Сумма отрицательных = " + sum );
Console.WriteLine( "Кол-во отрицательных = " + num );
int max = a[0]; // максимальный элемент
for (int i = 1 ; i < n; ++i )
if (a[i] > max ) max = a[i];
Console.WriteLine("Максимальный элемент = " + max ); } }
53

56
6.3. Прямоугольные массивы
Прямоугольный массив имеет более одного измерения. Чаще
всего в программах используются двумерные массивы. Варианты
описания двумерного массива:
тип[,] имя;
тип[,] имя = new тип [ разм_1, разм_2 ];
тип[,] имя = { списокинициализаторов };
тип[,] имя = new тип [,] { списокинициализаторов };
тип[,] имя = new тип [ разм_1, разм_2 ] { списокинициализаторов
};
Примеры описаний (один пример для каждого варианта описания):
int[,] a ; // элементов нет
int[,] b = new int[2,3]; // элементы равны 0
int[,] с = { {1,2,3} , {4,5,6} }; // new подразумевается
int[,]с = new int[,] {{1,2,3},{4,5,6}};//размерность вычисляется
int[,] d = new int[2,3] {{1,2,3},{4,5,6}};//избыточное описание
Если список инициализации не задан, размерности могут
быть не только константами, но и выражениями типа, приводимого
к целому. К элементу двумерного массива обращаются, указывая
номера строки и столбца, на пересечении которых он расположен,
например:
а[1,4] b[i,j] b[j,i]
В качестве примера рассмотрим программу, которая для
целочисленной матрицы размером 3 x 4 определяет среднее
арифметическое ее элементов и количество положительных
элементов в каждой строке:
using System;
namespace ConsoleApplication1
{
class Classl
{
static void Main()
{
const int m = 3, n = 4;
54

57
int [ , ] a = new int[m, n] {{ 2,-2, 8, 9 } ,{-4,-5, 6,-2 },{ 7, 0, 1, 1 }};
Console.WriteLine( "Исходный массив:" );
for ( int i = 0; i < m; ++i )
{
for ( int j = 0; j < n; ++j )
Console.Write( "\t" + a [ i , j] );
Console.WriteLine();
}
double sum = 0;
int nPosEI;
for ( int i = 0; i < m; ++i )
{
nPosEI = 0;
for ( int j = 0; j < n; ++j )
{
sum += a [ i , j ] ;
if ( a[i, j] > 0 ) ++nPosEI;
}
Console.WriteLine( "В строке {0} {1} положит-х элементов",i ,
nPosEI );
}
Console.WriteLine("Среднее арифметическое всех элементов: "+
sum / m / n ) ;
}
}
}
В ступенчатых массивах количество элементов в разных
строках может различаться. В памяти ступенчатый массив
хранится иначе, чем прямоугольный: в виде нескольких
внутренних массивов, каждый из которых имеет свой размер.
Кроме того, выделяется отдельная область памяти для хранения
ссылок на каждый из внутренних массивов.
Описание ступенчатого массива:
тип[][] имя;
Под каждый из массивов, составляющих ступенчатый
массив, память требуется выделять явным образом, например:
int а = new int[3][];// выделение памяти под ссылки на три строки
55

58
а[0] = new int[5]; // выделение памяти под 0-ю строку (5
элементов)
а[1] = new int[3]; // выделение памяти под 1-ю строку (3
элемента)
a[2] = new int[4]; // выделение памяти под 2-ю строку (4
элемента)
Другой способ выделения памяти:
int[][]а = { new int[5],new int[3],new int[4]};
К элементу ступенчатого массива обращаются, указывая
каждую размерность в своих квадратных скобках, например:
a[1][2] a[i][j] a[j][i]
В остальном использование ступенчатых массивов не
отличается от использования прямоугольных. Невыравненные
массивы удобно применять, например, для работы с треугольными
матрицами большого объема.
56

59
6.4. Класс System.Array
Элемент
Вид
Описание
Length
Свойство
Количество элементов массива
(по всем размерностям)
Rank
Свойство
Количество размерностей
массива
BinarySearch
Статический метод
Бинарный поиск в
отсортированном массиве
Clear
Статический метод
Присваивание элементам
массива значений по
умолчанию
Copy
Статический метод
Копирование заданного
диапазона элементов одного
массива в другой массив
CopyTo
Метод
Копирование всех элементов
текущего одномерного массива
в другой одномерный массив
GetValue
Метод
Получение значения элемента
массива
IndexOf
Статический метод
Поиск первого вхождения
элемента в одномерный массив
LastIndexOf
Статический метод
Поиск последнего вхождения
элемента в одномерный массив
Reverse
Статический метод
Изменение порядка следования
элементов на обратный
SetValue
Метод
Установка значения элемента
массива
Sort
Статический метод
Упорядочивание элементов
одномерного массива
Все массивы в С# построены на основе базового класса
Array, который содержит полезные для программиста свойства и
методы, часть из которых перечислены в табл. 6.1.
Таблица 6.1.
Основные элементы класса Array
57

60
Вопросы для самопроверки
1. Что понимается под массивом в языке C#?
2. Приведите варианты описания одномерных массивов.
3. Какие виды многомерных массивов присутствуют в C#?
4. Как можно объявить двумерный массив?
5. Какие массивы называют ступенчатыми?
6. От какого базового класса наследуются все массивы?
Упражнения
1. Напишите программу, распечатывающую все элементы
заданного массива по главной диагонали экрана.
2. Напишите программу, заменяющую все отрицательные
элементы данного одномерного массива на 0.
3. С помощью разработанной на C# программы подсчитайте
количество положительных, отрицательных и нулевых
элементов одномерного массива, сгенерированного датчиком
случайных чисел.
4. Поменяйте местами наибольший и наименьший элементы
одномерного массива.
5. Используя методы класса Array, отсортируйте одномерный
массив по убыванию.
6. Напишите программу, позволяющую находить сумму
элементов двумерного массива, стоящих в указанной колонке.
7. Найдите разность между суммой элементов данного
двумерного массива, стоящих в колонках с четными номерами
и суммой элементов, стоящих в колонках с нечетными
номерами.
58

61
7. СТРОКИ
7.1. Строки типа String
Тип string, предназначенный для работы со строками
символов в кодировке Unicode, является встроенным типом С#.
Ему соответствует базовый класс System.String библиотеки .NET.
В C# строки можно задать следующими способами:
string s; // инициализация отложена
string t = "qqq";// инициализация строковым литералом
string u = new stringO '. 20);// конструктор создает строку из 20
пробелов
char[] а = { ' 0 ' , ' 0 ' , ' 0 ' }; // массив для инициализации строки
string V = new string( а );// создание из массива символов
Для строк определены следующие операции:
присваивание (=);
проверка на равенство (==);
проверка на неравенство ( ! = );
обращение по индексу ( [ ] ) ;
сцепление (конкатенация) строк ( + ).
Несмотря на то, что строки являются ссылочным типом
данных, на равенство и неравенство проверяются не ссылки, а
значения строк. Строки равны, если имеют одинаковое количество
символов и совпадают посимвольно. Обращаться к отдельному
элементу строки по индексу можно только для получения
значения, но не для его изменения. Это связано с тем, что строки
типа string относятся к так называемым неизменяемым типам
данных. Методы, изменяющие содержимое строки, на самом деле
создают новую копию строки. Неиспользуемые старые копии
автоматически удаляются сборщиком мусора.
В классе System.String предусмотрено множество методов,
полей и свойств, позволяющих выполнять со строками практически
любые действия. Основные элементы класса приведены в табл. 7.1.
59

62
Методы и поля класса String
Метод или поле
Пояснение
Empty
Открытое статическое поле, представляющее пустую
строку
Compare()
Перегруженный открытый статический метод,
сравнивающий две строки
CompareOrdinal()
Перегруженный открытый статический метод,
сравнивающий две строки без учета языка и
культуры
Concat()
Перегруженный открытый статический метод,
создающий новую строку из нескольких строк
Copy()
Открытый статический метод, создающий новую
строку путем копирования существующей строки
Equals()
Перегруженный открытый статический метод и
метод экземпляра, производящий сравнение двух
строк на равенство
Format()
Перегруженный открытый статический метод,
форматирующий строку в соответствии со
спецификацией формата
Intern()
Открытый статический метод, возвращающий
ссылку на указанный объект строки
IsInterned()
Открытый статический метод, возвращающий
ссылку для строки
Join()
Перегруженный открытый статический метод,
преобразующий элементы массива в одну строку
Chars
Индексатор строки
Length
Количество символов в данном экземпляре
Clone()
Возвращает строку
CompareTo()
Сравнивает данную строку с другой
CopyTo()
Копирует указанное количество символов в массив
символов Unicode
EndsWith()
Показывает, соответствует ли указанная строка
окончанию данной строки
Equals()
Выясняет, одинаковые ли значения у двух строк
Insert()
Возвращает новую строку, в которую вставлена
указанная строка
LastIndexOf()
Возвращает индекс последнего вхождения
указанного символа или подстроки в данную строку
Таблица 7.1.
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
