Tooprogram.ru

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Массивы в си примеры задач

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Урок 3. Часть1: Язык Си массивы

Определение массива в Си

Массив представляет собой множество значений, которыми можно оперировать как группой, так и с отдельно каждым значением. Каждый элемент в массиве является как бы отдельной переменной, с которой можно обращаться, как с обычной переменной.

У каждого элемента в массиве есть свое положение — индекс элемента, т.е. его порядковый номер. Индекс элемента массива не имеет никакого отношения к присвоенному ему значению.

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

int имя_массива [макс_кол-во_элементов];

Пример:

Нумерация элементов массива начинается с .

Если определен массив, имеющий 10 элементов, значит максимальным возможным индексом является число 9.

После определения массива можно сразу присваивать начальные значения:

Работа с массивами в Си

Заполнение случайными числами в диапазоне [a;b]

A[i] = a + rand()% (b — a + 1);

Создание пользовательской функции для заполнения случайными числами:

Описание функции до main<>

int irand ( int a, int b )

Заполнение массива (псевдо)случайными целыми числами в диапазоне от 20 до 100:

for ( i = 0; i Показать решение:

main() < int f[10]=<2,4,-3,-6,-1,4,7,5,10,13>; int i,c,flag; flag=0; printf(«vvedite obrazec»); scanf(«%d»,c); for(i=0;i Показать аналог в Pascal

var f: array[1..10] of integer; i,c,flag:integer; begin f[1]:=2; f[2]:=4; f[3]:=-3; f[4]:=-6; f[5]:=-1; f[6]:=4; f[7]:=7; f[8]:=5; f[9]:=10; f[10]:=13; flag:=0; writeln(‘vvedite obrazec’); readln(c); for i:=1 to 10 do begin If f[i]=c then begin writeln(‘na ); end.

* Из задачника М. Э. Абрамян (Array103)

#include int main(vo ,i,a[i]); return 0; >

* Из задачника М. Э. Абрамян (Array88)

* Из задачника М. Э. Абрамян (Array90)

  • Что такое массив?
  • Может ли массив содержать переменные нескольких типов?
  • Как правильно определять на языке Си массивы?
  • Есть ли взаимосвязь между значением индекса и значением элемента массива и какова она, если есть?

    Posted in

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

    Но есть, конечно, и недочёты. Например, я думаю, лучше сразу приучать начинающих программистов к грамотному, читабельному оформлению кода, потому что иногда в примерах хрен разберёшь что к чему относится. А переучиваться, как известно, сложнее, чем учиться с нуля.

    Сами фрагменты кода написаны не везде корректно. Не всё работает (может и я что-то не так сделал, хотя как только ни пытался со всей мощностью гугла).

    В некоторых примерах для решения нужны дополнительные знания (например, функция sizeof() в использовании для вычисления размера массива была бы очень удобна).

    Пример: Дан массив размера N. Вставить элемент с нулевым значением перед минимальным и после максимального элемента массива.
    * Из задачника М. Э. Абрамян (Array103)

    В этом примере, считаю, есть лишние операции в той версии решения, которая предложена на сайте. Например в строке 4 задаётся размер массива — 11. А что если пользователь захочет ввести не 11, а, скажем, 25?
    Это просто бессмысленная операция, так как двумя строками ниже программа всё равно попросит пользователя ввести размер массива.

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

    int iRand(int a, int b)
    <
    return a + rand() % (b — a + 1);
    >

    int main(int argc, char **argv)
    <
    // Задание размера массива
    int n;
    printf(«Enter array’s size: «);
    scanf(«%d», &n);

    // Формирование массива
    int a = -100, b = 100;
    int mass[n];
    for (int i = 0; i = 0)
    mass[iMin — 1] = 0;
    if (iMax at 08:25

    спасибо за конструктивные замечания) Постараемся учесть

    Задачи на массивы

    Сумма четных положительных элементов массива

    В массиве, содержащем положительные и отрицательные целые числа, вычислить сумму четных положительных элементов.

    Максимальный из элементов массива с четными индексами

    В массиве найти максимальный элемент с четным индексом.

    Другая формулировка задачи: среди элементов массива с четными индексами, найти тот, который имеет максимальное значение.

    Элементы массива, которые меньше среднего арифметического

    Найти в массиве те элементы, значение которых меньше среднего арифметического, взятого от всех элементов массива.

    Найти два наименьших (минимальных) элемента массива

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

    Читать еще:  Переменные в ассемблере

    Сжать массив, удалив элементы, принадлежащие интервалу

    Сжать массив, удалив из него все элементы, величина которых находится в интервале [а, b]. Освободившиеся в конце массива элементы заполнить нулями.

    Сумма модулей элементов массива, расположенных после первого отрицательного

    Вычислить сумму модулей элементов массива, расположенных после первого отрицательного элемента.

    Например, в массиве [5, 3, -1, 8, 0, -6, 1] первый отрицательный элемент является третьим по счету, а сумма модулей стоящих после него элементов массива будет составлять 8 + 0 + 6 + 1 = 15.

    Номер минимального по модулю элемента массива

    Найти номер минимального по модулю элемента массива.

    Например, в массиве [10, -3, -5, 2, 5] минимальным по модулю элементом является число 2. Его номер 4 (в языках, в которых индексация массивов начинается с нуля, его индекс будет равен 3).

    Сумма цифр массива

    Найти сумму всех цифр целочисленного массива. Например, если дан массив [12, 104, 81], то сумма всех его цифр будет равна 1 + 2 + 1 + 0 + 4 + 8 + 1 = 17.

    Найти сумму элементов между минимальным и максимальным элементами массива

    В одномерном массиве найти сумму элементов, находящихся между минимальным и максимальным элементами. Сами минимальный и максимальный элементы в сумму не включать.

    Среднее арифметическое положительных элементов массива

    Найти среднее арифметическое положительных элементов линейного массива.

    Максимальный отрицательный элемент массива

    В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве.

    Число, чаще всего встречающееся в массиве

    Определить, какое число в массиве встречается чаще всего.

    Поменять местами минимальный и максимальный элементы

    В массиве случайных целых чисел поменять местами минимальный и максимальный элементы.

    Сдвиг массива

    Сдвинуть элементы массива в указанном направлении (влево или вправо) и на указанное число шагов. Освободившиеся ячейки заполнить нулями. Выводить массив после каждого шага.

    Вывести неповторяющиеся элементы массива

    В массиве найти элементы, которые в нем встречаются только один раз, и вывести их на экран. То есть найти и вывести уникальные элементы массива.

    Реверс массива

    Переставить элементы заданного массива в обратном порядке, то есть произвести реверс массива.

    Найти наибольший элемент и его порядковый номер в массиве

    Заполнить одномерный массив случайными числами. Найти и вывести на экран наибольший его элемент и порядковый номер этого элемента.

    Сколько элементов массива больше по модулю максимального

    Создать массив из 20 элементов в диапазоне значений от -15 до 14 включительно. Определить количество элементов по модулю больших, чем максимальный.

    Удаление отрицательных элементов массива

    Заполнить массив случайными положительными и отрицательными целыми числами. Вывести его на экран. Удалить из массива все отрицательные элементы и снова вывести.

    Определить индексы четных элементов массива

    Во втором массиве сохранить индексы четных элементов первого массива. Например, если дан массив со значениями 8, 3, 15, 6, 4, 2, то во второй массив надо заполнить значениями 1, 4, 5, 6 (или 0, 3, 4, 5 — если индексация начинается с нуля), т.к. именно в этих позициях первого массива стоят четные числа.

    Найти максимальный по модулю элемент в массиве с уникальными по модулю значениями

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

    Сортировка выбором

    Используя сортировку выбором отсортировать элементы массива по возрастанию.

    Разложить положительные и отрицательные числа по разным массивам

    Случайные числа в диапазоне от -5 до 5 разложить по двум массивам: в одни помещать только положительные, во второй — только отрицательные. Числа, равные нулю, игнорировать. Вывести на экран все сгенерированные случайные числа и элементы обоих массивов.

    Вставка элемента в произвольное место массива

    Заполнить вводом с клавиатуры численный массив за исключением последнего элемента, вывести его на экран. Запросить еще одно значение и его позицию в в массиве. Вставить указанное число в заданную позицию, подвинув элементы после него.

    Сортировка методом пузырька

    Отсортировать массив, заполненный случайными числами, по возрастанию. Для сортировки использовать метод «пузырька». Вывести на экран массив в исходном и отсортированном виде.

    Читать еще:  Слово в ассемблере

    Количество кратных чисел от 2 до 99 числам от 2 до 9

    В диапазоне натуральных чисел от 2 до 99 определить, сколько из них кратны любому из чисел в диапазоне от 2 до 9.

    Количество положительных, отрицательных и равных нулю элементов массива

    Сгенерировать 20 случайных целых чисел в диапазоне от -5 до 4, записать их в ячейки массива. Посчитать сколько среди них положительных, отрицательных и нулевых значений. Вывести на экран элементы массива и посчитанные количества.

    Сумма и произведение элементов массива

    Заполнить массив вещественных чисел вводом с клавиатуры. Посчитать сумму и произведение элементов массива. Вывести на экран сам массив, полученные сумму и произведение его элементов.

    Заполнение и вывод массивов

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

    Массивы

    Массивы

    П усть нам необходимо работать с большим количеством однотипных данных. Например, у нас есть тысяча измерений координаты маятника с каким-то шагом по времени. Создавать 1000 переменных для хранения всех значений очень. обременительно. Вместо этого множество однотипных данных можно объединить под одним именем и обращаться к каждому конкретному элементу по его порядковому номеру.
    Массив в си определяется следующим образом
    [ ];
    Например,
    int a[100];
    Мы получим массив с именем a, который содержит сто элементов типа int. Как и в случае с переменными, массив содержит мусор.
    Для получения доступа до первого элемента, в квадратных скобках пишем его номер (индекс). Например

    Первый элемент имеет порядковый номер 0. Важно понимать, почему. В дальнейшем будем представлять память компьютера в виде ленты. Имя массива — это указатель на адрес памяти, где располагаются элементы массива.

    Рис. 1 Массив хранит адрес первого элемента. Индекс i элемента — это сдвиг на i*sizeof(тип) байт от начала

    Индекс массива указывает, на сколько байт необходимо сместиться относительно начала массива, чтобы получить доступ до нужно элемента. Например, если массив A имеет тип int, то A[10] означает, что мы сместились на 10*sizeof(int) байт относительно начала. Первый элемент находится в самом начале и у него смещение 0*sizeof(int) .
    В си массив не хранит своего размера и не проверяет индекс массива на корректность. Это значит, что можно выйти за пределы массива и обратиться к памяти, находящейся дальше последнего элемента массива (или ближе).

    Начальная инициализация массива.

    Н апишем простую программу. Создадим массив, после чего найдём его максимальный элемент.

    Разберём пример. Сначала мы создаём массив и инициализируем его при создании. После этого присваиваем максимальному найденному элементу значение первого элемента массива.

    После чего проходим по массиву. Так как мы уже просмотрели первый элемент (у него индекс 1), то нет смысла снова его просматривать.
    Тот же пример, только теперь пользователь вводит значения

    В том случае, если при инициализации указано меньше значений, чем размер массива, остальные элементы заполняются нулями.

    Если необходимо заполнить весь массив нулями, тогда пишем

    Можно не задавать размер массива явно, например

    массив будет иметь размер 3

    Размер массива

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

    Создание динамических массивов будет рассмотрено дальше, при работе с указателями и памятью
    В некоторых случаях можно узнать размер массива с помощью функции sizeof.

    Но это вряд ли будет полезным. При передаче массива в качестве аргумента функции будет передаваться указатель, поэтому размер массива будет невозможно узнать.
    Статические массивы удобны, когда заранее известно число элементов. Они предоставляют быстрый, но небезопасный доступ до элементов.

    Переполнение массива

    П ускай у вас есть такой код

    Здесь цикл for задан с ошибкой. В некоторых старых версиях компиляторов этот код зацикливался. Дело в том, что переменная i располагалась при компиляции сразу за массивом A. При выходе за границы массива счётчик переводился в 1.
    Массивы небезопасны, так как неправильная работа с индексом может приводить к доступу к произвольному участку памяти (Теоретически. Современные компиляторы сами заботятся о том, чтобы вы не копались в чужой памяти).
    Если вы работаете с массивами, то необходимо следить за тем, чтобы счётчик не превышал размер массива и не был отрицательным. Для этого, как минимум,

    • 1. Используйте тип size_t для индексирования. Он обезопасит вас от отрицательных значений и его всегда хватит для массива любого размера.
    • 2. Помните, что массив начинается с нуля.
    • 3. Последний элемент массива имеет индекс (размер массива — 1)
    Читать еще:  Обучение ассемблеру с нуля

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

    Примеры

    Т еперь несколько типичных примеров работы с массивами
    1. Переворачиваем массив.

    Здесь незнакомая для вас конструкция

    макрос. Во всём коде препроцессор автоматически заменит все вхождения SIZE на 10u.
    2. Удаление элемента, выбранного пользователем.

    Удаление элемента в данном случае, конечно, не происходит. Массив остаётся того же размера, что и раньше. Мы просто затираем удаляемый элемент следующим за ним и выводим SIZE-1 элементов.
    3. Пользователь вводит значения в массив. После этого вывести все разные значения, которые он ввёл.
    Пусть пользователь вводит конечное число элементов, допустим 10. Тогда заранее известно, что всего различных значений будет не более 10. Каждый раз, когда пользователь вводит число будем проходить по массиву и проверять, было ли такое число введено.

    4. Пользователь вводит число — количество измерений (от 2 до 10). После этого вводит все измерения. Программа выдаёт среднее значение, дисперсию, погрешность.

    5. Сортировка массива пузырьком

    6. Перемешаем массив. Воспользуемся для этого алгоритмом Fisher-Yates:
    Для i от N-1 до 1 выбираем случайное число j в пределах от 0 до i и меняем местами i-й и j-й элементы.

    BestProg

    Массивы. Часть 3. Примеры решения наиболее распространенных задач с одномерными массивами

    Содержание

    1. Нахождение сумм и произведений элементов массива. Примеры

    Пример 1. Задан массив A , содержащий 100 целых чисел. Найти сумму элементов этого массива. Фрагмент кода, решающего эту задачу

    Перебор всех элементов массива выполняется в цикле for .

    Переменная sum сохраняет результирующее значение суммы элементов массива. Переменная i есть счетчиком, определяющим индекс элемента массива A[i] .

    Пример 2. Задан массив B , содержащий 20 вещественных чисел. Найти сумму элементов массива, которые лежат на парных позициях. Считать, что позиции 0 , 2 , 4 и т.д. есть парными.

    В этом примере выражение

    определяет парную позицию (парный индекс) массива B . Если нужно взять нечетные позиции, то нужно написать

    Пример 3. Задан массив, который содержит 50 целых чисел. Найти сумму положительных элементов массива.

    Пример 4. Задан массив из 50 целых чисел. Найти произведение элементов массива, которые есть нечетными числами.

    Чтобы определить, есть ли элемент массива A[i] нечетным, нужно проверить условие

    Если условие выполняется, то элемент массива есть нечетное число.

    2. Нахождение максимального (минимального) элемента массива. Примеры

    Пример 1. Задан массив из 30 вещественных чисел. Найти элемент (индекс), имеющий максимальное значение в массиве.

    В вышеприведенном примере переменная max содержит максимальное значение. Переменная index содержит позицию элемента, который имеет максимальное значение. В начале переменной max присваивается значение первого элемента массива. Затем, начиная со второго элемента, происходит прохождение всего массива в цикле for . Одновременно проверяется условие

    Если условие выполняется (найден другой максимум), тогда новое значение максимума фиксируется в переменных max и index .

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

    Пример 2. Задан массив содержащий 50 целых чисел. Найти позицию (позиции) элемента, который имеет минимальное значение. Если таких элементов несколько, сформировать дополнительный массив индексов.

    В вышеприведенном листинге сначала ищется минимальное значение min .

    На втором шаге формируется массив INDEXES , в котором число элементов записывается в переменную n . Происходит поиск минимального значения в массиве A с одновременным формированием массива INDEXES .

    На третьем шаге приведен пример, как вывести массив INDEXES в элементе управления listBox1 ( ListBox ).

    3. Сортировка массива методом вставки

    Пример. Пусть дан массив A , содержащий 10 целых чисел. Отсортировать элементы массива в нисходящем порядке с помощью метода вставки.

    4. Поиск элемента в массиве. Примеры

    Пример 1. Определить, находится ли число k в массиве M состоящем из 50 целых чисел.

    Пример 2. Найти все позиции вхождения числа k в массиве M состоящим из 50 целых чисел.

  • Ссылка на основную публикацию
    Adblock
    detector