Массивы
► 1. Свойства массивов ► 2. Формат объявления ► 3. Инициализация ► 4. Генерация случайных чисел ► 5. Работа с массивом ► 6. Поиск в массиве
Массивы (arrays) ► Массив – это группа связанных друг с другом элементов одного типа (double, float, int и т. п. ) последовательно расположенных в памяти.
► Идентификатор ► Число – имя массива элементов – размер массива ► Индекс – порядковый номер элемента в массиве, целое число для доступа к элементу
1. Свойства массива ► нельзя задавать статический массив переменного размера (только константой) ► обращение к элементам массива - по индексу ► индексы начинаются с 0 ► если список инициализации короче размера массива, то оставшимся присваивается 0 ► Элементами массива не могут быть функции ► Элементы массива не могут быть типа void.
2. Формат объявления массива спецификатор-типа описатель [константное - выражение]; спецификатор-типа описатель [ ]; Пример: 31 целое число int temps[31]; 1 2 3 4 temps[0] temps[1] temps[2] temps[3]……
0 1 2 3 temps[0] temps[1] temps[2] temps[3]…… индексом (subscript),
Нумерация элементов массива начинается с нуля и заканчивается n – 1, где n – число элементов массива.
Элементы массива занимают один непрерывный участок памяти компьютера и располагаются последовательно друг за другом
const int array_size =100; int arr[array_size]; int array_size; int arr[array_size];
3. Инициализация массивов а. при его определении: инициализация списком значений или выражений int temps[5] = {45, 56, 12, 98, 12}; мы создали пять элементов temps[0] 45 temps[1] 56 temps[2] 12 temps[3] 98
int temps[5] = {45, 56, 12}; int temps[2] = {45, 56, 12}; static float prices[3] = {23. 45, 34. 56, 12. 34}; float prices[] = {23. 45, 34. 56, 12. 34};
► Если массив явно не проинициализирован, то внешние и статические массивы инициализируются нулями. ► Автоматические массивы после объявления ничем не инициализируются и содержат неизвестную информацию.
когда значение элементу массива не было присвоено, он так же, как и любая переменная, будет иметь своим значением некий «мусор» .
б. Отдельным элементам массива можно присваивать значения temps[0] = 45;
в. когда число элементов известно заранее, используйте цикл for и ввод с клавы
г. Заполнение случайными значениями
4. Генерация случайных чисел i = rand () ; Функция rand генерирует целое число в диапазоне от 0 до RAND_MAX (символическая константа, определенная в заголовочном файле
i = rand () % 6 ; // генерирует случайное число от 0 до 5 Масштабирование , число 6 - масштабирующий коэффициент
Для рандомизации необходимо использование стандартной библиотечной функции srand((unsigned)time(NULL)); Функция time (с аргументом NULL) возвращает текущее «календарное время» в секундах.
5. Работа с массивами Пример ► по элементам массива вычисляется среднее арифметическое значение ► массив используется для перевода значений температуры из шкалы Фаренгейта в шкалу Цельсия
. . .
Использование цикла do. . . while для загрузки массива
6. Определение количества элементов sizeof(параметр) sizeof(int) // 4 int b[5]; sizeof(b); // 20 Кол-во эл массива = sizeof(имя_массива)/ sizeof(тип_данных)
7. Поиск в массиве
Смысл переменных
ПЕРЕМЕННАЯ - СЧЕТЧИК.
ПЕРЕМЕННАЯ - ПРИЗНАК. суммирование элементов массива до первого отрицательного включительно:
5 -8 -9 7 8 -5 !!!!!!!-ПРОВРИТЬ
ПЕРЕМЕННАЯ - НАКОПИТЕЛЬ. for (s=0, . . . ; . . . ) { получить k; s+=k; }
for (s=0, i=0; i<10; i++) s+=A[i]; for (p=1, . . . ; ) { Получить k; p*=k; }
// Сумма элементов массива до первого // отрицательного
// Сумма положительных элементов // массива
// Сумма значений функции sin // в диапазоне 0. . 1 с шагом 0. 1
ПЕРЕМЕННАЯ – МИНИМУМ (МАКСИМУМ) for (s=0, . . . ; . . . ) { получить k; if (k>s) s=k; } //нахождение максимального элемента массива. 3 7 9 4
► запоминает не само значение максимума, а индекс элемента в массиве, где оно находится.
Позиция минимального из положительных
Смысл переменных при завершении циклов for (i=0; i
Смысл индексных переменных при работе с массивами while() {. . . c=A[i]; i++; . . . } // Извлечь очередной и продвинуть индекс while() {. . . c=A[i++]; . . . } // “Нежесткая” связь с циклом for (. . . ; i++) {. . . c=A[i]; . . . } // “Жесткая” связь с циклом
while() {. . . A[i]=c; i++; . . . } // Записать очередной и продвинуть индекс while() {. . . A[i++]=c; . . . } // “Нежесткая” связь с циклом for (. . . ; i++) {. . . c=A[i]; . . . } // “Жесткая” связь с циклом
► Пример – задача переписать элементы массива A в массив B так, чтобы в выходном массиве слева относительно выбранного A[k], называемого медианой, находились все элементы, меньшие данного, а справа большие. -“движение” по массиву A слева направо, связанное с циклом просмотра массива; ► -“движение” по массиву B в процессе заполнения его с левого конца; ► -“движение” по массиву B в процессе заполнения его с правого конца. ►
Смысл переменных в структурах данных ► ПОСЛЕДОВАТЕЛЬНОСТЬЮ называется (упорядоченное) множество переменных, количество которых может меняться. определить текущее количество элементов последовательности : ► -использовать дополнительную переменную - счетчик числа элементов; ► -добавлять каждый раз в качестве обозначения конца последовательности дополнительный элемент с особым значением - признак конца последовательности, например нулевой (ОГРАНИЧИТЕЛЬ ПОСЛЕДОВАТЕЛЬНОСТИ).
Житейский смысл алгоритмов и их фрагментов -обмен значениями (перестановка) соседних переменных в массиве; int A[10], c; c=A[i]; A[i]=A[i+1]; A[i+1]=c;
a=5; b=6; c=a; a=b; b=c;
Смысл выражений в арифметических задачах
Пример анализа программы for (m=0, k=0, i=1; i<20; i++) if (A[i-1]m) m=k; k=0; }
► 1. Смысл цикла for() ► 2. Смысл переменной m из выражения if (k>m) m=k; ► 3. A[i] - текущий элемент массива, A[i-1] имеет смысл - предыдущий элемент массива, A[i-1]
► процесс выполнения нескольких шагов цикл i= 1 2 3 4 5 6 7 8 A[] 3 4 5 2 1 3 4 6 2 k=0 k++ k++ k=0 1 2 0 0 1 2 3 0 m=k m=k 2 3
► МАКСИМАЛЬНУЮ ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ ВОЗРАСТАЮЩИХ ЗНАЧЕНИЙ в массиве
удаления отрицательных элементов из массива 2 -4 6 -2
Пример for (i=1, s=0; i<10; i++) if (A[i]>0 && A[i-1]<0) s++;
for (i=0, s=A[0]; i<10; i++) if (A[i]>s) s=A[i];
? for (s=1, i=0; i < 10; i++) s = s * A[i]; // 1 6 8 14
? cin >> b; for (i=0; A[i]!=0; i++); A[i]=b; A[i+1]=0; // 36 8 12
? for (n=a, s=0; n!=0; n=n/10) { k=n%10; s=s*10+k; } // 4723 n k s
? for (s=A[0], i=1; i < 10; i++) A[i-1] = A[i]; A[9] = s; // A[0] // 4 A[1] 7 A[2] 9 A[3] 45
? for (i=0; i<10; i++) if (A[i]<0) break; if (i==10) cout << "Хорошо!!!n";
error double f[3]={1. 1, 100. 001, 1000. 0001};



![error int a[3]; cout<<a[1]<<” “<<a[2]<<” “<<a[3]<<endl; error int a[3]; cout<<a[1]<<” “<<a[2]<<” “<<a[3]<<endl;](https://present5.com/presentation/3/78364820_143232789.pdf-img/78364820_143232789.pdf-64.jpg)