Similar presentations:
Структура данных - массив
1.
Лекция 9.Структура данных- массив
Одномерные массивы
Описание одномерного массива
Индексные переменные
Ввод-вывод одномерных массивов
Стр. учебного пособия 80-87
2.
Одномерные массивы• В математике одномерному массиву
соответствует n-мерный вектор,
например:
• Х={xi}, i = 1… n,
• где хi - компонента (координата) вектора;
• i - номер компоненты;
• n - число компонент.
3.
Понятие массиваМассив представляет собой упорядоченное множество однотипных
элементов
Общий вид описания массива
<тип элементов> имяМассива [число элементов];
При описании массива необходимо указать:
Имя массива;
число элементов;
тип элементов.
Доступ к каждому элементу массива осуществляется с помощью
индексов.
Индексы задают порядковый номер элемента, к которому осуществляется
доступ.
Число индексов определяет структуру массива:
если используется один индекс, то такой массив называется одномерным,
если
два индекса - двухмерным, и т.д.
В общем случае размерность массива может быть произвольной.
В языке
Си
первый элемент массива имеет индекс ноль
4.
Интерпретация одномерногомассива
• Описание задается следующим образом:
Тип элементов ИмяМассива[размер];
• Компилятор отводит под массив память
размером (sizeof(тип)*размер) байтов
0
1
2
3
4
5
6
7
8
9
5.
Примеры описания одномерного массива• main()
{
int dat[4]={ 5, 8, -2, 11};
……..
• Описание такого вида массива приведет к
созданию в памяти компьютера следующей
структуры с именем dat:
5
8
-2
11
0
1
2
3
6.
Примеры описания одномерногомассива
main()
{
float kom[]={ 3.5, 6 , -1.1};
……..
Описание такого вида приведет к появлению в
памяти компьютера массива с именем kom:
3.5
0
6
1
-1.1
2
7.
Примеры описания одномерногомассива
main()
{
int Ar[5];
………..
• Такое описание приведет к появлению в
памяти компьютера массива с именем Ar
0
1
2
3
4
8.
Индексные переменные• Выбор отдельного элемента из массива осуществляется с
помощью индексной переменной, которая задается
следующим образом:
ИмяМассива[i]
- индексная переменная (элемент массива).
• Здесь ИмяМассива - имя массива;
• i - индекс (номер элемента массива).
9.
Индексные переменныеВ качестве индекса можно использовать:
• целые константы, например
ИмяМассива[2];
• переменные целого типа (int), например
ИмяМассива[к]
• индексные выражения, например
ИмяМассива[2*n+1]
Замечание.
Индексные выражения должны быть целого типа.
10.
Где и когда применяются индексные переменные в
программе?
Индексная переменная, как и простая переменная, может стоять в левой части
оператора присваивания, например:
х[3]=2.5; //четвертому элементу массива присваивается значение 2.5
или в правой части
H=x[i];// значение i-го элемента копируется в переменную H
• В логическом выражении оператора if, например:
if ( х[k]>0 ) x[k]=-1;
Содержимое к- ой ячейки массива х заменится на -1, если текущее значение
в ней положительное.
• В операторах ввода-вывода:
scanf(“% d”, & x[2]); или
cin >> x[2];
с клавиатуры будет затребовано целое число для записи в третью ячейку
массива х.
printf(“%d”, x[i]); или
cout << x[i];
на экран будет выведено значение числа, лежащего в ячейке
с номером, совпадающим со значением переменной i.
11.
Ввод одномерных массивов• ПРАВИЛО:
Ввод значений для элементов массива
осуществляется поэлементно с помощью
операторов
scanf или cin
работающего в теле оператора цикла(например
for...),
в котором в качестве параметра используется
индекс элементов массива.
12.
Ввод значений элементов массива• Пример 1. Организовать ввод с клавиатуры массива:
A = (1.2, 5, -6.8, 14).
Необходимо сделать описание массива и индекса.
void main()
{ float A [4] ;
int i;
• В программе ввод массива рекомендуется организовать в виде
диалога, поместив перед циклическим оператором оператор вывода ,
в котором выводится поясняющее сообщение, например:
• printf(“Введите четыре элемента в массив А\n”);
for( i = 0; i<4; i++)
{ scanf(“%f”,&A[i]); } или cin >> A[i];
Значения параметра цикла i следует начинать с нуля, так как
элементы массива нумеруются с нуля:
0
1
2
3
1.2
5
-6.8
14
13.
Ввод элементов массива• В момент работы оператора scanf или cin
программа останавливается и на клавиатуре через
один или несколько пробелов набираются значения
элементов массива
и нажимается клавиша
[Enter]:
1.2 5 -6.8 14 [Enter]
• Замечание. Элементы массива можно вводить в
«столбик», если после ввода каждого элемента
нажимать клавишу [Enter].
• 1.2 [enter]
• 5 [enter]
• -6.8 [enter]
• 14 [enter]
14.
Заполнение массива случайными числами• В учебных целях , чтобы избежать необходимости придумывать значения
массива самостоятельно, целесообразно использовать функцию rand(),
генерирующую случайные числа:
• Примеры обращения к функции rand():
1)
D[5]=rand();
Будет сгенерировано целое положительное число из диапазона (0; 32625)
и записано в шестую ячейку массива D.
2)
Т[2]=rand()%100;
будет сгенерировано целое двузначное число и записано в третью
ячейку массива Т.
3)
D[1]=rand()/10.0;
генерируется вещественное положительное число для ячейки
4)
Т[2]=rand()%100-50;
случайное число из диапазона(-50;50)
D[1].
15.
Заполнение массива случайными числами• Пример . Организовать заполнение массива А случайными
вещественными числами:
Необходимо сделать описание массива и индекса.
void main()
{ float A [40] ;
int i;
for( i = 0; i<40; i++) //запуск цикла
A[i]=rand()/ 100.1; // вещественными случайными
Значения индекса i следует начинать с нуля, так как ячейки
массива нумеруются с нуля:
0
1
2
3 …
39
16.
вывод одномерных массивов• ПРАВИЛО:
вывод значений элементов массива
осуществляется поэлементно с помощью
операторов
cout или printf
работающего в теле оператора цикла for...,
в котором в качестве параметра используется
индекс элементов массива.
17.
Пример вывода элементов массива• Пример . Организовать вывод элементов массива А на экран таким
образом, чтобы все элементы располагались на одной строке экрана (
массив заполнен вещественными числами).
В программе надо записать следующие операторы:
for ( i = 0; i<40; i++)
{ printf(“%5.1f “,A[i]); } или
cout << A[i]<<“ “;
printf(“\n”);
• Вид выводимого массива на экране:
1.2 5.0 -6.8 14.0 ……
• Оператор printf(“\n”); без списка имен служит для перевода
курсора в начало следующей строки экрана.
• Между числами на экране будет оставлено столько пробелов,
сколько их стоит в формате “%5.1f “
18.
Фрагмент программы с выводом элементовмассива на экран
Int _tmain(…)
{ float A [14] ; //описание массива
int i;
//описание переменной для индекса
for( i = 0; i<14; i++)
A[i]=rand()/ 100.1; // заполнение вещественными случайными
//здесь идет работа с массивом….
for ( i = 0; i<14; i++)
printf(“%5.1f \n“,A[i]); //вывод элементов массива
…
}
Значения элементов массивы будут выведены в “столбик”
19.
Фрагмент программы с заполнением и одновременнымвыводом элементов массива на экран
Int _tmain(…)
{ float A [4] ; //описание массива
int i;
//описание переменной для индекса
for( i = 0; i<4; i++)
{ A[i]=rand()/ 100.1; /* заполнение вещественным
случайным числом */
printf(“%5.1f
\n“,A[i]);
}
…//обработка массива
}
programming