- •Федеральное агентство по образованию
- •Краткая история языка с
- •Особенности и основные понятия языка Си
- •Структура программы
- •Типы данных
- •Классификация типов данных
- •Вещественные
- •Логический
- •Диапазоны представления данных
- •Объявление переменных
- •Константы в языке Си
- •Операции языка Си. Приоритет операций
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные операции
- •Операцияsizeof
- •Операция выбора по условию
- •Операция запятая
- •Приведение типов Неявное преобразование типов
- •Явное преобразование типов
- •Основные средства ввода-вывода на Си Понятие потока
- •Стандартные потоки
- •Функции потокового ввода-вывода
- •Функции ввода
- •Ввод символов
- •Ввод строк
- •Форматированный ввод
- •Операторы языка Си
- •Оператор if
- •Оператор switch
- •Оператор while
- •Оператор do while
- •Оператор for
- •Оператор break
- •Оператор continue
- •Функции вывода на экран
- •Вывод символов
- •Функция вывода строк puts()
- •Форматированный вывод
- •Указатели в языке Си
- •Адресная арифметика
- •Массивы
- •Функции в языке с
- •Прототипы функций
- •Указатели типа void
- •Функции, возвращающие указатели
- •Встраиваемые функции
- •Рекурсивные функции
- •Функции с переменным числом аргументов
- •Аргументы функции main()
- •Область действия и область видимости
- •Локальные переменные
- •Локальные переменные в функции Main()
- •Глобальные переменные
- •Классы памяти
- •Указатели на указатели
- •Указатели и многомерные массивы
- •Массивы указателей
- •Указатели на функции
- •Операции над строками символов Определение длины строки
- •Копирование строк
- •Поиск в строках
- •Преобразования символов в строках
- •Другие функции для работы со строками
- •Преобразования строк в числа
- •Преобразования чисел в строки
- •Функции анализа символов
- •Распределение памяти
- •Манипулирование блоками памяти
- •Типы, определяемые пользователем
- •Перечислимый тип
- •Структуры
- •Сложные структуры
- •Битовые поля в структурах
- •Объединения
- •Работа с файлами Связь между потоками и файлами
- •Типы дисковых файлов
- •Открытие файла
- •Запись и чтение данных
- •Форматированный ввод-вывод Форматированный вывод
- •Int fprintf (file *fp, char *fmt, ...);
- •Форматированный ввод
- •Символьный ввод
- •Символьный вывод
- •Блочный ввод-вывод
- •Закрытие файла
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •69 Лекции по курсу «Языки программирования» Часть III
Приведение типов Неявное преобразование типов
Так же как и в других языках программирования, в Си производится автоматическое (неявное) преобразование типов переменных, встречающихся в арифметических выражениях. Если над операндами различных типов необходимо выполнить операцию, они преобразуются к одному типу.
К каждой двуместной арифметической операции применяются следующее правило: операнды разных типов приводятся к более длинному типу.
Типы в порядке убывания длины:
long double
double
float
long long
unsigned long
long int
unsigned int
signed int
signed char
При этом:
переменные char и short преобразуются в int. a float-в double;
если один из операндов double, то другой преобразуется в double. Результат операции - double;
если один из операндов типа long, другой преобразуется в long. Результат-long;
если один из операндов unsigned, другой преобразуется в unsigned. Результат-unsigned;
если операнды типа int. результат-int.
Числа с плавающей точкой перед выполнением операции преобразуются в double. Все операции над такими числами в языке Си выполняются с двойной точностью.
Преобразования производятся и в случае операции присваивания, значение операнда справа от знака < = > преобразуется к типу операнда слева от этого знака.
Так как фактические аргументы при обращении к функции являются выражениями, то производится преобразование типов:
char и short - в int,
float - в double.
Явное преобразование типов
В языке Си имеется операция преобразования типов, с помощью которой можно производить явные преобразования и задавать тип результата:
(typе) exp
где type-тип, а exp-выражение.
Основные средства ввода-вывода на Си Понятие потока
Поток представляет собой последовательность байт данных.
Поток байт, принимаемый программой, называется потоком ввода, а поток, посылаемый программой на устройства, называется потоком вывода.
Основное преимущество работы с потоками состоит в том, что потоки являются независимыми от устройств. Программистам не приходится писать отдельные функции ввода-вывода для каждого конкретного устройства. Программа рассматривает ввод-вывод как работу с непрерывным потоком байт независимо от их происхождения или места назначения.
Каждый поток в Си связан с файлом. В этом контексте термин файл не относится только к файлам на дисках. Скорее это промежуточный объект между потоком ввода или вывода, с которым работает программа, и реальным физическим устройством, фактически выполняющим ввод-вывод данных.
Потоки бывают двух разновидностей: текстовые и двоичные.
Текстовые потоки организованы в виде строк до 255 символов длиной с завершающим символом конца строки. Некоторые символы в текстовых потоках воспринимаются как специальные, т.е. имеющие управляющие функции.
Двоичный поток может содержать данные любых видов, в том числе и текстовые. Байты данных в двоичном потоке не интерпретируются никаким образом. Они просто воспринимаются, как есть.
Стандартные потоки
В языке Си стандарта ANSI имеется три стандартных потока, известных также под названием стандартных файлов ввода-вывода. В системе DOS или Windows на IBM-совместимом персональном компьютере имеется еще два дополнительных стандартных потока. Эти потоки автоматически открываются при запуске программы и закрываются при ее завершении.
|
Имя |
Поток |
Устройство |
|
stdin |
Стандартный поток ввода |
Клавиатура |
|
stdout |
Стандартный поток вывода |
Экран |
|
stderr |
Стандартный поток ошибок |
Экран |
|
stdprn |
Стандартный поток печати |
Принтер (LPT1:) |
|
stdaux |
Стандартный вспомогательный поток |
Последовательный порт (СОМ1:) |
Последние два потока поддерживаются только в Windows и DOS. Они нe определены в стандарте ANSI.
При работе с функциями printf () или puts() в работу включался поток stdout.
При вызове gets() или scanf() мы работали с потоком stdin.
