Массив - упорядоченная структура, предназначенная для хранения однотипных данных.
Упорядочение элементов в массиве происходит по их индексам. Индекс - порядковый номер элемента (нумерация с 0).
Массив задается именем, типом хранимых данных и размерностью. Размерность - максимально возможное количество элементов в массиве.
Массивы бывают одномерные (линейные), двумерные (матрицы) и многомерные.
Объявление массива происходит следующим образом:
int ma[10];
/* Объявлен одномерный массив с именем ma на 10 элементов целого типа*/
float b[10][5]
/* Объявлен 2-мерный массив (матрица) с именем b
на 10 строк по 5 элементов вещественного типа в каждой.*/
int c[5] = {5,6,1,8,9};
//Объявление массива
// и задание начальных значений при объявлении
Для обращения к элементу массива в программе (записи или чтении данных из массива) указывается имя массива и в квадратных скобках индексы элемента.
Пример:
Присвоение переменной х значения ячейки №0 массива mа:
x = ma [0];
Ввод значения c клавиатуры в ячейку №2 массива ma:
scanf (“%d”, &ma[2]);
Изменение значения ячеек массивов:
ma [i] = 5; /*ячейке массива ma, номер которой записан в переменной i, присвоено значение 5*/
b [1][2] = 3; /*ячейке массива b с индексами 1, 2(строка массива 1, элемент 2 в строке) присвоено значение 3 */
Вывод значения ячейки №2 массива ma на экран:
printf (“%d”, ma[2]);
Типичными задачами работы с массивом являются поиск по массиву, ввод-вывод значений элементов, сортировка массивов и т.п. Такие задачи решаются обработкой значения каждой ячейки массива. При этом над каждой ячейкой массива совершаются одни и те же действия (используются одни и те же операторы, функции и т.п.), а изменяется только номер элемента. Таким образом, происходит последовательное перемещение по массиву. Для перемещения вместо конкретного номера элемента в квадратных скобках ставится переменная целочисленного типа (обычно int). Значение переменной можно изменять с помощью цикла for или простейших математических действий (сложения, вычитания) в циклах while и do while.
В процессе обработки массива часто возникает задача перестановки элементов массива. Для этого необходимо иметь дополнительную (буферную) переменную для временного хранения значения одной из переставляемых ячеек. Тип переменной должен соответствовать типу данных в массиве. Порядок перестановки следующий:
1. значение текущего элемента записывается в буферную переменную;
2. значение заменяемого элемента присваивается текущему;
3. значение буферной переменной присваивается заменяемому элементу.
При поиске по массиву происходит сравнение проверяемой ячейки (далее – текущей) с каким либо граничным значением. Например, крайними значениями диапазона, условным минимумом или максимумом и др.
Локальные максимумы (минимумы) – это значения элементов массива, которые больше (меньше) обоих соседних, т.о. первый и последний элементы не могут являться ими.
Строки в С++ представляются в виде массива целых чисел типа char - кодов букв (от -128 до 127). Символом, обозначающим конец строки, является нулевой байт ‘\0’. Символы, расположенные в массиве после него игнорируются. Соответственно, объявление строки не отличается от объявления массива. Количество ячеек массива должно быть на 1 больше максимальной возможной длины строки (для нулевого байта). При работе со строками элементы массива сравнивают с граничными значениями, представленными в виде символьных констант, например:
char str[26]; // объявлена строка с именем str.
//Длина строки – не более 25 символов
…
if (str[i] = = ‘f’) /*Если элемент строки str номер i содержит
символ f, то … */
…
Для ввода строк с клавиатуры можно использовать функцию gets (str) [1, с. 25], где str – имя массива типа char, в котором будет храниться строка.
Пример 1: Дан целочисленный массив на 10 элементов. Преобразовать и вывести его возведя все отрицательные элементы в квадрат.
#include <conio.h>
#include <stdio.h>
//Подключаем библиотеки
…
int main (int argc, char * argv[])
{
int mas[10] = {-5, 7, 9, -8, 12, -4, -2, 1, -6, 2}, i, col; //*
//Объявление массива и переменных i и col целого типа.
for (i = 0; i <= 9; i++) /*Начало цикла:
(изменяем значение счетчика i от 0 до 9 с шагом 1)*/
{
if (mas[i] < 0) //Если элемент массива отрицательный, то …
{
mas[i] = mas[i] * mas[i]; /*его значение возводится в
квадрат*/
}
printf ("\n Элемент № %d = %d", i, mas[i]);
// Вывод преобразованных элементов
}
//Конец цикла.
getche ();
/*Ожидание нажатия любой клавиши
для завершения программы*/
return 0;
//Конец программы
}
* В учебных целях допускается задание значений элементов массива при его объявлении, однако, при написании программы, нужно учитывать, что массив может быть введен при выполнении программы.
Пример 2: Дана строка. Подсчитать долю в % первых четырех букв русского алфавита (а,б,в, г) от всех символов строки.
#include <conio.h>
#include <stdio.h>
//Подключаем библиотеки
…
int main (int argc, char * argv[])
{
int i, col =0, str_l; //Объявление переменных целого типа.
char str[50]; //Объявление строки на 49 символов
printf (“\n Введите строку:”);
gets (str); //Ввод строки с клавиатуры
str_l = strlen (str); //Определяем длину введенной строки
for (i = 0; i < str_l; i++) /*Начало цикла:
(изменяем значение счетчика i от 0 до номера последнего
элемента строки с шагом 1)*/
{
if (((str[i] >= ‘А’) && (str[i] <= ‘Г’)) ||
((str[i] >= ‘а’) && (str[i] <= ‘г’)))
/*Если буква № i строки str является строчной или
прописной буквой в интервале от а до г, то …*/
{
col = col +1; /*счетчик увеличивается на 1
}
} //Конец цикла
printf ("\n Доля букв а,б,в,г = %f %%", col*100/str_l); //*
// Вычисление и вывод результата
getche ();
/*Ожидание нажатия любой клавиши
для завершения программы*/
return 0;
//Конец программы
}
* Для вывода на экран символа % его необходимо напечатать 2 раза.
№ вар. | Задание |
1. | Найти минимальный и максимальный элемент в массиве из десяти элементов. |
2. | Найти номера минимального и максимального элемента в массиве из десяти элементов. |
3. | Найти минимальный положительный из десяти элементов массива. Если требуемые элементы отсутствуют, то вывести 0. |
4. | Найти максимальный отрицательный из десяти элементов массива. Если требуемые элементы отсутствуют, то вывести 0. |
5. | Дан массив на десять чисел. Вывести их среднее арифметическое. |
6. | Дан целочисленный массив на десять элементов. Преобразовать и вывести его, прибавив к элементам с четным номером первый элемент. Первый и последний элементы массива не изменять. |
7. | Дан целочисленный массив на десять элементов. Преобразовать и вывести его, прибавив к элементам с нечетным номером последний элемент. Первый и последний элементы массива не изменять. |
8. | Дан массив на 10 элементов. Найти первый его локальный минимум. |
9. | Дан массив на 10 элементов. Найти первый его локальный максимум. |
10. | Дано число k (0 < k < 9) и массив (матрица) размера 10 x 10. Найти сумму элементов k-го столбца данного массива. |
11. | Дано число k (0 < k < 9) и массив (матрица) размера 10 x 10. Найти произведение элементов k-го столбца данной массива. |
12. | Дана матрица размера 10 x 10. Найти сумму элементов главной диагонали (имеют одинаковые индексы – 1,1; 3,3 и т.п.). |
13. | Дано число k (0 < k < 9) и массив (матрица) размера 10 x 10. Найти максимальный элемент k-ой строки данного массива. |
14. | Дано число k (1 < k < 9) и массив (матрица) размера 10 x 10. Поменять местами 1-й и k-ый столбец массива. |
15. | Дана строка произвольных символов. Подсчитать количество содержащихся в ней цифр. |
16. | Дана строка произвольных символов. Подсчитать количество содержащихся в ней прописных английских букв. |
17. | Дана строка произвольных символов. Подсчитать количество содержащихся в ней строчных английских букв. |
18. | Дана строка произвольных символов. Если она представляет собой запись целого числа (все символы - цифры), то вывести 1, если нет, то 0. |
19. | Дана строка, состоящая из слов, разделенных пробелами. Определить количество слов в строке. |
20. | Дана строка, содержащая несколько круглых скобок. Если скобки расставлены правильно (то есть каждой открывающей соответствует одна закрывающая), то вывести число 0. В противном случае вывести число 1. |