- •Язык программирования Си
- •7. Понятие о препроцессоре языка Си 29
- •8. Операторы языка Си и приемы программирования 30
- •9. Массивы. Адресная арифметика языка Си 51
- •Правила записи программы на языке Си
- •Правила формального описания синтаксиса языка программирования
- •Идентификаторы языка Си
- •Понятие о типах данных.
- •Системы счисления. Представление данных в эвм.
- •Основные типы данных языка Си
- •Правила записи констант различных типов
- •Беззнаковый тип для целых данных
- •Символьные строки
- •Понятие функции
- •Стандартная функция printf
- •Стандартная функция scanf
- •Операции и выражения
- •Простейшие арифметические операции
- •Операция присваивания
- •Оператор-выражение
- •Использование в выражениях операндов разных типов
- •Операции преобразования типов
- •Стандартные математические функции
- •Простейшие функции, определяемые программистом
- •Дополнительные арифметические операции
- •Дополнительные операции присваивания
- •Битовые операции
- •Операции отношения
- •Логические операции
- •Операция определения размера данных
- •Приоритеты операций
- •Понятие о препроцессоре языка Си
- •Операторы языка Си и приемы программирования
- •Оператор цикла while
- •Условный оператор и условная операция
- •1) Короткие операторы:
- •2) Группы коротких операторов:
- •3) Длинные группы операторов:
- •Запись алгоритмов с помощью диаграмм Несси - Шнейдермана (структограмм )
- •Некоторые приемы программирования
- •Оператор прерывания цикла
- •Оператор продолжения цикла
- •Пример организации простейшего меню
- •Множественный выбор. Оператор переключения
- •Оператор цикла do-while.
- •Перечисления. Работа с клавиатурой ibm pc
- •Пример организации светового меню
- •Массивы. Адресная арифметика языка Си
- •Описание массива
- •Ввод-вывод массива
- •Инициализация массива
- •Программа вычисления длины строки символов
- •Двумерные массивы (массивы массивов)
- •Адресная арифметика языка Си
- •Указатели и одномерные массивы
- •Указатели и двумерные массивы
- •Указатели и функции
- •Оператор typedef
- •Дополнительные описания указателей для ibm pc
- •Непосредственная работа с экранной памятью
- •Дополнительные сведения о функциях
- •Области видимости и глобальные данные
- •Время жизни переменных и классы памяти языка Си
- •Передача аргументов в функцию
- •Возврат значений из функций
- •Работа с динамической памятью
- •Стандартные функции управления динамической памятью
- •Пример использования динамической памяти
- •Особенности работы с двумерными массивами
- •Пересчет индексов вручную
- •Массивы с постоянной длиной строки
- •Общий случай двумерного массива
- •Особенности работы с массивами большого размера
- •Модульное программирование в системе Turbo c
- •Обеспечение корректной стыковки модулей
- •Создание библиотек функций
- •Некоторые библиотечные функции языка Си
- •Функции консольного ввода/вывода (уникальны для tc)
- •Функции обработки строк.
- •Функции распознавания вида символа
- •Функции преобразования данных
- •Структуры языка c.
- •Описание структуры
- •1 Способ
- •2 Способ
- •Трактовка имени структуры.
- •Доступ к элементу структуры.
- •Инициализация структур.
- •Структуры и функции.
- •Поля бит в структурах.
- •Объединения.
- •Дополнительные сведения о препроцессоре языка c.
- •Условное выражение.
- •Приоритеты и направления операций.
- •Динамические данные.
- •Линейные списки.
- •Организация данных в виде стека.
- •Организация данных в виде очереди.
- •Организация данных в виде деревьев.
- •Библиотека ввода-вывода языка c.
- •Открытие потока.
- •Закрытие потока.
- •Предопределенные указатели потоков.
- •Функции ввода-вывода.
Структуры языка c.
Под структурой понимают совокупность данных разного типа, лежащих в непрерывной области памяти и объединенных общим именем.
Отличие от массивов - элементы структуры разного типа.
Необходимость: часто реальный объект характеризуется величинами разного типа.
Пример: товар на складе
название char name[21];
цена float price;
количество int number;
Все три переменных неразрывно связаны с каким-то товаром.
Описание структуры
1 Способ
struct { char name[21];
float price;
int number;} goods;
Выделяется 27 байт для переменной goods;
2 Способ
struct _GOODS { char name[21];
float price;
int number;};
Оператор не выделяет память, а устанавливает тип структуры. Для выделения памяти надо выдать оператор:
struct _GOODS goods1, goods2;
Выделяет память для goods1 и goods2, каждой по 27 байт.
Можно смепшать два способа:
struct _GOODS { char name[21];
float price;
int number;} goods;
Устанавливает тип структуры и выделяет память для goods.
3 способ.Используется оператор описания типа typedef:
typedef double real;
обычное описание
Если при описании имени стоит слово typedef, то описание не вы-
деляет память, а создает новый тип данных - real, который можно
применять также как и любое другое описание типа:
real a, b;
Еще пример:
typedef char string[40];
новый тип string
string a, b, c; - описание трех переменных, каждая из
которых является массивом из 40 символов.
В случае структуры имеем:
typedef struct { char name[21];
float price;
int number;} GOODS;
Описание типа
GOODS goods1, goods2; - выделение памяти для переменных
goods1 и goods2.
Трактовка имени структуры.
Имя структуры обозначает значение всей области памяти, которую она занимает. Поэтому для структур одного и того же типа допускается операция присваивания:
goods2 = goods1;
При этом вся область памяти goods1 копируется в область памяти goods2.
Доступ к элементу структуры.
Для этого используется операция ".".
goods1.name - образовалось составное имя. Тип составного имени такой же как тип соответствующего элемента структуры.
С составным именем можно выполнять любые действия, разрешенные для типа элемента.
goods2.price = 20*goods1.price;
scanf("%s", goods1.name);
goods1.name[3];
Из структур можно составить массив:
GOODS ab[50];
Тогда ab - адрес массива;
ab[2] - значение структуры;
ab[2].price - значение элемента структуры.
Структура может входить в другую структуру:
typedef struct { GOODS goods; int fl;} GF;
GF a - описание;
a.good.name
Никаких ограничений на уровень вложенности структур нет.
Инициализация структур.
Статические структуры могут быть проинициализированы подобно массивам:
static GOODS a = { "Телепвизор", 14000.0, 20};
Необходимо строго следитьза соответствием порядка констант порядку элементов структуры.