Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНА РОБОТА 5.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
207.87 Кб
Скачать

Лабораторна робота №5

Тема: Робота з одновимірними масивами в мові С

Мета: ознайомлення з поняттям складеного типу даних – одновимірним масивом. Набуття практичних навичок з типових задач обробки одновимірних масивів.

Завдання для практичного виконання:

1.

  1. В одновимірному масиві визначити суму від’ємних елементів.

  2. Знайти добуток елементів, розташованих між найбільшим та найменшим елементами.

2.

  1. В одновимірному масиві визначити суму додатних елементів.

  2. Знайти добуток елементів, розташованих між максимальним по модулю та мінімальним по модулю елементами масиву.

3.

  1. В одновимірному масиві визначити добуток елементів з парними номерами.

  2. Визначити суму елементів, розташованих між першим та останнім нульовими елементами.

4.

  1. В одновимірному масиві визначити суму елементів з непарними номерами.

  2. Визначити суму елементів, розташованих між першим та останнім від’ємними елементами.

5.

  1. В одновимірному масиві визначити максимальний елемент.

  2. Визначити суму елементів, розташованих до першого додатного елемента.

6.

  1. В одновимірному масиві визначити мінімальний елемент.

  2. Визначити суму елементів, розташованих між першим та останнім додатними елементами.

7.

  1. В одновимірному масиві визначити номер максимального елемента масиву.

  2. Визначити добуток елементів, розташованих між першим та останнім нульовими елементами.

8.

  1. В одновимірному масиві визначити номер мінімального елемента масиву.

  2. Визначити суму елементів, розташованих між першим та другим від’ємними елементами.

9.

  1. В одновимірному масиві визначити максимальний по модулю елемент масиву.

  2. Визначити суму елементів, розташованих між першим та другим додатними елементами.

10.

  1. В одновимірному масиві визначити мінімальний по модулю елемент масиву.

  2. Визначити суму елементів, розташованих між першого елемента рівного нулю.

11.

  1. В одновимірному масиві визначити номер мінімального по модулю елемента.

  2. Визначити суму елементів, розташованих після першого від’ємного елемента.

12.

  1. В одновимірному масиві визначити номер максимального по модулю елемента.

  2. Визначити суму елементів, розташованих після першого додатнього елемента.

13.

  1. В одновимірному масиві визначити кількість елементів в діапазоні від А до В.

  2. Визначити суму елементів, розташованих після максимального елемента.

14.

  1. В одновимірному масиві визначити кількість елементів масиву, рівних 0.

  2. Визначити суму елементів, розташованих після мінімального елемента.

15.

  1. В одновимірному масиві визначити кількість елементів, більших С.

  2. Визначити добуток елементів, розташованих після найбільшого по модулю елемента.

16.

  1. В одновимірному масиві визначити кількість від’ємних елементів.

  2. Визначити суму модулів елементів, розташованих після мінімального по модулю елемента.

17.

  1. В одновимірному масиві визначити кількість елементів, абсолютне значення яких належить від 11.4 до 23.8.

  2. Вивести на екран елементи, що знаходяться між першим від’ємним та останнім елементами.

Приклад1. В одновимірному масиві визначити мінімальний та максимальний елементи масиву.

#include <stdio.h> /*містить функції вводу/виводу*/

#include <conio.h> /*містить функції для роботи з екраном*/

void main( )

{

clrscr(); /* функція очищення екрану*/

int a[10],i,min,max; /*визначення масиву та змінних*/

puts("vvedite elementy massiva"); /*виведення рядка тексту на екран*/

for(i=0;i<10;i++) /* організація циклу введення елементі масиву

{ з екрану */

printf("\nvvedite a[%d]=",i);

scanf("%d",&a[i]);

}

puts("\nmassyv");

for(i=0;i<10;i++) /* організація циклу виведення елементів масиву

printf("a[%d]=%d; %c",i,a[i],(i==4)?'\n':' '); на екран */

printf("\n\n");

puts("\n\nresultat");

min=a[0]; max=a[0]; /* присвоєння змінним min та max значення першого елемента масиву */

for(i=1;i<10;i++) /* організація циклу перебору елементів масиву для */

{ /*визначення мінімального та максимального елементів масиву */

if (a[i]>max) /*якщо елемент a[i] більше значення max */

max=a[i]; /* зберігається значення максимального елемента */

if (a[i]<min) /*якщо елемент a[i] менше значення min */

min=a[i]; /* зберігається значення мінімального елемента */

}

printf("\n minimum=%d",min); /* виведення результатів */

printf("\n maximum=%d",max);

getch(); /*функція очікування введення символу з клавіатури (для */ /*затримки вікна виводу) */

}

Результати виконання програми

vvedite elementy massiva

vvedite a[0]=2

vvedite a[1]=5

vvedite a[2]=-6

vvedite a[3]=4

vvedite a[4]=-7

vvedite a[5]=1

vvedite a[6]=3

vvedite a[7]=9

vvedite a[8]=-5

vvedite a[9]=6

massyv

a[0]=2; a[1]=5; a[2]=-6; a[3]=4; a[4]=-7;

a[5]=1; a[6]=3; a[7]=9; a[8]=-5; a[9]=6;

resultat

minimum=-7

maximum=9

Массивы

Представьте себе группу людей, стоящих в очереди, например, перед входом в кинотеатр. Единственная вещь, которая объединяет этих людей,— это то, что они стоят в одной очереди. Тот факт, что кто-то из них занимает первую позицию, не говорит нам ничего об этом человеке. У нас нет оснований думать, что он проворнее, выше, или богаче, чем любой другой из стоящих за ним.

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

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

Вы уже создавали и использовали массивы в форме строк. Строка и в самом деле является массивом, состоящим из отдельных символов. При отображении строки сообщения на дисплее функция puts() обращается с массивом как с группой, но к каждому символу можно обратиться и в отдельности.

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

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

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

int temps[31];

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

При определении массива одновременно определяются и его отдельные элементы, как это показано на рис.10.2. К первому элементу массива temps обращаются как к temps[0], ко второму— как к temps[1], к третьему— как к temps[2] и так далее. Заметьте, что нумерация элементов массива начинается с 0, так что массив, состоящий из пяти элементов, показан на рисунке как массив, содержащий элементы с номерами от 0 до 4. Элемент с номером temp[5] не существует. Число, заключенное в квадратные скобки, называется индексом (subscript), и про элементы массива можно говорить как про «нулевой элемент массива temps», «первый элемент массива temps» и так далее. Рис. 10.1. Синтаксис определения массива

Рис. 10.2. При определении массива также определяются и составляющие его элементы

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

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

char name[5];

С помощью функций gets() и puts() можно вводить и выводить весь массив символьных данных как единое целое, но при работе с другими типами данных эти операции выполняются с каждым элементом массива отдельно.

Ввод значений в массив

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

int temps[5] = {45, 56, 12, 98, 12};

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

temps[0] 45

temps[1] 56

temps[2] 12

temps[3] 98

temps[4] 12

Для инициализации подобного массива используется соответствующая инструкция перед main(). Подобная инициализация возможна и внутри main(), или другой функции, но в этом случае массив должен быть описан как статический:

int temps[5] = {45, 56, 12, 98, 12};

main()

{

static float prices[3] = {23.45, 34.56, 12.34};

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

temps[0] = 45;

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

main()

{

int temps[31];

int index;

for (index = 0; index 31; index++)

{

printf("Введите значение

температуры #%d: ", index);

scanf("%d", &temp[index]);

}

}

Переменная index использована здесь для того, чтобы определить количество повторений цикла. В нашем случае цикл будет выполнен 31 раз, по одному на каждый элемент массива. При каждом повторе цикла на экране будет появляться подсказка:

Введите значение температуры #N

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

Обратите внимание, что количество повторов определяется увеличением значения переменной index от 0 до 30, а не до 31, поэтому данное значение может использоваться одновременно и как индекс для определения номера текущего элемента массива (которые пронумерованы от 0 до 30). Когда переменная index имеет значение 0, элемент temps[index] на самом деле является элементом temps[0]. Таким образом, значение, которое мы вводим в элемент temps[index] с помощью функции scanf(), присваивается первому элементу с именем temps[0]. С очередным выполнением цикла for значение переменной index возрастает, и при следующих повторах функция scanf() вводит значение в новые элементы массива. Этот процесс проиллюстрирован в табл.10.1.

Таблица 10.1. Использование цикла для увеличения индекса массива.

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

Рис. 10.3. Разница между индексом и значением элемента массива

рис.10.3. Индекс элемента имеет значение 0, а переменная temps[0] равна75. Как мы уже поясняли это на примере очереди перед кинотеатром, значение индекса переменной не связано со значением переменной. Содержимое следующей переменной temps[1] может быть больше, меньше или равно значению переменной temps[0].

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

for (index = 0; index < 31; index++)

temps[index] = 0;

Используя массив, можно ввести любое количество элементов, внеся соответствующие изменения в определение массива и условие цикла.