Лабораторная работа №12
Основы работы с массивами
Цель работы: получение практических навыков работы с массивами средствами языка С.
Содержание
Краткие теоретические сведения
Префиксные и постфиксные операторы инкремента и декремента
Операторы присваивания
Массивы
Рабочее задание
Краткие теоретические сведения
Префиксная форма:
++ унарное-выражение
-- унарное-выражение
Постфиксная форма:
унарное-выражение ++
унарное-выражение --
Префиксный оператор инкремента (++) прибавляет единицу своему операнду, эта увеличенная на единицу величина является результатом выражения. Операнд не должен иметь константный тип. Результат имеет тот же Тим, что и операнд.
Префиксный оператор декремента (––) аналогичен оператору инкремента, но выполняет уменьшение операнда на единицу.
Префиксные и постфиксные операторы инкремента и декремента изменяют значения операндов. Отличие заключается в том, когда выполняется инкремент или декремент в ходе вычисления выражения. В префиксной форме инкремент или декремент выполняется до того, как величина операнда будет использована в выражении, то есть в выражении используется уже модифицированная величина. В постфиксной форме инкремент или декремент выполняется после того, как величина операнда была использована в выражении (но не немедленно!), то есть в выражении используется еще неизмененная величина. Например, следующая программа
int a, b, x = 6;
a = ++x;
b = x++;
printf(“a = %d\n”, a);
printf(“b = %d\n”, b);
printf(“a = %d\n”, x);
печатает:
a = 7
b = 7
x = 8
Операция присваивания назначает значение правого операнда левому операнду. Поэтому левый операнд должен быть модифицируемой величиной.
Операторы присваивания в С могут в одной операции выполнять также и преобразования величин
Оператор | Операция |
= | Простое присваивание |
*= | Присваивание с умножением |
/= | Присваивание с делением |
%= | Присваивание остатка от целочисленного деления |
+= | Присваивание с прибавлением |
–= | Присваивание с вычитанием |
<<= | Присваивание со сдвигом влево |
>>= | Присваивание со сдвигом вправо |
&= | Присваивание с побитовым И |
^= | Присваивание с побитовым исключающим ИЛИ |
|= | Присваивание с побитовым ИЛИ |
type-specifier declarator [constant-expression] [constant-expression] ... |
Каждое constant-expression в квадратных скобках задает количество элементов в определенной размерности. Первое константное выражение может быть опущено, если массив был проинициализирован или объявлен как параметр.
Массивы хранятся по строкам. Например, такой массив
char A[2][3]; |
состоит из двух строк по три колонки каждая. Сначала хранятся первые три колонки первой строки, затем три колонки второй строки.
Примеры:
float matrix[10][15]; |
Двумерный массив matrix имеет 150 элементов типа float.
Переменная, декларирующая массив, считается указателем на тип элементов массива.
int rand( void ); |
Функция rand возвращает псевдослучайное целое число в диапазоне от 0 до RAND_MAX (32767). Используйте функцию srand для лучшей инициализации генератора перед вызовом rand.
Требуется заголовочный файл <stdlib.h>.
Пример.
// crt_rand. c // This program seeds the random-number generator // with the time, then displays 10 random integers. // #include <stdlib. h> #include <stdio. h> #include <time. h> int main( void ) { int i; // Seed the random-number generator with current time so that // the numbers will be different every time we run. // srand( (unsigned)time( NULL ) ); // Display 10 numbers. for( i = 0; i < 10;i++ ) printf( " %6d\n", rand() ); printf("\n"); // Usually, you will want to generate a number in a specific range, // such as 0 to 100, like this: { int RANGE_MIN = 0; int RANGE_MAX = 100; for (i = 0; i < 10; i++ ) { int rand100 = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN); printf( " %6d\n", rand100); } } } |
Рабочее задание
Написать программу, в которой:
Задать массив целых чисел длиной согласно варианту. Элементы массива задать случайным образом в пределах заданных диапазонов*. Вывести исходный массив на экран. Выполнить обработку массива согласно варианту, вывести обработанный массив на экран.* Для целей отладки можно пользоваться наперед проинициализированным массивом.
Номер варианта | Длина массива | Диапазон значений элементов массива (целые величины) | Задание |
1 | 20 | -3…10 | Для каждого положительного элемента массива найти, есть ли в массиве элементы, равные ему по модулю, но противоположные по знаку. Если есть, то заменить изменить знак отрицательного элемента. Вывести элементы массива на экран. |
2 | 22 | -5…10 | Определить, какое абсолютное значение чаще всего встречается в массиве и вывести его на экран. |
3 | 25 | -10…20 | Найти максимальный и минимальный элементы массива и поменять их местами. Вывести элементы массива на экран. ПРИМЕЧАНИЕ. Если в массиве есть несколько элементов, соответствующих минимальному или максимальному значению, то меняются местами первые из них. |
4 | 17 | -10…20 | Подсчитать количество пар соседних элементов, которые имеют противоположные знаки, и вывести эти пары на экран (с указанием индекса каждого выведенного элемента). ПРИМЕЧАНИЕ. Считать ноль положительным числом. |
5 | 20 | -11…20 | Найти сумму чисел, находящихся между максимальным и минимальным элементами массива (в сумму включить эти элементы). Вывести сумму на экран. ПРИМЕЧАНИЕ. Если в массиве есть несколько элементов, соответствующих минимальному или максимальному значению, то использовать первые из них. |
6 | 23 | -5…10 | Элемент вектора называется локальным максимумом, если он строго больше двух своих соседей. Найти все локальные максимумы в пределах массива и вывести на экран номера локальных максимумов, индексы массива им соответствующие, а также значения соответствующих элементов массива. |
7 | 25 | -5…15 | Вывести на экран индексы всех четных элементов массива и сами значения этих элементов. ПРИМЕЧАНИЕ. Считать ноль четным числом. |
8 | 24 | -8…15 | Поменять местами 1-й положительный элемент с последним положительным элементом, 2-й - предпоследним и т. д. Вывести элементы массива на экран. ПРИМЕЧАНИЕ. Считать ноль положительным числом. |
9 | 25 | -10…25 | Вывести на экран индексы всех нечетных элементов массива и сами значения этих элементов. ПРИМЕЧАНИЕ. Считать ноль четным числом. |
10 | 22 | -5…15 | Для каждого положительного элемента массива найти есть ли в массиве элементы, равные ему по модулю, но противоположные по знаку. Если есть, то изменить знак и положительных, и отрицательных элементов на противоположный. Вывести элементы массива на экран. |
11 | 19 | -10…20 | Найти среднеарифметическое чисел, находящихся между максимальным и минимальным элементами массива (включая эти элементы в вычисление среднеарифметического), и вывести это значение на экран. ПРИМЕЧАНИЕ 1. Если в массиве есть несколько элементов, соответствующих минимальному или максимальному значению, то выполнять расчеты для первых из них. ПРИМЕЧАНИЕ 2. Среднеарифметическое рассчитывать в вещественном формате. |
12 | 24 | 1…30 | Вывести на экран элементы и индексы элементов, значения которых лежат в пределах хотя бы в 1,5 раза больше наименьшего элемента массива, но не больше, чем 0,5 наибольшего элемента массива. |
13 | 25 | -10…25 | Поменять местами 1-й отрицательный элемент с последним отрицательным элементом, 2-й - предпоследним и т. д. Вывести элементы массива на экран. ПРИМЕЧАНИЕ. Считать ноль положительным числом. |
14 | 22 | -10…20 | Вывести на экран элементы и индексы элементов, которые меньше среднего значения всех элементов массива. |
15 | 20 | -6…26 | Определить сумму элементов массива, кратных пяти. Вывести эту сумму на экран. |
16 | 17 | -10…20 | Найти сумму чисел, находящихся между максимальным и минимальным по модулю элементами массива (в сумму включить эти элементы). Вывести полученную сумму на экран. ПРИМЕЧАНИЕ 1. Если в массиве есть несколько элементов, соответствующих минимальному по модулю или максимальному по модулю значению, то выполнять расчеты для первые из их. |
17 | 23 | 0…18 | Вывести на экран значения и индексы элементов, которые являются степенями 2. |
18 | 25 | 0…16 | Определить сумму элементов массива, кратных трем. Вывести полученную сумму на экран. |
19 | 24 | -10…20 | Заменить каждый элемент массива на среднеарифметическое между им и его соседями справа и слева ( |
20 | 25 | -15…32 | Найти сумму уникальных (встречающихся только один раз в массиве) элементов массива. |
21 | 20 | -7…15 | Элемент вектора называется локальным минимумом, если он строго меньше двух своих соседей. Найти все локальные минимумы в пределах массива и вывести на экран номера локальных минимумов, индексы массива им соответствующие, а также значения соответствующих элементов массива. |


