
- •1.Базовые элементы языка с. Алфавит и словарь языка
- •2. Основные типы данных. Классификация их типов. Модификация базовых типов.
- •3. Константы.
- •4. Переменные.
- •5. Структура с - программы. Понятие локальных и глобальных переменных. Функция main().Директивы препроцессора (#include и #define). Комментарии.
- •6. Операции языка с. Арифметические, логические операции. Поразрядные операции.
- •7. Операции языка с. Операция присваивания и отношения. Операция определения размера. Оператор последовательного вычисления.
- •8. Операции языка с. Условная операция. Операция (), операция [].
- •9. Приоритет операций и порядок вычислений.
- •11. Ввод-вывод символов
- •12. Форматированный ввод-вывод. Модификаторы формата. Спецификаторы преобразования. Подавление ввода.
- •13. Операторы языка с. Условные операторы (if и switch).
- •16. Одномерные массивы.
- •17. Строковый литерал. Чтение и запись строк.
- •18. Двухмерные массивы. Массивы строк.
- •20.Способы доступа к элементам массива
- •21. Понятие указателя. Инициализация указателей.
- •22. Указательные переменные. Операции получения адреса (&) и раскрытия ссылки(*).
- •23. Указательные выражения. Адресная арифметика.
- •Динамическое выделение памяти для массивов.
- •Функции. Определения функций. Оператор return.
- •Тип_результата id_функции (список);
- •Функции. Прототипы функций.
- •Тип_результата id_функции (список);
- •Функции. Вызов функций: вызов по значению и по ссылке.
- •Тип_результата id_функции (список);
- •Передача массива в функцию.
- •Классы памяти. Область видимости.
- •Аргументы функции main(): argv и argc.
- •Вызов библиотечных функций.
- •Директива препроцессора #define: создание макрофункций с помощью директивы #define.
- •Директивы условной компиляции #if, #else, #elif, #endif, #ifdef, #ifndef.
- •Понятие структуры. Доступ к членам структуры.
- •Присваивание структур.
- •Id_структуры . Id_поля
- •Передача членов структур функциям. Передача целых структур функциям.
- •Указатели на структуры. Средство typedef.
- •Понятия объединения и перечисления. Битовые поля.
- •Основы файловой системы. Стандартные потоки. Указатель файла. Открытие файла. Закрытие файла.
18. Двухмерные массивы. Массивы строк.
Двухмерные массивы
Объявление двумерного массива имеет вид:
тип <имя массива>имя[размер 1][размер 2];
Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного –три и т.д. Отметим, что в языке С первый элемент массива имеет индекс равный 0.
Примеры:
int a[2][3]; /* представлено в виде матрицы
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2] */
double b[10]; // вектор из 10 элементов имеющих тип double
int w[3][3] = { { 2, 3, 4 }, { 3, 4, 8 }, { 1, 0, 9 } };
В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно.
Пример:
int s[2][3];
Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.
Пример Ввода и вывода двумерного массива #include <stdio.h> void main(){ int A[100][100]; // массив 100х100 int i,j; // индексы для перемещения по массиву int n; // кол-во строк int m; // кол-во столбцов // ввод размеровматрицы printf("input emount of rows"); scanf("%d",&n); printf("input emount of collomns"); scanf("%d",&m); // ввод значений матрицы for (i=0;i<n;i++) for (j=0;j<n;j++){ printf("input A[%d][%d]",i,j); scanf("%d",&A[i][j]); } // вывод значение матрицы for (i=0;i<n;i++){ for (j=0;j<n;j++) printf("%d ",A[i][j]); printf("\n"); } }
Массивы строк
Пример объявления символьного массива.
char str[] = "объявление символьного массива";
Следует учитывать, что в символьном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью ’\0’.
19. Инициализация массивов
Инициализация массива – это присваивание элементам массива некоторых начальных значений.
Если размер массива не известен, то он считается равным числу инициализаторов, при этом тип его становится завершенным. Если размер массива известен, то число инициализаторов не должно превышать числа его элементов; если инициализаторов меньше, оставшиеся элементы обнуляются.
Самый простой способ инициализации следцющий: в процессе объявления массива можно указать в фигурных скобках список инициализаторов:
float arr[6] = {1.1, 2.2, 3.3, 4.0, 5, 6};
int a[3][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, …, 15};
int a[3][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};
Количество инициализаторов не обязано совпадать с количеством элементов массива. Если инициализаторов меньше, то оставшиеся значения элементов неопределенны. Для доступа к элементам массива после его имени указывается номер элемента (индекс) в квадратных скобках.
Иногда инициализация многомерных массивов бывает очень полезной.
Листинг 1 демонстрирует типичное использование инициализированного
многомерного массива для запоминания названий месяцев. Листинг 1. months (запоминание названий месяцев в массиве): #include <stdio.h> #define NUMMONTHS 12 char months[NUMMONTHS][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; main() { int month; for(month=0; month<NUMMONTHS; month++) printf(?%s\n?, months[month]); return 0; } Объявленный в строке 5 массив months (месяцы) запоминает 12 трехсимвольных строк,
оканчивающихся нулевым байтом. Выражение months[0] относится к Jan, months[1] – Feb и т. д.
Такие выражения наталкивают нас на восприятие массива months как одномерного.
Но на самом деле он имеет два измерения. Например, выражение months[1][2]
ссылается на символ b строки “Feb”.