Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК-1_АЯП_рус.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.19 Mб
Скачать

Int *a; // Указатель на массив целых чисел

. . .

a = (int *) malloc(1000 * sizeof(int));

Функция освобождения памяти free() имеет следующий вид;

free(р );

Для работы с динамической памятью необходимо подключить заголовочный файл

#include<stdlib.h>

Пример: печать матрицы размером nхm .

Требуется ввести целые цисла n и m, ввести числа в количестве nхm, каждое число увеличить на 5 и вывести их в виде матрицы размером nхm .

Поскольку требуемое количество простых чисел n и m до начала работы программы неизвестно, невозможно создать массив для их хранения в статической памяти. Выход состоит в том, чтобы захватывать пространство под массив в динамической памяти уже после ввода чисел n и m. Вот полный текст программы:

#include<stdio.h>

#include<stdlib.h>

Void main()

{ int *t;

int i,n,j,m,k;

printf("Введите число n и m : ");

scanf("%d %d ", &n, & m);

t=(int *)malloc(n*m*sizeof(int));// Захватываем память под массив

printf("Введите числа \n");

for(i=0;i<n*m;i++)

{ scanf("%d",t);

t++;//сдвиг указателя на размер целого числа, то есть на 2 байта

}

t-=n*m; // Возврат на начало выделенной памяти

for(i=0;i<n*m;i++)

{*t+=5; //увеличение числа

++t; //сдвиг указателя на размер целого числа, то есть на 2 байта

}

t-=n*m; // Возврат на начало выделенной памяти

for(i=0;i<n;i++)

{ for(j=0;j<m;j++)

{ printf("%d ",*t );

++t; //сдвиг указателя на размер целого числа, то есть на 2 байта

}

printf("\n");

}

t-=n*m; // Возврат на начало выделенной памяти

free(t); // Освобождаем динамическую память

getch();//Задержка экрана

}

Пример работы данной программы:

Введите число n и m : 4 5

Введите числа: 13 17 19 23 29 31 37 41 43 4753 59 61 67 71 73 79 83 89 97

13 17 19 23 29

31 37 41 43 47

53 59 61 67 71

73 79 83 89 97

Основная литература: 2[124-137],3[9 лекция]

Дополнительная литература:1,2,3,5

Контрольные вопросы:

  1. В определении функции допускается указание спецификации класса памяти static или extern. Что такая спецификация задает?

  2. Переменная может быть определена, если спецификация класса памяти в ее объявлении опущена и переменная явно инициализируется.

  3. Как инициировать внешние переменные?

  4. Пусть int *ip;

Если *ip+=1увеличивает на единицу то, на что ссылается ip, то какие действия выполняют операторы:

+ +*ip и (*ip)+ +?

Каков приоритет унарных операторов * и & и порядок их выполнения в выражении

Лекция 7. Массивы. Одномерные массивы. Двумерные массивы. Функции для работы со случайными числами

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

Существуют различные методы структурирования данных, отличающиеся способом объединения отдельных компонентов в структуру и, следовательно, способом обращения к отдельным компонентам структуры.

По способу организации и типу компонентов в составных типах выделяют:

- регулярные типы (массивы);

- комбинированные типы (структуры);

- файловый тип (файлы);

- объектные типы (классы).

Регулярный и файловый типы определяют упорядоченные наборы однотипных компонентов с произвольным (для массивов) и последовательным (для файлов) способами доступа к компонентом структуры. Комбинированный тип – упорядоченный набор компонентов разных типов с произвольным доступом.

Массив – это совокупность данных одного типа, расположенных в памяти ЭВМ последовательно, непосредственно одно за другим.

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

Все элементы массива в целом обозначаются общим групповым именем (имя массива). Доступ к отдельным элементам массивов организуется посредством указания имени массива и порядкового номера (индекса) необходимого элемента. Индекс определяет положение элемента относительно начала массива.

При описании массива необходимо указать:

- тип элементов;

- имя массива;

- размерность массива.

Общая форма описания массива имеет вид:

тип имя_масссива [размер1][размер 2]….;

Количество индексов, стоящих в описании массива, определяет число измерений или размерность массива. Различают одномерные, двумерные, трехмерные и т.д. массивы. При этом двумерный массив можно рассматривать как массив одномерных массивов, трехмерный – массив двумерных массивов и т.д. На практике чаще всего используют одномерные массивы (векторы) и двумерные массивы (матрицы).

Одномерные массивы

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