- •Часть 1
- •40 01 02 – 02 Информационные системы и технологии (в экономике)
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Протокол согласования учебной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах
- •3. Перечень тем лабораторных занятий, их содержание и объем в часах
- •Теоретический раздел
- •Тема № 1. Введение в программирование
- •Происхождение языка с.
- •Основные характеристики алгоритмического языка с
- •Область применения
- •Системы программирования
- •Исходные и объектные модули, процессы компиляции и связывания
- •Алфавит языка
- •Лексемы (cTokens)
- •Тема № 2. Выражения и операции языка Унарные операции
- •Бинарные операции
- •Условная трехместная операция
- •Операция явного преобразования типа
- •Приоритет операций. Порядок вычисления выражений.
- •Организация ввода-вывода информации
- •Тема № 3. Управляющие структуры. Ветвления и циклы
- •Операторы преобразования данных – это операторы присваивания и произвольные выражения, завершенные символом «;».
- •Операторы управления работой программы называют управляющими конструкциями программы.
- •Тема № 4. Организация данных. Массивы и указатели Массивы
- •Инициализация массивов
- •Указатели
- •Функции для выделения и освобождения памяти
- •Тема № 5. Функции. Символьные строки и функции над ними Определение функций
- •Описание функций
- •Вызов функции
- •Передача параметров
- •Указатели на функции
- •Массивы указателей на функции
- •Главная функция. Передача аргументов главной функции
- •Рекурсивные программы
- •Стандартные функции ввода-вывода строк
- •Стандартные функции обработки строк
- •Тема № 6. Классы памяти и препроцессор языка Си Локальные и глобальные переменные
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Регистровые переменные
- •Область видимости и функции
- •Препроцессор и его директивы
- •Тема № 7. Структуры Декларация структур
- •Инициализация структур
- •Доступ к элементам структур
- •Элементы-массивы
- •Массивы структур
- •Указатели на структуры
- •Доступ к элементам структуры, определенной через указатель
- •Структуры и функции
- •Объединения
- •Битовые поля
- •Практический раздел Виртуальные лабораторные работы
- •Лабораторная работа №1
- •Лабораторная работа №2
- •Контрольные работы
- •Содержание пояснительной записки.
- •Задание для контрольной работы №1
- •Задание для контрольной работы №2
- •Варианты индивидуальных заданий
- •Теоретические вопросы
- •Пример оформления титульного листа для виртуальных лабораторных работ
- •Пример оформления титульного листа для контрольных
Тема № 4. Организация данных. Массивы и указатели Массивы
Кроме одиночных переменных, представляющих в программе отдельное число или символ, в языке С определено понятие массива. Массив – это совокупность (последовательность) значений одного типа. Для объявления массива в программе используется следующий синтаксис:
int Array[10]; // Массив из десяти целых чисел
Для доступа к отдельному элементу массива введено понятие индекса – т.е. номер элемента в массиве, причем индекс массива, состоящего из N элементов, меняется от 0 до N – 1. Так массив int Arr[3];
содержит элементы Arr[0], Arr[1], Arr[2].
Синтаксическая форма
<тип> <имя> <размер N> … <размер 2><размер 1>;
Как и в предыдущем случае, массив представляется одним фрагментом памяти, в котором элементы располагаются друг за другом:
int matr [2][3];
matr[0][0] : matr[0][1] : matr[0][2] : matr[1][0] : matr[1][1] : matr[1][2]
Инициализация массивов
При объявлении массивов их можно инициализировать, т.е. присвоить элементам конкретные значения.
Инициализация – это объединение определения объекта с одновременным присваиванием ему конкретного значения. Она позволяет изменить формат определения массива. Например, можно явно не указывать количество элементов одномерного массива, а только перечислить их начальные значения в списке инициализации:
double seq [] = {1.0, 2.1, 3.2, 4.3, 5.0};
В данном примере будет определен одномерный массив из пяти элементов, причем
seq[0]=1.0 seq[1]=2.1 seq[2]=3.2 seq[3]=4.3 seq[4]=5.0
Если в определении массива явно задан его размер, то количество начальных значений не может быть больше количества элементов в массиве (в таком случае компилятор выдаст ошибку типа «too many initializers»).
В случае, когда количество начальных значений меньше заданного размера массива – будут присвоены начальные значения только группе первых элементов массива (элементам с меньшим значением индекса):
int seq [4] = {1, 2};
В данном примере будут определены только элементы seq[0]=1 и seq[1]=2, в то время как элементы seq[2] и seq[3]останутся неопределенными.
Как видно из представленных примеров, одномерный массив инициализируется заключенным в фигурные скобки списком начальных значений. При инициализации многомерных массивов, в соответствии с определением их как одномерного массива с элементами-массивами, используются вложенные фигурные скобки.
int matr[3][2] = {{2,3}, {4,5}, {6,7}};
Эта запись эквивалентна последовательности операторов присваивания:
matr[0][0]=2 matr[0][1]=3 matr[1][0]=4 matr[1][1]=5 matr[2][0]=6 matr[2][1]=7
Тот же самый результат можно получить с одним списком инициализации в форме:
int matr[3][2] = {2, 3, 4, 5, 6, 7};
Как и для одномерных массивов могут быть проинициализированы не все значения многомерного массива:
double M[4][6] = { {1.0}, {2.2}, {44.2}, {8.0} };
начальные значения получат элементы только первого столбца матрицы M.
В многомерных массивах требуется некоторое время на вычисление каждого индекса. Поэтому доступ к элементу в многомерных массивах происходит медленнее, чем доступ в одномерных массивах. Поэтому для многомерных массивов память чаще всего выделяется динамически.
В С отсутствует проверка границ массивов. Можно легко выйти за конец массива и записать значение в какую-либо область, не относящуюся к массиву. Вся работа по проверке границ массива возлагается на программиста.
Массивы символов. Массивы символов, содержащие строки, допускают удобную инициализацию в виде:
char <имя_массива> [размер] = “строка”;
char str [6] = “hello”;
