Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты МП.docx
Скачиваний:
54
Добавлен:
27.03.2015
Размер:
145.11 Кб
Скачать

11. Понятие файла. Виды файлов: текстовые, двоичные. Способы обращения к элементам файлов. Операции над файлами.

Файловый тип – это тип, который связывает программу с внешними устройствами ЭВМ. Значение файлового типа представляет собой произвольной длины последовательность компонент.

Размер файла (т.е. длина последовательности) никак не оговаривается при объявлении файла и ограничивается только емкостью устройств внешней памяти. Для указания конца структуры используется признак конца файла (end of file).

В Си файл рассматривается как поток или последовательность символов (байтов), независящая от конкретного устройства, с которым ведется обмен данными. При обмене с потоком часто используется вспомогательный участок основной памяти, называемый буфер потока (буфер ввода, буфер вывода).

При работе с потоком можно производить следующие действия:

- открывать и закрывать потоки;

- вводить (читать) и выводить (записывать): символ, строку, форматированные данные, порцию данных произвольной длины;

- анализировать условие достижения конца потока (конца файла) и ошибки ввода-вывода;

- получать и устанавливать указатель текущей позиции в потоке;

- управлять буферизацией потока и размером буфера.

Все операции ввода-вывода реализованы с помощью функций, находящихся в

библиотеке языка Си. Чтобы использовать эти функции, необходимо включить в программу заголовочный файл stdio.h, который содержит прототипы функций ввода-вывода, определения констант, типов и структур, необходимых для работы функций.

Поток можно открыть в текстовом или двоичном режиме. В соответствии с этим различают файлы текстовые и двоичные.

При открытии файла в текстовом режиме прочитанная из потока последовательность символов преобразуется, если это необходимо из символьного представления во внутреннее представление. Например, если при форматном вводе

читается числовая информация, то происходит преобразование прочитанной последовательности символов в двоичное целое или число с плавающей точкой в соответствии со спецификацией формата; при форматном выводе числовой информации происходит преобразование из внутреннего представления числа в последовательность символов, изображающих число. Последовательность символов, хранящаяся в текстовом файле, может быть разбита на строки. При записи в текстовый поток символа новой строки ‘\n’ он заменяется последовательностью символов CR (“возврат каретки”) и LR (“перевод строки”). При

чтении из текстового файла последовательность символов CR и LR преобразуется в один символ новой строки ‘\n’.

Если в файле хранится не текстовая информация, а двоичная, то никакие преобразования не должны выполняться. Например, в файл записывается (а затем читается) числовая информация в своем внутреннем представлении. Такой файл надо открыть как двоичный.

Функции форматного обмена предназначены для ввода/вывода отдельных символов, строк, целых и вещественных чисел всех типов. При вводе данные помещаются в буфер, а затем побайтно или определенными порциями передаются программе пользователя. При выводе данных в файл они сначала накапливаются в буфере, а при заполнении буфера записываются в виде единого блока в файл за одно обращение

к нему. Таким образом, использование буфера позволяет сократить число обменов с файлом. Буфер выделяется программе по умолчанию при открытии файла.

Функция читает последовательность символов из входного потока, начиная с байта, на который показывает текущее положение указателя файла. Ввод прекращается, если встретился пробельный символ или прочитано количество

символов, указанных в спецификации преобразования. Прочитанная последовательность символов интерпретируется в соответствии с форматной строкой (форматная строка просматривается последовательно от первого символа к последнему) как символьное представление целого числа или вещественного числа или один символ или строка символов. Затем преобразуется во внутреннее представление и записывается в область памяти очередной переменной из списка аргументов (указатель текущей позиции файла при этом перемещается

на новую текущую позицию в соответствии с числом прочитанных байтов).

Этот процесс продолжается пока не исчерпана форматная строка или не достигнут конец файла или не произошла ошибка. В первом случае функция возвращает количество объектов, получивших значение при вводе, при достижении конца файла – возвращает константу EOF, в случае ошибки – значение –1.

Функция просматривает форматную строку слева направо все встреченные произвольные символы выводит в файл, при встрече спецификации преобразования вычисляет значение соответствующего ему выражения из списка аргументов, преобразует его из внутреннего представления в последовательность символов в соответствии со спецификацией и выводит в текущую позицию файла. Для каждого аргумента должна быть указана одна спецификация преобразования. Если аргументов меньше , чем спецификаций, то результат зависит

от реализации языка. Вывод заканчивается, когда исчерпана форматная строка или возникла ошибка. Функция возвращает число выведенных символов, а при ошибке отрицательное число.

В двоичном режиме в файл можно записать содержимое любой области памяти без преобразования из внутреннего представления. Таким образом, форма представления данных в памяти и в двоичном файле одинакова. Поэтому при чтении из двоичного файла преобразование во внутреннее представление не нужно. Для обмена с двоичным файлом используются функции fread и fwrite.

13. ПОНЯТИЕ ПРОГРАММЫ. СТРУКТУРА ПРОГРАММЫ.

Простая программа – это программа с управляющей структурой, обладающей следующими особенностями:

1) имеется только один вход и один выход,

2) через каждый узел программы проходит путь от входа к выходу структуры.

Логически программы можно разбить на 2 блока:

1. величины с которыми работаем

2. действия производимые над величинами (в соответствии с алгоритмом решения задачи).

Программа в си состоит из подпрограмм. Из них путем механического объединения формируется текст программы, но всегда существует основная подпрограмма. Синтаксис подпрограммы: 1. Заголовок void main ()

2. тело – {блок} – составной оператор, позволяющий задавать величины и действовать над ними – крупная единица действия. В блоке величина сначала должна быть определена и только потом использована.

Программа на языке Си состоит из одной или более функций. Одна из этих функций – главная, она имеет имя main. Операционная система передает управление в программу пользователя на функцию с этим именем и тем самым начинается выполнение программы. Функция main вызывает другие функции программы. Кроме функций программа может содержать

директивы препроцессору, указания компилятору, объявления и определения.

Директивы препроцессора используют для того, чтобы облегчить модификацию программы. Директива - это инструкция препроцессору языка Си. Препроцессор обрабатывает исходную программу перед ее компиляцией.

Текст программы на языке Си может быть разделен на несколько исходных файлов. Исходный файл – это текстовый файл, который содержит либо всю программу, либо ее часть. Исходный файл не обязательно должен содержать выполняемые операторы. Удобно размещать определения переменных в одном файле, а в других файлах использовать эти переменные

путем их объявления. Каждый исходный файл компилируется отдельно, а затем связывается с другими компоновщиком программ. Отдельные исходные файлы можно объединить в один исходный файл, компилируемый как единое целое, используя директиву препроцессора – include.