- •«Алгоритмические языки и программирование»
- •Часть 1
- •Часть 1. «Язык программирования с» (опорний конспект лекций).
- •Содержание
- •6. Понятие о препроцессоре языка Си 25
- •7. Операторы языка Си и приемы программирования 26
- •1.Правила записи программы на языке Си
- •2.Идентификаторы языка Си
- •3.Понятие о типах данных.
- •3.1.Основные типы данных языка Си
- •3.2.Правила записи констант различных типов
- •3.3.Беззнаковый тип для целых данных
- •3.4.Символьные строки
- •4.Понятие функции
- •4.1.Стандартная функция printf
- •4.2.Стандартная функция scanf
- •5.Операции и выражения
- •5.1.Простейшие арифметические операции
- •5.2.Операция присваивания
- •5.3.Оператор присваивания
- •5.4.Использование в выражениях операндов разных типов
- •5.5.Операции преобразования типов
- •5.6.Стандартные математические функции
- •5.7.Простейшие функции, определяемые программистом
- •5.8.Дополнительные арифметические операции
- •5.9.Дополнительные операции присваивания
- •5.10.Операции отношения
- •5.11.Логические операции
- •5.12.Операция определения размера данных
- •5.13.Приоритеты операций
- •6.Понятие о препроцессоре языка Си
- •7.Операторы языка Си и приемы программирования
- •7.1.Оператор цикла while
- •7.2.Условный оператор и условная операция
- •7.3.Некоторые приемы программирования
- •7.4.Оператор прерывания цикла
- •7.5.Оператор продолжения цикла
- •7.6.Пример организации простейшего меню
- •7.7.Множественный выбор. Оператор переключения
- •7.8.Оператор цикла do-while.
- •7.9.Перечисления
- •7.10.Пример организации светового меню
- •8.Массивы. Адресная арифметика языка Си
- •8.1.Описание массива
- •8.2.Ввод-вывод массива
- •8.3.Инициализация массива
- •8.4.Программа вычисления длины строки символов
- •8.5.Двумерные массивы (массивы массивов)
- •8.6.Адресная арифметика языка Си
- •8.7.Указатели и одномерные массивы
- •8.8.Указатели и двумерные массивы
- •8.9.Указатели и функции
- •8.10.Оператор typedef
- •9.Дополнительные сведения о функциях
- •9.1.Области видимости и глобальные данные
- •9.2.Время жизни переменных и классы памяти языка Си
- •9.3.Передача аргументов в функцию
- •9.4.Возврат значений из функций
- •10.Работа с динамической памятью
- •10.1.Стандартные функции управления динамической памятью
- •10.2.Пример использования динамической памяти
- •10.3.Особенности работы с двумерными массивами
- •10.3.1.Пересчет индексов вручную
- •10.3.2.Массивы с постоянной длиной строки
- •10.3.3.Общий случай двумерного массива
- •10.4.Особенности работы с массивами большого размера
- •11.Модульное программирование в системе Turbo c
- •11.1.Обеспечение корректной стыковки модулей
- •11.2.Создание библиотек функций
- •12.Некоторые библиотечные функции языка Си
- •12.1.Функции консольного ввода/вывода (уникальны для tc)
- •12.2.Функции обработки строк.
- •12.3.Функции распознавания вида символа
- •12.4.Функции преобразования данных
5.12.Операция определения размера данных
В некоторых случаях совершенно необходимо иметь возможность определять размеры данных, создаваемых пользователем. Это позволяет писать программы, независимые от компьютера, на котором они выполняются, а также упростить процедуру внесения корректировок в программы. Для определения размера данных в языке Си используется операция sizeof. Первая форма операции выглядит следующим образом:
sizeof ( тип )
Результат этой фо
рмы операции - размер данного соответствующего типа в байтах, например, sizeof(float) даст в результате 4.
Вторая форма операции выглядит следующим образом:
sizeof имя_данного
Результат этой формы операции - размер памяти, отведенной под соответствующее данное в байтах, например, после описания массива символов char name[40];, операция sizeof name даст в результате 40.
5.13.Приоритеты операций
Приоритеты и направление рассмотренных выше операций сведены в следующую таблицу. Операции одинакового приоритета объединены в группы, чем выше положение группы в таблице, тем выше приоритет операций группы.
Таблица приоритетов рассмотренных выше операций
-
Операции одного приоритета
! ~ ++ -- (тип) sizeof
* / %
+ -
<< >>
< <= > >=
== !=
&
^
|
&&
||
= *= /= %= += -= <<= >>= &= ^= |=
6.Понятие о препроцессоре языка Си
Препроцессором называется составная часть компилятора, которая производит обработку исходного текста программы перед ее трансляцией. Управление работой препроцессора осуществляется с помощью специальных директив. Все директивы препроцессора начинаются со знака #.
Ранее была рассмотрена директива include. Вместо нее в исходный текст программы препроцессор вставляет содержимое файла, указанного в директиве.
Так, по директиве #include <stdio.h> в текст программы вставляет содержимое файла stdio.h, находящегося в специальном системном каталоге, а только потом происходит трансляция.
Если в директиве #include имя файла заключено в кавычки, то вставляемый файл вначале ищется по правилам, предусмотренным MSDOS, а только потом в специальном системном каталоге. Например, по директиве препроцессора #include "func.h" будет осуществлена вставка текста из файла func.h, находящегося в текущем каталоге текущего диска.
Директива #define используется для назначения символических имен различным строкам текста. Например, директива:
#define PI 3.14159
осуществляет назначение имени PI строки 3.14159. В дальнейшем, вместо 3.14159 в программе можно использовать имя PI. Вместо него перед трансляцией программы препроцессор подставит соответствующую строку.
В принципе строка может быть сколь угодно сложной.
Пример:
#define TITLE printf("-------sin(x)-------cos(x)-------");
Однако использовать такие конструкции не рекомендуется ввиду сложности отыскания ошибок.
