Главная страница
Навигация по странице:

Программирование. Лекция 4. Функции. Массивы. Программирование. Лекция Массивы. Функции



Скачать 93.17 Kb.
Название Программирование. Лекция Массивы. Функции
Анкор Программирование. Лекция 4. Функции. Массивы.docx
Дата 17.12.2017
Размер 93.17 Kb.
Формат файла docx
Имя файла Программирование. Лекция 4. Функции. Массивы.docx
Тип Лекция
#12870

Программирование. Лекция 4. Массивы. Функции

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

Массив – это конечная именованная последовательность однотипных величин.

Размерность массива – количество его элементов.

Описание массива в программе отличается от описания простой переменной тем, что за именем переменной следуют квадратные скобки, в которых записывается размерность массива. Например:

int a[3]; // массив из 3 целых чисел

float b[5]; // массив из 5 действительных чисел

char c[15]; // массив из 15 символов
Каждый элемент массива имеет свой номер, который называется индексом элемента. Индексация (то есть нумерация) элементов в С++ начинается с нуля. Например, массив int a[3] будет содержать элементы a[0], a[1], a[2].

Начальные значения элементов массива можно задать с использованием фигурных скобок, например:

int a[3]={1,2,3}; // a[0]=1, a[1]=2, a[2]=3

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

float b[5] = {5.5, 1.2, 1.3}; // b[0]=5.5, b[1]=1.2, b[2]=1.3, b[3]=0, b[4]=0

Размещение элементов массива в памяти выполняется на этапе компиляции, поэтому размерность массива задается константой или константным выражением.

const int M = 5, N = 3;

int a[M*N]={};

Допустимо не задавать размерность массива, в этом случае память будет выделена по числу элементов в списке инициализации:

double d[] = {1.5,2.5,3.5};

Для доступа к элементам массива используются квадратные скобки:

// d[0]=1.5, d[1]=2.5, d[2]=0

double d[3]={1.5,2.5};

d[2]=3.5; // d[2]=3.5

double sum = 0; // переменная для хранения суммы

for (int i = 0; i < 3; i++) sum += d[i];

cout << "Сумма:" << sum << endl;

// Сумма: 7,5

Многомерные массивы.

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

Многомерные массивы задаются указанием каждого измерения в квадратных скобках. Синтаксис объявления N-мерного массива:

тип имя[размерность1][размерность2]…[размерностьN];

Пример объявления двумерного массива (индексация его элементов показана на рис. 1):

int a[4][5]; // массив из 4 элементов, каждый из кот. является массивом из 5 эл-в



Рисунок . Индексация двумерного массива

Двумерный массив располагается в памяти последовательно по строкам (в порядке наиболее быстрого изменения последнего индекса).

При инициализации многомерного массива он представляется либо как массив из массивов, при этом каждый массив заключается в свои фигурные скобки (в этом случае левую размерность при описании можно не указывать), либо задается общий список элементов в том порядке, в котором элементы располагаются в памяти:

int mass2 [][2] = { {1, 1}, {0, 2}, {1, 0} };

int mass2 [3][2] = {1, 1, 0, 2, 1, 0};

Пример работы с двумерным массивом (программа ищет номер строки двумерного массива, в которой больше всего нулей):

const int M = 4, N = 5; // размерности массива

int b[M][N]; // описание массива

int i, j; // счетчики циклов

for (i = 0; i

for (j = 0; j

int istr = -1, max_count = 0; // номер искомой строки, максимальное количество

for (i = 0; i

{ // просмотр массива по строкам

int count = 0;

for (j = 0; j

if ( count > max_count)

{

istr = i ; max_count = count;

}

}

printf("Исходный массив:\n");

for (i = 0; i

for (j = 0; j

printf ("\n" ) ;}

if (istr == -1) printf("Нулевых элементов нет");

else printf("Hoмep строки: %d", istr + 1 );

Вложенные циклы.

В теле цикла допустимы любые вложенные операторы, в том числе и циклы. Таким образом, можно конструировать вложенные циклы. Пример (подсчет суммы элементов массива):

const int N = 2;

int a[][N]={1,2,3,4};

int sum[N]={};

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

{

for (int j = 0; j < N; j++) sum[i]+=a[i][j];

cout << "Сумма элементов " << i+1 << "-й строки равна " << sum[i] << endl;

}

При работе с вложенными циклами следует обращать внимание на правила использования операторов break и continue. Оператор break прекращает выполнение ближайшего внешнего для него оператора цикла. Оператор continue передает управление на ближайшую внешнюю проверку условия продолжения цикла.

Пример (вычисление суммы произведений элементов строк матрицы):



const int M=3, N=2;

int a[M][N] = {{1,2}, {3,4}, {5,6}};

int sum = 0;

for (int i = 0; i < M; i++)

{

// переменная для произведения

int p = 1, j;

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

{

// если эл-т равен нулю, произведение эл-в всей строки равно нулю

if (a[i][j]==0) break;

p *= a[i][j];

}

// если выполнялся break, нужно перейти к следующей строке

if (j < N-1) continue;

sum += p;

}

cout << sum << endl;
Функции.
С увеличением объема программы становится невозможным удерживать в памяти все детали. Естественным способом борьбы со сложностью любой задачи является ее разбиение на части. В C++ задача может быть разделена на более простые и обозримые с помощью функций. Использование функций является первым шагом к повышению степени абстракции программы и ведет к упрощению ее структуры.

Разделение программы на функции позволяет также избежать избыточности кода, поскольку функцию записывают один раз, а вызывать ее на выполнение можно многократно из разных точек программы. Процесс отладки программы, содержащей функции, можно лучше структурировать. Часто используемые функции можно помещать в библиотеки. Таким образом, создаются более простые в отладке и сопровождении программы.

Функция — это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение.

Любая программа на C++ состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена.

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

тип имя ( [ список_параметров ])

{ тело функции }

Рассмотрим составные части определения.

Тип возвращаемого функцией значения может быть любым, кроме массива и функции. Если функция не должна возвращать значение, указывается тип void.

Список параметров определяет величины, которые требуется передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя (в объявлении имена можно опускать).

В определении, в объявлении и при вызове одной и той же функции типы и порядок следования параметров должны совпадать. На имена параметров ограничений по соответствию не накладывается, поскольку функцию можно вызывать с различными аргументами, а в прототипах имена компилятором игнорируются (они служат только для улучшения читаемости программы).

Для вызова функции в простейшем случае нужно указать ее имя, за которым в круглых скобках через запятую перечисляются имена передаваемых аргументов. Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция. Если тип возвращаемого функцией значения не void, она может входить в состав выражений или, в частном случае, располагаться в правой части оператора присваивания.

Пример функции, возвращающей сумму двух целых величин:

int sum(int a, int b); // объявление функции
int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"Russian");

int a = 2, b = 3, c, d;

c = sum(a, b); // вызов функции

cin >> d;

cout << sum(c, d); // вызов функции

_getch();

return 0;

}

// определение функции

int sum(int а, int b)

{

return (а + b);

}

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

  1. Керниган Б., Ритчи Д. Язык программирования Си. – СПб.: «Невский диалект», 2001. – 352 с.: ил.

  2. Павловская Т. А. C/C++. Программирование на языке высокого уровня. – СПб.: Питер, 2003. – 461 с.: ил.

  3. Подбельский В. В., Фомин С. С. Программирование на языке Си: Учеб. пособие. – 2-е доп. изд. – М.: Финансы и статистика, 2004. – 600 с.
написать администратору сайта