Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ЛАБОРАТОРНАЯ РАБОТА № 5
Обработка одномерных массивов
Цель работы - овладение практическими навыками работы с массивами, особенностями их ввода и вывода, приобретение дальнейших навыков по организации программ циклической структуры с использованием приемов программирования.
Массив в языках программирования представляет собой конечную последовательность пронумерованных элементов одинакового типа. Номер элемента называют его индексом. Основное свойство массива - все его элементы одновременно присутствуют в оперативной памяти, одинаково доступны и могут обрабатываться в любом порядке.
Массив объявляется указанием типа данных (int, float, double, char и др.), которые предполагается в нем хранить, имени массива и количества элементов. Количество элементов (размер массива) заключается в квадратные скобки: тип имя[размер];
Примеры объявления массивов:
char text[10]; /* массив text из 10 символов */
int А[50]; /* массив А из 50 целых чисел */
Для обращения к элементу массива указывается имя массива и индексы элемента в квадратных скобках, например, text[0], A[j], A[j+1] .В языке Cи индексы элементов массива всегда начинаются с нуля. В приведенном примере text[0] первый элемент массива. Последний элемент массива будет иметь индекс на 1 меньше его размера (n-1, где n размер массива).
Выше были приведены примеры одномерных массивов. Одномерный массив (массив с одним индексом) часто называют вектором. Элемент одномерного массива обозначается именем массива, за которым в квадратных скобках указывается индекс элемента.
Для организации последовательной обработки массивов удобно использовать оператор цикла for. В этом случае индекс элемента массива является параметром цикла.
Общий вид записи оператора цикла for:
for ( выражение 1 ; выражение 2 ; выражение 3 )
{тело цикла;}
Выражение 1 обычно используется для установления начального значения переменных, управляющих циклом (параметров).
Выражение 2 - это выражение, определяющее условие, при котором тело цикла будет выполняться.
Выражение 3 определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла.
Схема выполнения оператора for:
1. Вычисляется выражение 1.
2. Вычисляется выражение 2.
3. Если значение выражения 2 отлично от нуля (истина), выполняется тело цикла.
4. Вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.
Существенно то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.
Пример:
for (i=1; i<10; i++) {b=i*i;}
/* i - параметр цикла; 1, 10 - начальное и конечное значения параметра цикла соответственно Они могут быть записаны константами или выражениями.
b=i*i - тело цикла.
i++ - изменение параметра цикла. */
Пример выполнения работы
Вычислить на ЭВМ наибольший элемент массива X[30] и его порядковый номер. Проверить правильность программы на тесте при количестве элементов N=10. При выполнении задания необходимо использовать прием нахождения наибольшего. Для этого перед циклом необходимо задать начальное значение наибольшего, равное первому элементу массива, а в цикле сравнивать наибольший с текущем элементом массива; в том случае, если текущий элемент больше наибольшего из предыдущих, то считать его наибольшим. Для нахождения порядкового номера наибольшего элемента массива необходимо перед циклом задать его начальное значение, равное 1, а в цикле всякий раз, когда текущий элемент массива больше наибольшего, считать номером наибольшего номер текущего элемента массива.
Схема алгоритма решения
Блок 1 осуществляет ввод значения N (количество элементов в массиве). В цикле, представленном блоками 2 и 3, вводятся элементы массива X, состоящего из N элементов. Блок 4 задает начальные значения переменных max_X (максимальный элемент массива) и max_N (номер максимального элемента).
Блок 5 организует цикл, перебирающий элементы массива, начиная с первого до последнего.
Блоки 6 и 7 находят наибольший элемент массива и его порядковый номер.
Блок 8 за циклом выводит результаты на печать.
Программа на языке Си :
# include <stdio.h>
main()
{int i, max_N, N=30;
float max_X , X[N];
printf (“ВВЕДИТЕ ЗНАЧЕНИЕ N”);
scanf (“%d”, &N);
for (i=0; i<N; i++)
scanf (“%f”, &X[i]);
max_X=X[0]; max_N=0;
for (i=1; i<N; i++)
IF X[i]> max_X
{ max_X=X[i];
max_N=i; }
printf (“max_X =%f max_N=%d”, max_X, max_N);
}
Задания для самостоятельной подготовки
1. Изучить:
- способы описания размеров массивов на языке программирования;
- способы ввода и вывода массивов;
- реализация на конкретном языке программирования приемов накопления суммы или произведения, запоминания результатов, нахождение наибольшего и наименьшего.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи.
4. Подготовить тест для проверки программы.
Задание к работе
1. Обработать на ЭВМ массив в соответствии с вариантом задания, указанного в таблице.
2. Проверить правильность выполнения программы с помощью тестового варианта исходных данных.
Таблица заданий
№ |
Массив |
Действия |
Условия |
1. |
X(100) |
Вычислить сумму и количество элементов массива X |
0xi1 |
2. |
A(80) |
Вычислить среднее арифметическое значение элементов массива А |
ai>0 |
3. |
X(70) |
Переписать элементы массива Х, удовлетворяющие указанному условию в массив Y и подсчитать их количество. |
-1xi1 |
4. |
В(50) |
Определить максимальный элемент массива В и его порядковый номер |
bi>0 |
5. |
C(40) |
Определить минимальный элемент массива С и его порядковый номер |
сi<0 |
6. |
D(80) |
Найти максимальный и минимальный элементы массива D и поменять их местами |
|
7. |
Y(20) |
Вычислить среднее геометрическое элементов массива Y |
yi>0 |
8. |
Z(30) |
Расположить в массиве R сначала положительные, а затем отрицательные элементы массива Z |
|
9. |
N(50) |
Определить сумму элементов массива N, кратных трем |
ni /3*3 = ni |
10. |
X(N) |
Вычислить сумму и количество элементов массива X |
xi>0, N10 |
11. |
A(N) |
Найти среднее геометрическое элементов массива А |
ai>0, N10 |
12. |
X(N) |
Переписать в массив Y подряд положительные элементы массива Х |
xi>0, N10 |
13. |
X(N) |
Переписать подряд в массив Y положительные и в массив Z отрицательные элементы массива Х |
N 10 |
14. |
B(K) |
Определить максимальный элемент массива В и его порядковый номер |
xi<0, N10 |
15. |
C(K) |
Определить минимальный элемент массива C и его порядковый номер |
-1xi1, K10 |
Контрольные вопросы
1. Указать особенности программ, использующих массивы.
2. Какие операторы языка можно использовать для описания массивов?
3. В чем состоит особенность организации цикла при обработке массивов?
4. В чем состоит особенность использования приемов программирования при обработке массивов?
5. Указать особенности ввода и вывода массивов.
i =1 , n
Тело цикла
8
7
6
5
4
1
конец
max_X, max_I
max_N=i
max_X=X[i]
нет
да
X[1]>max_X
i=1..N
max_N=0
max_X=X[0]
ввод N (кол-во эл-ов)
начало
2
3
ввод
элементов массива X[i]
i=0..N