Работа с массивами в C/C++
Методические указания к выполнению контрольных работ по курсу «Информатика»
Воронеж 2014
Общие вопросы
Целью курса является приобретение практических навыков по составлению алгоритмов решения задач и написания программ на высокоуровневых языках С или С++.
В данных методических указаниях приведены задания к контрольнной работе, посвященным работе с массивами в языках программирования C и С++. В них подробно описаны принципы работы с одномерными массивами, основные алгоритмы сортировки массивов, поиска в массиве заданного значения, работа с двумерными массивами. Все примеры и алгоритмы снабжены детальным описанием и программным кодом на С++.
В ходе выполнения каждого задания разрабатывается и отлаживается консольная программа, написанная на языке C или С++. Результат работы оценивается в процессе тестирования программы на наборе контрольных примеров. Вариант выбирается по 2-м последним цифрам кода зачетной книжки, если такого варианта нет, то по сумме этих цифр.
Отчет по работе должен содержать:
титульный лист;
текст задания на лабораторную работу;
краткую теоретическую часть по заданию и алгоритм;
текст программы;
пример выполнения программы (введенные данные и полученный результат);
вывод по проделанной работе.
Одномерные массивы
Под массивом понимается совокупность конечного числа данных одного типа. При описании массива обязательно указываются тип элементов массива, его имя и в квадратных скобках размер. Размер - это количество элементов в массиве.
Примеры описания массива:
int mas[10]; //описан массив с именем mas, состоящий из 10
//целочисленных элементов double A[5], B[7];
//описаны два вещественных массива A и B,
//состоящие из 5 и 7 элементов
Примечание.
При описании массива используются те же модификаторы класса памяти, const, что и для простых переменных.
[класс памяти] [const] тип идентификатор [размер] [инициализация];
Одномерный массив соответствует математическому понятию вектора -строки или вектора-столбца.
Встретив в тексте программы описание массива, компилятор по указанному количеству и типу элементов определяет необходимый для размещения этого массива объем памяти. Поэтому размер массива может быть задан только целой положительной константой или константным выражением. Например,
const int N = 100; double Ar1[N];
long int Ar2[2*N];
Примечание.
Задание размера массива с помощью именованных констант позволяет в дальнейшем упростить модификацию программы, так как при необходимости изменить размер массива достаточно будет скорректировать значение константы всего лишь в одном месте программы.
При описании массива его можно инициализировать. Для этого инициализирующие значения записываются в фигурных скобках через запятую. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализирующих значений, то оставшиеся элементы обнуляются.
Например,
int mas[10] = {-3, 1, 5}; //первые 3 элемента массива mas
//инициализируются значениями -3, 1, 5,
//а остальные значением 0
double A[5] = {0.1, 0.2, 0.3, 0.4, 0.5},
B[7] = {0.0}; //все элементы массива A инициализированы //значениями из списка, все 7 элементов
// массива B инициализированы значением 0
Примечание.
Если при описании в квадратных скобках опущен размер массива, то обязательно должна присутствовать инициализация массива. В этом случае размер массива будет равен количеству инициализирующих значений.
int C[] = {9, 5, 1}; //описан массив C из трех элементов
Для доступа к элементу массива используется операция индексации: после имени массива в квадратных скобках указывается индекс (номер) элемента. Элементы массива нумеруются с нуля, т.е. индекс может принимать значения от 0 до количества элементов массива минус единицу. Обработка массива, как правило, производится в циклах.
Например,
A[0] = A[0] + 10;
A[1] = A[2]*B[6];
for (int i = 0; i < 10; i++) mas[i] *= 2;
В оперативной памяти элементы массива располагаются непрерывно соседних ячейках.
в
Примечание.
Типичной ошибкой начинающих программистов при использовании массивов является обращение к несуществующему элементу, т.е. выход индекса за допустимое значение. Компилятор языков C/C++ такие ошибки не отслеживает.
Рассмотрим принципы работы с одномерными массивами на следующих примерах.
Пример 1. Вычисление суммы квадратов элементов массива.
#include "iostream" int main()
{
const int N = 10; int i;
double mas[N] = {0.0}, Sum = 0.0;
//ввод массива
cout << "Введите элементы массива:\n"; for (i = 0; i < N; i +
{
cout << "mas[" << i << "] -> "; cin >> mas[i];
}
//подсчет суммы квадратов элементов массива
for (i = 0; i < N; i++) Sum = Sum + mas[i]*mas[i];
cout << "Сумма квадратов элементов равна " << Sum << "\n"; return 0;
}
На рис. 1 показана экранная форма приложения с введенными исходными данными и результатом выполнения.
Пример 2. Вычисление диапазона значений элементов массива (диапазон значений равен разности значения максимального элемента и значения минимального элемента).
const int N = 10; int i;
double mas[N], masMin, masMax, range;
//ввод массива
//находим минимальное и максимальное значение элементов массива masMin = mas[0];
masMax = mas[0];
for (i = 1; i < N; i++)
{
if (mas[i] < masMin)
masMin = mas[i];
if (mas[i] > masMax)
masMax = mas[i];
}
// вычисляем диапазон range = masMax - masMin;
Пример 3. Поиск индекса минимального элемента.
const int N = 10; int i, indMin; double mas[N];
//находим индекс минимального элемента массива indMin = 0;
for (i = 1; i < N; i++)
if (mas[i] < mas[indMin])
indMin = i;