Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Понятие регулярного типа




 

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

A[5] S[k+1] B[3,5].

Пример описания массивов.

float A[20],B[20];

int C[30];

В данном примере описаны одномерные массивы с именами A, B, C, причём массивы A и B имеют элементы типа float, порядковые индексы элементов изменяются от 0 до 19, а массив С – с элементами типа int, и индексами от 0 до 29. В квадратных скобках указывается количество элементов в массиве, нумерация которого всегда с 0 до N-1, где N – количество элементов массива.

Математическим по­нятием, которое привело к появлению в языках программирова­ния понятия "массив", являются матрица и ее частные случаи: вектор-столбец или вектор-строка. Элементы матриц в матема­тике принято обозначать с использованием индексов. Сущест­венно, что все элементы матриц либо вещественные, либо целые и т.п. Такая "однородность" элементов свойственна и массиву, определение которого описывает тип элементов, имя массива и его размерность, т.е. число индексов, необходимое для обозна­чения конкретного элемента. Кроме того, в определении указы­вается количество значений, принимаемых каждым индексом.

Например, int a[10]; определяет массив из 10 элементов а[0], а[1],..., а[9]. float Z[13][6]; определяет двумерный массив, пер­вый индекс которого принимает 13 значений от 0 до 12, второй индекс принимает 6 значений от 0 до 5. Таким образом, элемен­ты двумерного массива Z можно перечислить так:

Z[0][0], Z[0][l], Z[0][2],...,Z[12][4], Z[12][5]

В соответствии с синтаксисом Си в языке существуют только одномерные массивы, однако элементами одномерного массива, в свою очередь, могут быть массивы. Поэтому двумерный мас­сив определяется как массив массивов. Таким образом, в при­мере определен массив Z из 13 элементов-массивов, каждый из которых, в свою очередь, состоит из 6 элементов типа float.

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

Ограничений на размерность массивов, т.е. на число индек­сов у его элементов, в языке Си теоретически нет. Стандарт языка Си требует, чтобы транслятор мог обрабатывать опреде­ления массивов с размерностью до 31. Однако чаще всего ис­пользуются одномерные и двумерные массивы. Продемон­стрируем на простых вычислительных задачах некоторые прие­мы работы с массивами.

Пример:

Вычисление среднего и дисперсии. Введя значение n из диапазона (0<n<=100) и значения n первых элементов массива х[0], х[1],...,х[n-1], вычислить среднее и оценку дисперсии зна­чений введенных элементов массива. Задачу решает следующая программа:

 

/* Вычисление среднего и дисперсии */

#include <stdio.h>

void main ()

{ /*n - количество элементов */

int i,j,n; /*b-среднее,d-оценка дисперсии; */

float a,b,d,x[100],e; /*а,е-вспомогательные*/

while (1) {

printf("\n Введите значение n=");

scanf("%d", &n);

if(n > 0 && n <= 100) break;

printf("\n Ошибка! Необходимо 0<n<101 "); }

/* Конец цикла ввода Значения n */

printf("\n Введите значения элементов: \n");

for(b=0.0,i=0; i<n; i++) {

printf("x[%d] = ", i);

scanf("%f", &x[i]);

b+=x[i];/* Вычисление суммы элементов */ }

b/=n;/* Вычисление среднего */

for(j=0,d=0.0; j<n; j++) {

a=x[j]-b;

d+=a*a;

} /* Оценка дисперсии*/

d/=n;

printf("\n Среднее =%f, дисперсия=%f",b,d);

}

В программе определен массив х со 100 элемента­ми, хотя в каждом конкретном случае используются только пер­вые n из них. Ввод значения n сопровождается проверкой допустимости вводимого значения. В качестве условия после while записано заведомо истинное выражение 1, поэтому выход из цикла (оператор break) возможен только при вводе правильного значения n, удовлетворяющего неравенству 0<n<101. Следующий цикл обеспечивает ввод n элементов массива и получение их суммы (b). Затем в цикле вычисляется сумма d квадратов отклонений эле­ментов от среднего значения. Возможен следующий результат работы программы:

Введите значение n=5

Введите значение элементов:

х[0]=4

х[1]=5

х[2]=6

х[3]=7

х[4]=8

Среднее=6.000000, дисперсия=2.000000

 

Найти сумму

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

double a[10][5];

for(s=0.0, j=0; j<10; j++)

{

for(p=1.0,c=0.0, i=0; i<5; i++)

{

p*=a[j][i]; c+=a[j][i];

}

s+=c+p;
}

При работе с вложенными циклами следует обратить внима­ние на правила выполнения операторов break и continue. Каж­дый из них действует только в том операторе, в теле которого он непосредственно использован. Оператор break прекращает выполнение ближайшего внешнего для него оператора цикла. Оператор continue передает управление на ближайшую внеш­нюю проверку условия продолжения цикла.

Для иллюстрации рассмотрим фрагмент другой программы
для вычисления суммы произведений элементов строк той же
матрицы:

double a[10][5];

for (j=0,s=0.0; j<10; j++)

{

for (i=0,p=1.0; i<5; i++)

{

if (a[j][i] == 0.0) break;

p*=a[j][i];

}

if (i <5) continue;

s+=p;

}

Внутренний цикл по i прерывается, если обнару­живается нулевой элемент матрицы. В этом случае произведе­ние элементов столбца заведомо равно нулю, и его не нужно вычислять. Во внешнем цикле проверяется значение i. Если i<5, т.е. элемент a[j][i] оказался нулевым, то оператор continue передает управление на ближайший оператор цикла, и, таким образом, не происходит увеличение s на величину "недосчитанного" значения р. Если внутрен­ний цикл завершен естественно, то i равно 5, и оператор continue не может выполняться.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных