- •Экзаменационные вопросы по дисциплине
- •«Программирование на языках высокого уровня»
- •Среда программирования языка Си.
- •Алфавит языка.
- •Данные и типы данных в Си.
- •Int (целый);
- •Константы и переменные.
- •Перечень операций в Си. Приоритет операций.
- •Структура программы.
- •Int scanf(char *управляющая строка);
- •Массивы в Си.
- •Массивы указателей. Массивы динамической памяти.
- •Представление символа и строки в памяти эвм. Ввод-вывод символов и строк.
- •Понятие функции в Си. Определение и описание. Вызов функции.
- •Передача параметров функции по значению.
- •Передача параметров функции по ссылке.
- •Рекурсивные функции.
- •Определение структур. Инициализация и присваивание структур.
- •Доступ к элементам структур
- •Двоичный режим обмена с файлами. Строковый обмен с файлами.
- •Использование макросов в Си.
Двоичный режим обмена с файлами. Строковый обмен с файлами.
В заголовке <stdlib.h> объявляется набор функций, служащих для преобразования данных, генерации случайных чисел, получения и установки переменных среды shell, управления выполнением программ и выполнения команд shell. Обычно эти функции объявляются в заголовке <stdio.h>, но так как они не включают в себя манипулирование потоками, стандарт ANSI C группирует их в отдельный заголовок.
В заголовке <string.h> объявляется набор функций, предназначенных для манипулирования символьными строками.
В заголовке <memory.h> объявляется набор функций, предназначенных для манипулирования байтовым потоком. Эти функции похожи на строковые, но в отличие от них имеют более широкое назначение и могут использоваться для манипулирования несимвольными строковыми объектами. В частности, данные функции можно применять для инициализации, сравнения и копирования объектов типа struct.
В заголовке <time.h> объявляется набор функций, предназначенных для вызова системных параметров времени. Они могут применяться для определения местного времени и даты, времени и даты в универсальном формате (UTC), а также статистических данных об использовании процессами времени центрального процессора.
Режим форматного обмена с файлами.
Форматный обмен с файлами. С помощью функции форматного вывода можно формировать на диске текстовый файл с результатами вычислений, представленными в символьном виде. В дальнейшем этот файл может быть просмотрен на экране, распечатан на принтере, отредактирован с помощью текстового редактора. Общий вид функции форматного вывода:
int fprintf(указатель_на_поток, форматная_строка, список переменных);
Использовавшаяся нами ранее функция printf() для организации вывода на экран является частным вариантом функции fprintf(). Функция printf() работает лишь со стандартным потоком stdin, который всегда связывается системой с дисплеем. Не будет ошибкой, если в программе вместо printf() написать fprintf (stdin,...).
Позиционирование в потоке при работе с файлами.
Позиционирование чтения и записи выполняется отдельными функциями (суффикс "g" означает "get", а суффикс "р" - "put"). Функции чтения определяются в классе basic_istream, а функции записи - в классе basic_ostream. Тем не менее не все потоковые классы поддерживают позиционирование. Например, для потоков данных cin, cout и cerr позиционирование не определено. Операции файлового позиционирования определяются в базовых классах, потому что обычно используются ссылки на объекты типов istream и ostream.
Функции seekg() и seekp() могут вызываться для абсолютных или относительных позиций. Функции tellg() и tellp() возвращают абсолютную позицию в виде значения типа pos_type. Это значение не является целым числом или индексом, задающим позицию символа, поскольку логическая позиция может отличаться от фактической. Например, в текстовых файлах MS-DOS символы новой строки хранятся в файлах в виде двух символов, хотя логически они соответствуют только одному символу. Кроме того, ситуация дополнительно усложняется при многобайтовой кодировке символов.
Разобраться в точном определении типа pos_type непросто: стандартная библиотека C++ определяет глобальный класс шаблона fpos<> для представления позиций в файлах. На базе класса fpos<> определяются типы streampos (для потоков данных char) и wstreampos (для потоков даииых wchar_t). Эти типы используются для определения pos_type соответствующих классов трактовок. Наконец, переменная типа pos_type класса трактовок требуется для определения типа pos_type соответствующих потоковых классов. Следовательно, позиции в потоке данных также могут представляться типом streampos, ио использовать типы long и unsigned long было бы неправильно, потому что streampos не является целочисленным типом (а точнее, перестал им быть).
