Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Лабораторная работа: Массивы в С С

Название: Массивы в С С
Раздел: Рефераты по информатике
Тип: лабораторная работа Добавлен 19:52:39 13 июня 2010 Похожие работы
Просмотров: 29 Комментариев: 19 Оценило: 2 человек Средний балл: 5 Оценка: неизвестно     Скачать

Лабораторная работа

На тему: МАССИВЫ в С/С++

Поэлементные операции

1. Одномерные (линейные) массивы

Линейным массивом в программе на C++ называется упорядоченный набор однотипных переменных, которые располагаются в памяти последовательно

Массив является простейшей структурой данных , облегчающей работу с большими объемами информации путем их упорядочения. В случае с массивами, упорядочение происходит за счет индексирования элементов, то есть обращения к каждому из них по порядковому номеру. Показанный на рисунке массив состоит из n элементов с индексами от 0 до n -1, в который записаны числа 5, 21, 0, 12 и т.д.

Любой массив в C++ характеризуется тремя параметрами: именем , типом элементов и размером . Как и обычная переменная, перед использованием массив должен быть объявлен. Общая форма записи объявления:

тип_элементов имя_массива[размер_массива];

Здесь тип_элементов – это любой из известных стандартных типов (int, float, double, char и т.д.), имя_массива – уникальное имя (идентификатор), используемое для обращения к массиву, размер_массива – количество его элементов. В качестве последнего параметра в объявлении может быть использована только целочисленная константа или константное выражение. Примеры объявлений

intA[15]; // массив из 15 целочисленных элементов с именем A

floatx[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.


//----------- Сумма элементов массива -------------

#pragmahdrstop

#include <conio.h>

#include <iostream.h>

#pragma argsused

int main(int argc, char* argv[])

{

intA[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;

}

//-------------------------------------------------

Наберите код этой программы в среде TurboC++ и запустите ее на выполнение. Проверьте правильность получаемых с ее помощью результатов. Нарисуйте блок-схему и объясните алгоритм ее работы. Объясните смысл использования дополнительной переменной sum в этой программе.

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

Массивы в программах C++ могут быть не только линейными. Довольно частым является использование двух - (и более) -мерных структур. К примеру, прямоугольная матрица – типичная структура, представимая с помощью двумерного массива; а 3D-тензор может быть записан как соответствующий трехмерный массив.

Многомерный массив в C++ организован по принципу «массива массивов». Общий формат его объявления

тип имя[N1][N2]…[NM];

Здесь M – число индексов (или размерность) массива. Индексы изменяются в пределах от 0 до N1 – 1, от 0 до N2 – 1, от 0 до N3 – 1, ..., от 0 до NM – 1, соответственно.

К примеру, запись intG[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(intj=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. Напишите программу, вычисляющую произведение элементов в каждой ее строке. Матрица вводится с клавиатуры.

Решение. Условимся использовать для хранения матрицы массив floatX[4][4]. Расчет произведения реализуем согласно следующему алгоритму. Введем вспомогательную переменную (к примеру, floatP). Заметим, что в i-й строке расположены элементы X[i][j], где j меняется от 0 до 3, включительно. Организуем цикл по j, внутри которого будем домножать P на X[i][j]. Тогда на выходе из цикла P будет содержать искомое произведение. Выведем его на экран и продолжим расчеты для следующей строки. Для правильной работы алгоритма перед началом расчетов в каждой строке матрицы необходимо присвоить P значение 1.

//-------- Произведение элементов строки ----------

#pragmahdrstop

#include <conio.h>

#include <iostream.h>

#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++) // циклпострокам

{

floatP = 1.0; // вспомогательная переменная

for(intj=0; j<4; j++) // цикл по элементам в строке

P = P * X[i][j]; // домножаем P на X[i][j]

cout << "\n proizvedenie " << i

<< "-i stroki = " << P; // выводимрезультатнаэкран

}

getch();

return 0;

}

//-------------------------------------------------

Наберите и откомпилируйте код этой программы в TurboC++. Проверьте результаты, выдаваемые программой.

3. Типизированные константы

В рассмотренном выше примере текст программы содержит явные выражения, задающие размеры массива X. Он объявлен как floatX[4][4], то есть с явным указанием размерности, и далее везде по ходу программы цифра 4 используется явно при записи циклов for.

Такая техника программирования является допустимой и даже часто используемой, однако создает некоторые трудности в плане масштабируемости программы. В данном случае под масштабируемой мы будем понимать программу, которая может быть легко перестроена для работы с массивами других размеров. В рассмотренном выше примере при изменении размера массива X нам придется просмотреть весь код программы, заменяя 4 на другое целое число.

Этого можно избежать, если ввести типизированные константы , которые будут использоваться для указания размеров массива. Так же, как и переменная, типизированная константа имеет уникальное имя и тип, однако ее значение не может быть изменено по ходу выполнения программы. Это дает право использовать ее в объявлении массива.

Типизированная константа должна быть объявлена с ключевым словом const, вслед за которым указывается ее тип (int, float, double, char, и т.д.), далее, через пробел, – ее имя и инициализирующее выражение

const тип имя = выражение;

Например, запись constintN = 4; означает объявление целочисленной константы с именем N и значением 4. В рассмотренном выше примере N могла быть использована как при объявлении массива floatX[N][N], так и везде далее вместо 4. Такая программа будет легко масштабируемой в силу того, что в ней достаточно изменить значение N работы с массивами других размеров.

Типизированная константа может быть объявлена в любом месте программы до момента своего первого использования. Однако хорошим стилем считается объявление всех констант в самом начале программного файла, после подключения библиотек директивами #include.

4. Инициализация элементов массива

В рассмотренных выше примерах начальные значения элементов массива задавались пользователем с клавиатуры. Можно поступить иначе и каждому из элементов присвоить начальное значение с помощью оператора «=». Это потребует довольно большого количества записей – по отдельному оператору для каждого из элементов. C++ дает программисту еще один, более удобный, способ. Массив может быть инициализирован при объявлении . Для этого в строке объявления сразу вслед за указанием типа элементов, имени массива и его размеров, записывается знак присваивания, и далее в фигурных скобках задаются значения элементов через запятую

тип имя[размерN] = { знач1, знач2, знач3, ..., значN };

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

В следующем примере

floatmark[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++ – это «массив массивов», о чем уже говорилось выше. Пример

intF[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 <conio.h>

#include <iostream.h>

#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

floatC[N][N]; // матрица произведения С

for(int i=0; i<N; i++) // циклпострокамС

{

for(intj=0; j<N; j++) // цикл по столбцам С

{

floats = 0.0; // вспомогательная переменная

for(intk=0; k<N; k++) // цикл суммирования по k

s += A[i][k]*B[k][j]; // добавляем к s новое слаг-ое

C[i][j] = s; // записываем s в C[i][j]

}

}

cout << " Results: \n"; // далее выводим C на экран

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

{

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

cout << C[i][j] << "\t";

cout << endl;

}

getch();

return 0;

}

//-------------------------------------------------

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую!
Никита00:23:06 05 ноября 2021
.
.00:23:05 05 ноября 2021
.
.00:23:04 05 ноября 2021
.
.00:23:02 05 ноября 2021
.
.00:23:01 05 ноября 2021

Смотреть все комментарии (19)
Работы, похожие на Лабораторная работа: Массивы в С С

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

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



Результаты(288120)
Комментарии (4159)
Copyright © 2005-2021 HEKIMA.RU [email protected] реклама на сайте