Вход

Массивы в С/С++

Реферат* по программированию
Дата добавления: 06 сентября 2010
Язык реферата: Русский
Word, rtf, 394 кб (архив zip, 37 кб)
Реферат можно скачать бесплатно
Скачать
Данная работа не подходит - план Б:
Создаете заказ
Выбираете исполнителя
Готовый результат
Исполнители предлагают свои условия
Автор работает
Заказать
Не подходит данная работа?
Вы можете заказать написание любой учебной работы на любую тему.
Заказать новую работу
* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
Очень похожие работы
МАССИВЫ в С/С++ Поэлементные операции 1 . Одномерные (линейные) массивы Линейным массивом в програ мме на C ++ называется упорядоченный набор однотипных переменных, которые располагаются в па мяти последов а тельно Массив является простейшей структурой данных , облегчающей работ у с большими объемами инфо р мации путем их упорядочения. В случае с массивами, упорядочен ие происходит за счет индексир о вания эле ментов, то есть обращения к каждому из них по порядк о вому номеру. Показанный на рисунк е массив состоит из n элементов с индексами от 0 до n -1, в который з а писаны числа 5, 21, 0, 12 и т.д. Любой массив в C ++ хар актеризуется тремя параметрами: именем , типом элементов и размером . Как и обычная пер е менная, пе ред использованием массив должен быть объявлен. О б щая форма записи объявления : тип_элементов имя_массива[размер_массива]; Здесь тип_элементов – это любой из известных стандартных типов ( int , float , double , char и т.д .), имя_массива – уникальное им я (идентифик а тор), исполь зуемое для обращения к массиву, размер_массива – количество его элементов. В качестве последнего па раметра в объявлении может быть использована только целочисленная кон станта или ко н стантное выражение. Примеры объявлений int A [15]; // массив из 15 целочисленных элементов с именем A float x [3]; // массив x из 3-х элементов типа float Объявление массива является командой компилятор у на в ы деление памяти дл я хранения его элементов. Общее количество выд е ленной памяти зависит не только от числа элемент ов, но и от ра з мера каждо го элемента, то есть от его типа. Например, текстовая строка из 1000 символов ( тип char ) займет P = 1000* sizeof ( char ) = 1000 байтов, а массив из такого же количества вещественных чисел двойной то ч ности (тип double ) займет уже в восемь раз больше – P = 1000* sizeof ( double ) = 8000 байтов. Нумерация эле ментов в массиве начинается с нуля . Таким образом , первый элемент массива имеет инд екс 0, а последний – индекс n -1, где n – размер масси ва . Обращение к элементу произв о дится с использованием имени массива и индекса элемента в ква д ратных скобках . Наприме р , запись “ x [0] = 5.5;” означает “присв о ить значение 5.5 нулевому элементу массива x ”. Для работы с массивами характерным явл яется использо вание итерационных ци к лов for . С их помощью организуется выполнение однотипных опе раций со всеми элементами массива , в частн ости , поэлементный ввод-вывод , поэлементные арифмет ические опер а ции и др . Рассмотрим это на следующем примере. Пример 1. Напишите пр ограмму , запрашивающую у пользо вателя 10 целых чисел , и выводящую ее на экран их сумму . Решение . Будем использовать массив с и менем A и размером 10 для хранения введенных чисел . Ввод данных и суммирование орган и зуем поэле ментно с помощью циклов for . //- ---------- Сумма элементов массива ------------- # pragma hdrstop # include < conio . h > #include #pragma argsused int main(int argc, char* argv[]) int A [10]; // объявля ем массив из 10 целых for(int i=0; i<10; i++) // орган изуем цикл по i от 0 до 9 cout << "input A[" << i << "] = "; // приглашение cin >> A[i]; // вводим A[i] int sum = 0; // объявляем переменную for(int i=0; i<10; i++) // организуем цикл sum = sum + A[i]; // в цикле суммируем эле менты cout << "\ nSumma : " << sum ; // выводим результат на экран getch (); // задерж ка return 0; //------------------------------------------------- Наберите код этой программы в среде Turbo C ++ и запустите ее на выполнение. Проверьте правильность получаемых с ее по мощью результатов. Нарисуйте блок-схему и объясните алг о ритм ее работы. Объясните смысл ис пользования дополнительной пер е менной sum в этой программе. 2. Многомерные массивы Массивы в программах C ++ могут быть не только линейными . Довольно частым является использование двух - (и более ) - мерных структур . К примеру , прямоугольная матр ица – типичная структ у ра , представимая с помощью двумерного массива ; а 3 D -тензор может быть з аписан как соответствующий трехмерный ма с сив. Многомерный массив в C ++ организован по принципу «ма с сива массивов» . Общий формат его объявления тип имя[ N 1][ N 2]…[ NM ]; Здесь M – число индексов (или размерность ) массива . Индексы и з меняются в пределах от 0 до N 1 – 1, от 0 до N 2 – 1, от 0 до N 3 – 1, ..., от 0 до NM – 1, соотве т ственно . К примеру , з а пись int G [5][4]; означает объявление двумерного массива целых чисел с именем G и размерами 5 4. На рис . справа такой массив пре д ст авлен в виде таблицы . Здесь первый индекс является номером строки , вт о рой – но мером столбца таблицы , с диапазонами изме нения от 0 до 4, и от 0 до 3, соответстве н но. Доступ к элементам многомерного массива в программе производится так же , как и в одномерном случае , то есть путем ук аз а ния имени массива и набора индексов в квад ратных скобках . Н а пример , операция присваивания з начения 0 последнему элементу будет зап и сана как G [4][3] = 0. При работе с многомерными массивами уд обно использовать вложенные циклы for . С их помощью можно выполнить заданное действие с каждым из элементов массива путем перебора всех зн а чений индексов . Приведенный ниже фрагмент программного кода в ы водит на экран все элементы массива G . for(int i=0; i<5; i++) // цикл по строкам i for ( int j =0; j <4; j ++) // цикл по стр окам j cout << G[i][j] << “\ t” ; // выводим G[i][j] cout << endl ; // перевод на новую строку Алгоритм работы этого фрагмента иллюстрируется с ледующей блок-схемой Здесь внешний цикл по I последовательно пробег а ет все значения от 0 до 5. При к аждом i запускается внутре н ний цикл по j от 0 до 4. В теле этого цик ла на э к ран выводятся зн ачение элемента G [ i ][ j ] и знак табуляции (горизонтал ьный отступ). Внутренний цикл продолжается до тех пор, пока не будут п е ребраны все значения j , то есть не будет вывед ена вся i -я строка. По завершении внутреннего цикла, экранный курсор перемещается на н о вую строку манипулятором endl , и далее внешний цикл п родолжает свою работу, последов а тельно выводя на экран другие строки массива. Пример 2. Имеется вещественная квадратная матрица размером 4 4. Напишите программу , вы числяющую произведение элементов в каждой ее строке . Матрица вводится с кл а виатуры. Реш ение . Условимся использовать для хранения мат рицы массив float X [4][4]. Расчет произведения реализуем с огласно сл е дующему алгоритму . Введем вспомогательную переменную (к примеру , float P ). Заметим , что в i -й с тр о ке расположены элементы X [ i ][ j ], где j меняется от 0 до 3, включите льно . Организуем цикл по j , внутри к о торого будем домножать P на X [ i ][ j ]. Тогда на выходе из цикла P бу дет содержать искомое произведение . Выведем его на экран и продолжим расчеты для следующей строки . Для правил ь ной работы алгоритма перед началом расчетов в каждой строке матрицы необходимо присвоить P зн а чение 1. //-------- Произведение элементов строки ---------- # pragma hdrstop # include < conio . h > #include #pragma argsused int main(int argc, char* argv[]) float X[4][4]; // объявляем массив 4 4 for(int i=0; i<4; i++) for(int j=0; j<4; j++) cout << "input X[" << i << "," << j << "] = "; cin >> X [ i ][ j ]; // вводим элементы матрицы cout << "\n Results:\n"; for(int i=0; i<4; i++) // цикл по стро кам float P = 1.0; // вспомогательная переменная for ( int j =0; j <4; j ++) // цикл по элементам в строке P = P * X[i][j]; // домножаем P на X[i][j] cout << "\n proizvedenie " << i << "-i stroki = " << P; // выводим результат на экра н getch (); return 0; //------------------------------------------------- Наберите и откомпилируйте код этой программы в Turbo C ++. Проверьте результаты, выдав аемые программой. 3. Типизиров анные константы В рассмотренном выше примере текст программы сод ержит явные выражения, задающие размеры массива X . Он объявлен как float X [4][4], то есть с явным указанием р азмерности, и далее везде по ходу программы цифра 4 и с пользуется явно при записи цикло в for . Такая техника программирования является допустимой и даже часто испол ьзуемой, однако создает некоторые трудности в плане масштабируемости программы. В данном случае под масштабируемой мы будем понимать программу, которая может бы ть легко перестроена для работы с массивами других размеров. В рассмотре нном выше примере при изменении размера массива X нам пр и дется просмотреть весь код прогр аммы, заменяя 4 на другое целое число. Этого можно избежать, если ввести типизированные ко н станты , которые будут использоваться для указания размеров массив а. Так же, как и переменная, типизированная константа имеет уникальное им я и тип, однако ее значение не может быть изм е нено по ходу выполнения программы. Это дает право и спользовать ее в объявлении ма с сива. Типизированная константа должна быть объявлена с ключ е вым словом const , вслед за которым указывает ся ее тип ( int , float , double , char , и т.д.), далее, через пробел, – ее имя и инициализирующее в ы ражение const тип имя = выражени е; Например, запись const int N = 4; означает объявление целочи с ленной константы с именем N и значением 4. В рассмотренном выше примере N могла быть использована как при объявлении ма с сива float X [ N ][ N ], так и в езде далее вместо 4. Такая программа будет легко масштабируемой в силу то го, что в ней достаточно изменить зн а чение N работы с массивами других размеров. Типизированная константа может быть объявлена в любом месте программы до момента своего первого использования. Одн а ко хорошим стилем считается объявление всех конст ант в самом начале программного файла, после подключения библиотек дире к тивами # include . 4. Инициализация элементов массива В рассмотренных выше примерах начальные значения эл е ментов массива зада вались пользователем с клавиатуры. Можно поступить иначе и каждому из эл ементов присвоить начальное зн а чение с помощью оператора «=». Это потребует довольно большог о количества записей – по отдельному оператору для каждого из эл е ментов. C ++ дает программисту еще один, б олее удобный, способ. Массив может быть инициализ ирован при объявлении . Для этого в строке об ъ явления сразу вслед за указан ием типа элементов, имени массива и его размеров, зап и сывается знак присваивания, и дал ее в фигурных скобках задаются значения элементов через запятую тип имя[размер N ] = знач1, знач2, знач3, ..., знач N ; Запись означает, что сразу после размещения массив а в операти в ной памяти к аждому из элементов должно быть присвоено соотве т ствующее значение из списка. Если список значений в фигурных скобках короче, чем размер массива, то оставш иеся элементы будут ин и циализированы значением по умолчанию, то есть обнулены. В следующем примере float mark [5] = 7.3, 4.0, 2.2, 12.1, 8.9 ; создается м ассив с именем mark , состоящий из 5 чисел типа float , которые инициализируются значениями 7.3, 4.0, 2.2 и т.д. Эт о экв и валентно следующ ему набору операторов float mark[5]; mark[0]=7.3; mark[1]=4.0; mark[2]=2.2 и т . д . Многомерный массив также может быть инициализиро ван в строке объявления. Для этого достаточно помнить о том, что многомер ный массив в C ++ – это «массив массивов», о чем уже гов о рилось выше. Пример int F [3][3] = 3, 0, 2 , (1, 9, 8 , 5, 7, 4 ; Здесь создает ся двумерный массив с именем F и разме рами 3 3, эл ементы которого получают начальны е значения F [0][0] = 3, F [0][1] = 0, F [0][2] = 2, F [1][0] = 1 и т.д . Пример 3. Пусть и – две квадратные матрицы размером 3 3. Требуетс я написать программу , ра ссчитывающую их произв е дение Решение. Искомое произведение – это также мат рица 3 3, эл ементы которой рассчитываются по формуле ( ). Аналогично Пример у 1, организуем суммирование с помощью всп о могательной переменной s и цикла по k . Для перебора всех и с пользуем два дополнительных вло женных друг в друга цикла по i и по j . Эт и циклы будут внешними по отношению к ци к лу по k . //-------------- Перемножение матриц -------------- #pragma hdrstop #include #include #pragma argsused const int N = 3; // используем константу N=3 int main(int argc, char* argv[]) float A[N][N] = 1, 1, 1 , 2, 2, 2 , 3, 3, 3 ; // исходная матрица A float B[N][N] = 1, 2, 3 , 1, 2, 3 , 1, 2, 3 ; // исходная матрица B float C [ N ][ N ]; // матрица произведения С for(int i=0; i