- •1. Цель работы
- •2. Базовые понятия языка
- •2.1. Алфавит языка Си
- •2.2. Константы
- •2.3. Идентификатор
- •2.4. Объявление переменных
- •2.5. Стандартные типы данных
- •2.6. Данные вещественных типов
- •2.7. Инициализация переменных
- •3. Операции языка си
- •3.1. Арифметические операции
- •3.2. Поразрядные операции
- •3.3. Операции отношения (сравнения)
- •3.4. Логические операции
- •3.5. Операции присваивания
- •3.6. Операция sizeof
- •3.7. Операция условие
- •3.8. Разделитель точка с запятой
- •3.9. Приоритеты операций и порядок вычислений
- •4. Операторы языка си
- •4.1. Составной оператор
- •4.2. Условный оператор
- •4.3. Оператор switch
- •4.4. Оператор break
- •4.5. Оператор for
- •4.6. Оператор while
- •4.7. Оператор do while
- •4.8. Оператор continue
- •4.9. Оператор goto
- •5. Указатели, массивы, строки
- •5.1. Указатели
- •5.2. Массивы
- •5.3. Строки
- •5.6. Двумерные массивы
- •5.7. Инициализация массивов
- •5.8. Связь указателей и массивов
- •6. Функции
- •6.1. Определение и вызов функций
- •6.2. Передача параметров функции main
- •7. Структуры и объединения
- •7.1. Структуры
- •7.2. Объединения (смеси)
- •7.3. Поля битов
- •8. Ввод-вывод
- •8.1. Консольный ввод-вывод
- •8.2. Потоковый файловый ввод-вывод
- •9. Вопросы для самостоятельного изучения
- •10. Порядок выполнения лабораторных работ и содержание отчета
- •11. Литература
5.6. Двумерные массивы
Двумерный массив a[2][3] можно представить в виде таблицы
a[0][0] |
a[0][1] |
a[0][2] |
a[1][0] |
a[1][1] |
a[1][2] |
В памяти массив будет располагаться непрерывно по строкам, т.е. a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], и т.д.
Пример.
#include <stdio.h>
#include <string.h>
int main()
{
char text[4][10];
strcpy(text[0], "Turbo");
strcpy(text[1], "Basic");
strcpy(text[2], "Pascal");
strcpy(text[3], "C");
for (int i=0; i<4; i++)
puts(text[i]);
return 0;
}
Заполнение массива text проиллюстрируем следующей таблицей.
T |
u |
r |
b |
o |
\0 |
|
|
|
|
B |
a |
s |
i |
c |
\0 |
|
|
|
|
P |
a |
s |
c |
a |
l |
\0 |
|
|
|
C |
\0 |
|
|
|
|
|
|
|
|
5.7. Инициализация массивов
Инициализация — это присваивание элементам массива некоторых начальных значений в момент объявления массива. Приведем примеры инициализации одномерных и двумерных массивов.
float f[3]={0,-1.52,23.2};
char s[20]={"Borland C++"};
int a1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int a2[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
В случае с массивом символов нулевой байт будет добавлен автоматически. Инициализации массивов a1 и a2 эквивалентны. Если инициализаторов меньше, то оставшиеся значения элементов массива остаются не определенными.
int a3[3][4]={1,2,3,4,5,6,7,8,9};
int a4[3][4]={{1,2,3},{4,5},{6,7,8,9}};
Массивы a3 и a4 будут заполнены следующим образом:
a3 |
1 |
2 |
3 |
4 |
a4 |
1 |
2 |
3 |
|
|
5 |
6 |
7 |
8 |
|
4 |
5 |
|
|
|
9 |
|
|
|
|
6 |
7 |
8 |
9 |
Допускается объявление и инициализация массива без явного указания его размера. При этом компилятор сам определит необходимое количество элементов массива, включая нулевой байт для строк.
Пример.
char s[]={"Program"};
int mass[]={1,2,3,4};
Можно не указывать размер только в самых левых квадратных скобках.
int a[][3]={1,2,3,4,5,6,7,8,9};
В последнем примере компилятор определит размер массива, как три на три.
