- •Язык программирования Си
- •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.
- •Открытие потока.
- •Закрытие потока.
- •Предопределенные указатели потоков.
- •Функции ввода-вывода.
Основные типы данных языка Си
Язык Си относится к языку с жестко определенными типами данных: каждое имя всегда обозначает объект некоторого типа, причем этот тип нельзя изменить до конца выполнения программы.
Назначение типа имени осуществляется с помощью описания типа.
БНФ:
описание_типа =
["const "] имя_типа " " имя ["=" константа]
{ "," имя ["=" константа] } ";"
Если в описании присутствует ключевое слово const, то описываемое данное объявляется как немодифицируемое, то есть его значение не может быть изменено в процессе выполнения программы.
Если в описании имеется знак "=" и константа соответствующего типа, то вместе с объявлением переменной происходит ее инициализация, то есть присваивание начального значения.
В языке Си предопределены несколько имен типов:
БНФ:
имя_типа = "int" | "short" | "long" | "char" |
"float" | "double"
int - целый длиной 2 байта, диапазон значений -32768 ... +32767;
short - целый короткий, для IBM PC аналогиченint;
long - целый длиной 4 байта, диапазон значений
char - символьный длиной 1 байт, его можно рассматривать как целое -128...+127 (иногда 0...255);
float - тип данных с плавающей точкой, длиной 4 байта, вещественное число с диапазоном значений отдои 6-ю значащими цифрами;
double - тип данных с плавающей точкой, длиной 8 байт, вещественное число с диапазоном значений отдои 14-ю значащими цифрами;
Примеры описаний:
int a, b=4, c; /* описывает целые переменные a,b,c */
/* и инициализирует переменную b */
float speed, line; /* описывает вещественные переменные */
/* speed, line */
const double pi=3.14159; /* описывается имя pi, которое */
/* используется как константа */
/* типа double */
Вещественный тип данных следует использовать в тех случаях, когда данное в принципе может иметь дробную часть. Например, его надо использовать для описания почти всех физические величин: длины, массы, времени и т.д. Иногда величина, вообще говоря, целая, но большая настолько, что типа данных long не хватает. В этом случае тоже используется вещественный тип данных. Однако необходимо учитывать, что все арифметические действия с вещественными типами выполняются приближенно.
Целый тип данных часто используется для организации флагов, счетчиков, индексов и т.д.
Правила записи констант различных типов
Константы - это объекты данных, которые не меняют своих значений в процессе выполнения программы. Имя константы однозначно определяет и ее тип, и ее значение.
В простейшем случае в Си определены три типа констант: целые, вещественные, символьные. Рассмотрим правила их записи.
БНФ:
целая_константа =
( десятичная | восьмеричная |
шестнадцатеричная ) ["l"|"L"]
десятичная = цифра {цифра}
восьмеричная = "0" цифра8 {цифра8}
шестнадцатеричная = "0" ( "x" | "X" ) цифра16 {цифра16}
цифра8 = "0"|"1"|...|"7"
цифра16 = "0"|"1"|...|"9"|"A"|"B"|"C"|"D"|"E"|"F"
Обычно целые константы имеют тип int, добавление сзади константы буквы l или L обозначает константу типа long.
Примерправильных целых констант: 17, 012L, 0x35, 1235L
Отрицательные целые константы получаются путем добавления знака "-" перед константой без знака. Значением целой константы является число, которое она обозначает.
БНФ:
вещ_константа = цифра {цифра} "." {цифра}
[ "e" [ "+" | "-" ] цифра {цифра} ]
Пример правильных вещественных констант: 12e-33, 12.5, 128.05e-56, 54e23 .
Отрицательные вещественные константы получаются путем добавления знака "-" перед константой без знака. Значением вещественной константы является число, которое она обозначает.
Символьной константой является любой символ, заключенный в апострофы: 'A', 'c', 'd'. Значение символьной константы - величина целого типа, равная коду символа из таблицы кодов.
Для обозначения некоторых невидимых управляющих символов используется специальная кодировка:
'\n' - символ перевода строки,
'\r' - символ возврата каретки,
'\t' - символ табуляции,
'\b' - символ возврата на шаг,
'\\' - обратная косая черта,
'\"' - кавычки,
'\0' - символ с кодом 0.
Несмотря на то, что специальные символы записываются с помощью двух символов, фактически определяется однобайтовая символьная константа.
Символ может быть представлен и его шестнадцатеричным кодом, перед которым необходимо поставить \x. Например: '\x4C'эквивалентно 'L' и т.д.