Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Си.doc
Скачиваний:
3
Добавлен:
15.11.2019
Размер:
2.72 Mб
Скачать

Int vect[5];

float matr[2][3];

char str[20];

Описаны:

  • одномерный массив целых чисел (вектор) vect, состоящий из пяти элементов,

  • двумерный массив (матрица) вещественного типа matr, имеющая две строки и три столбца,

  • строка символов str из 20 элементов.

Как видно, при описании массива в Си каждая его размерность записывается в отдельных скобках, а не перечисляется через запятые, как в Паскале. Размеры массива можно задать именованной константой или указать в директиве #define – это считается хорошим стилем программирования:

#define count 5

#define row 2

#define col 3

#define n_str 20

Int vect[count];

float matr[row][col];

char str[n_str];

Индексы элементов массивов в Си всегда начинаются с нуля, поэтому, например, описанный вектор vect имеет следующие элементы:

Vect[0] vect[1] vect[2] vect[3] vect[4]

а двумерный массив matr – 6 следующих элементов:

matr[0][0] matr[0][1] matr[0][2]

matr[1][0] matr[1][1] matr[1][2]

То есть, первая строка и первый столбец двумерного массива имеют индекс 0.

Элементы массива можно использовать во всех выражениях, операторах и функциях, определенных для их типа.

Начальные значения элементам массива в Си можно задавать при их описании (инициализировать массив), при этом размеры одномерных массивов (векторов) в квадратных скобках можно не указывать – для их хранения будет отведено столько ячеек оперативной памяти, сколько значений указано в фигурных скобках:

int vect[] = {-5, 3, -2, 8, 1};

float matr[2][3] = {{0.2, -1.5, 3.14},

{-2.73, 25.54, 0.89}};

Если задано значений меньше, чем описано элементов вектора, то недостающие элементы инициализируются нулями:

int vect[5] = {-5, 3, -2};

Последние два элемента вектора vect инициализируются нулями.

Еще раз необходимо обратить внимание на то, что, в отличие от Паскаля, при описании и при работе с многомерными массивами в Си каждый индекс элемента массива заключается в отдельные квадратные скобки:

matr[1][2]=0.89;

Если использовать запись matr[1,2], то она будет интерпретироваться как matr[2]. Согласно правилам языка Си, значением всего выражения в скобках является результат вычисления последнего выражения, перед которым стоит запятая.

В отличие от Паскаля, конкретные размеры массива в Си можно задать с клавиатуры до его описания:

int row, col;

printf(“\n row=”);

scanf(“%d”, &row);

printf(“\n col=”);

scanf(“%d”, &col);

float matr[row][col];

Пример: ввести с экрана элементы целочисленного массива matr33, вывести его на экран, транспонировать (заменить строки соответствующими столбцами) и снова вывести на экран:

#include <stdio.h>

#include <conio.h>

#include <math.h>

Int main()

{

const int row=3, col=3;

Int temp;

Int matr[row][col];

printf(“\nВведите 3 элемента нулевой строки через пробелы: ”);

scanf(“%d%d%d”, &matr[0][0], &matr[0][1], &matr[0][2]);

printf(“\nВведите 3 элемента первой строки через пробелы: ”);

scanf(“%d%d%d”, &matr[1][0], &matr[1][1], &matr[1][2]);

printf(“\nВведите 3 элемента второй строки через пробелы: ”);

scanf(“%d%d%d”, &matr[2][0], &matr[2][1], &matr[2][2]);

printf(“\nВведенный массив:”);

printf(“\n%5d%5d%5d”, matr[0][0], matr[0][1], matr[0][2]);

printf(“\n%5d%5d%5d”, matr[1][0], matr[1][1], matr[1][2]);

printf(“\n%5d%5d%5d”, matr[2][0], matr[2][1], matr[2][2]);

// транспонируем матрицу

temp=matr[0][1];

matr[0][1]=matr[1][0];

matr[1][0]=temp;

temp=matr[0][2];

matr[0][2]=matr[2][0];

matr[2][0]=temp;

temp=matr[1][2];

matr[1][2]=matr[2][1];

matr[2][1]=temp;

// снова выводим ее на экран

printf(“\nТранспонированный массив:”);

printf(“\n%5d%5d%5d”, matr[0][0], matr[0][1], matr[0][2]);

printf(“\n%5d%5d%5d”, matr[1][0], matr[1][1], matr[1][2]);

printf(“\n%5d%5d%5d”, matr[2][0], matr[2][1], matr[2][2]);

printf(“\n”);

return 0;

}