Страница 61 из 69
вы, и они описываются именно так, как вы себе и представляли:
type name[size1][size2]...[sizeN]
(тип имя [размер1][размер2]...[размерN])
Рассморим следующую программу, которая определяет два дву-
мерных массива, а затем выполняет их матричное умножение:
main()
{
int a[3][4] = {{ 5, 3, -21, 42},
{44, 15, 0, 6},
{97 , 6, 81, 2}};
int b[4][2] = {{22, 7},
{97, -53},
{45, 0},
{72, 1} };
int c[3][2],i,j,k;
for (i=0; i
Программа, обращающаяся к функции imin, может выглядеть так:
main()
{
#define VSIZE 22
int i,vector[VSIZE];
for (i = 0; i < VSIZE; i++) {
vector[i] = rand();
printf("vector[%2d] = %6d\n",i,vector[i]);
}
i = imin(vector,VSIZE);
printf("minimum: vector[%2d] = %6d\n",i,vector[i]);
}
Может возникнуть вопрос: что именно передается в imin? В
функцию imin передается начальный адрес массива vector. Это озна-
чает, что если вы производите какие-либо изменения массива list в
imin то, те же изменения будут произведены и в массиве vector.
Например, вы можете написать следующую функцию :
void setrand(int list[],int size);
{
int i;
for (i = 0; i < size; i++) list[i] = rand();
}
Теперь для инициализации массива vector вы можете написать в
main setrand(vector,VSIZE). Следует заметить, что массиву vector
будут присвыоены некие случайные числа, являющиеся результатом
работы датчика случайных чисел, эмулируемого функцией Турбо Си
rand().
А как передавать многомерный массив? Имеется ли такая воз-
можность? Предположим, вы хотите модифицировать setrand для рабо-
ты с двумерным массивом. Вы должны написать приблизительно следу-
ющее:
void setrand(int matrix[][CSIZE],int rsize)
{
int i,j;
for (i = 0; i < rsize; i++) {
- 507,508 -
for (j = 0; j < CSIZE; i++)
matrix[i][j] = rand();
}
}
Где CSIZE - это глобальная константа, определяющая второе
измерение массива. Другими словами, любой массив, передаваемый
setrand получит второе измерение массива, равный CSIZE.
Однако, есть еще одно решение. Предположим, у вас есть мас-
сив matrix[15,7], который вы хотите передать в setrand. Если вы
используете следующее описание:
setrand(int list[],int size)
обращение к функции будет иметь вид:
setrand(matrix,15*7);
Массив matrix будет рассматриваться функцией setrand как од-
номерный массив, содержащий 105 элементов (15 строк * 7 столб-
цов), с которым будут произведены необходимые вам действия.
Структуры
-----------------------------------------------------------------
Массивы и указатели позволяют вам создавать список элементов
одного типа. А что, если вы хотите создать нечто, содержащее эле-
менты различного типа? Для этого используются СТРУКТУРЫ.
Структура - это конгломерат элементов различного типа. До-
пустим, вы хотите сохранить информацию о звезде: ее имя, спект-
ральный класс, координаты и прочее. Вы можете описать это следую-
щим образом:
typedef struct {
char name[25];
char class;
short subclass;
float decl,RA,dist;
} star ;
Здесь определена структура (struct) типа star. Сделав такое
описание в начале своей програмы, вы можете дальше использовать
этот определенный вами тип данных:
- 509,510 -
main()
{
star mystar;
strcpy(mystar.name,"Эпсилон Лебедя");
mystar.class = 'N';