Похожие презентации:
Массивы в языке СИ
1. Массивы в языке Си
2. Основные определения
Массив - это конечная совокупность данныходного типа. Можно говорить о массивах
целых чисел, массивов символов и.т.д. Мы
можем даже определить масссив, элементы
которого - массивы( массив массивов),
определяя, таким образм, многомерные
массивы.
Массивы в Си являются однотипными (хранят
данные только одного типа) и имеют заранее
определенную длину (размер)
3. Основные определения
В СИ массив хранится в виде группыпоследовательных ячеек одного типа,
объединенных под одним единым именем. Имя
массива является указателем (указывает на адрес
в памяти). Отдельная ячейка данных массива
называется элементом массива. Элементами
массива могут быть данные любого типа.
Массивы могут иметь как одно, так и более
одного измерений. В зависимости от количества
измерений массивы делятся на одномерные
массивы, двумерные массивы, трёхмерные
массивы и так далее до n-мерного массива.
4. Одномерные массивы
Одномерный массив – массив с однимпараметром, характеризующим количество
элементов одномерного массива. Всегда сразу
после имени массива идут квадратные скобочки,
в которых задаётся размер одномерного массива,
этим массив и отличается от всех остальных
переменных. Синтаксис объявления одномерного
массива в Си:
<тип данных> <имя одномерного
массива>[размерность одномерного массива];
5. Одномерные массивы
Например:int a[16];
где, int - целочисленный тип данных; а - имя
одномерного массива; 16 – размер одномерного
массива, 16 ячеек.
В СИ нумерация ячеек массива всегда начинается с 0.
Поэтому максимальный индекс одномерного массива
в примере равен 15, но размер массива 16 ячеек.
Индекс ячейки – это целое неотрицательное число, по
которому можно обращаться к каждой ячейке
массива и выполнять какие-либо действия над
ячейкой.
6. Одномерные массивы
Первый элемент имеет порядковый номер 0.Рассмотрим, почему это так. Представим память
компьютера в виде ленты. Имя массива - это
указатель на адрес памяти, где располагаются
элементы массива.
Массив хранит адрес первого элемента. Индекс i
элемента - это сдвиг на i*sizeof(тип) байт от начала
Индекс массива указывает, на сколько байт
необходимо сместиться относительно начала
массива, чтобы получить доступ к нужному элементу.
7. Одномерные массивы
• Например, если массив A имеет тип int, то A[10]означает, что мы сместились на 10*sizeof(int)
байт относительно начала. Первый элемент
находится в самом начале и у него смещение
0*sizeof(int).
В СИ массив не хранит своего размера и не
проверяет индекс массива на корректность. Это
значит, что можно выйти за пределы массива и
обратиться к памяти, находящейся дальше
последнего элемента массива (или ближе).
8. Одномерные массивы
Массивы могут быть инициализированы приобъявлении:
int a[16] = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64,
11, 43, 39, -15 };
int a[]={5,-12,-12,9,10,0,-9,-12,-1, 23, 65, 64, 11, 43,
39, -15};
Во втором случае показана инициализации
массива без определения его размера. В этом
случае компилятор сам определит размер
одномерного массива. Размер массива можно не
указывать только при его инициализации, при
обычном объявлении массива обязательно нужно
указывать размер массива.
9. Одномерные массивы
Создадим массив, после чего найдём егомаксимальный элемент.
10. Одномерные массивы
Eсли при инициализации указано меньше значений, чем размермассива, остальные элементы заполняются нулями.
Если необходимо заполнить весь массив нулями, тогда пишем
int a[10] = {0};
11. Одномерные массивы
Полноценных способов проверки, вышли мы за пределымассива или нет, не существует
12. Одномерные массивы
Пример. В заданноммассиве из 10 целых
чисел надо изменить
порядок следования
его элементов на
обратный без
привлечения
вспомогательного
массива.
13. Код программы
14. Одномерные массивы
В следующемпримере массив
описан как внешний.
Функция main
подсчитывает
наибольшее число
одинаковых идущих
подряд элементов
массива,
определенного вне
функции main.
15. Код программы
КодКодпрограммы
программы
16. Двумерные массивы в СИ
• В двумерном массиве, кроме количества элементовмассива, есть такие характеристики как, количество
строк и количество столбцов двумерного массива. То
есть, визуально, двумерный массив – это обычная
таблица, со строками и столбцами.
• Используется следующий синтаксис объявления
двумерного массива:
• <тип данных> <имя массива> [количество
строк][количество столбцов];
17. Двумерные массивы в СИ
Размеры двумерного массива в СИ указываются вотдельных парных квадратных скобках после имени и
могут быть любыми положительными
целочисленными значениями.
Двумерный массив , который имеет пять строк и три
столбца запишется в виде:
int a[5][3];
где: a - имя целочисленного массива, число в первых
квадратных скобках указывает количество строк
двумерного массива, в данном случае их 5; число во
вторых квадратных скобках указывает количество
столбцов двумерного массива, в данном случае их 3.
18. Двумерные массивы в СИ
Обычным представлением таких массивов являютсятаблицы значений, содержащие информацию в
строках и столбцах. Чтобы определить отдельный
табличный элемент, нужно указать два индекса:
первый (по соглашению) указывает номер строки, а
второй (опять же по соглашению) указывает номер
столбца.
19. Двумерные массивы в СИ
Рисунок иллюстрирует двумерный массив a. Массив содержит три строкии четыре столбца, так что, еще говорят, - это массив три на четыре.
Вообще, массивы с m строками и n столбцами называют массивами m на
n.
Каждый элемент в массиве а определяется именем элемента в форме
a[ i ][ j ]; a – это имя массива, аi иj – индексы, которые однозначно
определяют каждый элемент в а. Заметим, что имена элементов первой
строки имеют первый индекс 0, имена элементов в четвертом столбце
имеют второй индекс 3.
20. Двумерные массивы в СИ
Ниже представлено объявление двумерного массива синициализацией:
int a[5][3] = { {4, 7, 8}, {9, 66, -1}, {5, -5, 0}, {3, -3, 30}, {1, 1, 1} };
После знака присвоить ставятся общие фигурные скобочки,
внутри которых ставится столько пар фигурных скобочек,
сколько должно быть строк в двумерном массиве, причём
эти скобочки разделяются запятыми. В каждой паре
фигурных скобочек записывать через запятую элементы
двумерного массива. Во всех фигурных скобочках количество
элементов должно совпадать. Так как в массиве пять строк,
то и внутренних пар скобочек тоже пять. Во внутренних
скобочках записаны по три элемента, так как количество
столбцов – три.
21. Двумерные массивы в СИ
Допускается не указывать количество строк в двумерноммассиве (указываются пустые квадратные скобки). В
таком случае размер массива будет определен по числу
инициализирующих значений строк. Количество
столбцов матрицы всегда необходимо указывать.
Например:
double b[][4] = {{1,2,3,4},{5,6,7,8}}
22. Двумерные массивы в СИ
Ввод и вывод матриц в языке СИ осуществляетсяпоэлементно. Так как матрица имеет двойную
размерность, то ввод и вывод осуществляется во
вложенных циклах. Например:
double a[5][10];
for(int i=0;i<5;i++)
for(int j=0;j<10;j++)
scanf("%lf”,&a[i][j]);
...
for(int i=0;i<5;i++){
for(int j=0;j<10;j++)
printf("%8.2lf\t”,a[i][j]);
printf("\n”); }
23. Двумерные массивы в СИ
В этом примере,сначала
заполняем
двумерный
массив
произведением
его индексов, а
потом выводим на
экран его
содержимое.
24. Код программы
25. Двумерные массивы в СИ
В примере строитсяединичная матрица
a[m][m], размер
которой определяется с
помощью конструкции
#difine M 5. Сам
алгоритм вычисления
элементов матрицы
основан на том, что
произведение (i/j)*(j/i)
равно единице тогда и
только тогда. когда i
равно j. В остальных
случаях оно равно нулю.
26. Код программы
27. Двумерные массивы в СИ
В программе определяется минимальный элемент каждой строки матрицы ивыполняется обмен местами найденного и диагональю этой же строки.
28. Код программы
29. Двумерные массивы в СИ
В языке СИ допускается создание массивовразмерностью три и более(т.е трехмерных,
четырехмерных и т.д.). Например, объявление
трёхмерного целочисленного массива с
инициализацией будет иметь вид:
int a[2][2][2]={ //это трехмерный массив
{{1,2},{3,4}},
{{5,6},{7,8}}
};
Ввод, вывод и прочая обработка такого массива
осуществляется аналогично обработке двумерного
массива, только уже в трех вложенных циклах.