- •Предисловие
- •Введение
- •Введение в программирование
- •1.1. Предисловие к курсу
- •1.2. Идеология языка
- •1.3. Обзор среды Microsoft Developer Studio
- •1.4. Жизненный цикл программного обеспечения
- •1.5. Общая структура программы
- •1.6. Директивы препроцессора
- •1.7. Построение исполняемого файла
- •1.8. Строительные блоки программы
- •Контрольные вопросы
- •Типы данных. Переменные. Массивы. Операции и Указатели
- •Стандартные типы и размеры данных
- •2.1.1. Объявление переменных
- •Управляющие символьные константы
- •2.2. Объявление указателя
- •2.2.1. Операции разыменования и взятия адреса
- •2.2.2. Указатели на указатели
- •2.2.3. Арифметические операции с указателями
- •2.3. Массивы
- •2.3.1. Инициализация массивов
- •2.3.2 Динамические массивы
- •2.3.3. Методы доступа к элементам массивов
- •2.3.4. Массивы указателей
- •2.4. Строки
- •2.5. Операции
- •2.5.1. Арифметические операции
- •Арифметические операции
- •2.5.2 Операции сравнения и логические операции
- •Операции сравнения и логические операции
- •2.5.3. Побитовые операции
- •Побитовые операции
- •Контрольные вопросы
- •3.1. Базовые операторы
- •3.1.1. Оператор выражение
- •3.2.2. Оператор switch
- •3.3.4. Оператор goto
- •3.4. Операторы цикла
- •3.4.1. Оператор for
- •3.4.2. Оператор while
- •3.4.3. Оператор do..While
- •Контрольные вопросы
- •Стандартный ввод/вывод. Работа с файлами.
- •4.1. Роль стандартного ввода/вывода
- •4.1.1. Основные функции стандартного ввода/вывода
- •4.2. Понятие файла
- •4.2.1. Строение файлов
- •4.2.2. Порядок работы с файлом
- •4.2.3. Обзор библиотечных функций с для работы с файлами
- •4.3. Программные конструкции при работе с файлами
- •4.3.1. Открытие/закрытие файла
- •4.3.2. Цикл посимвольного чтения содержимого файла
- •4.3.3. Цикл построчного чтения содержимого файла
- •Контрольные вопросы
- •Функция. Пользовательские типы данных.
- •5.1. Понятие функции
- •5.1.1. Определение функции
- •5.1.2. Формальные параметры
- •5.1.3. Тип возвращаемого значения
- •5.1.4. Тело функции
- •5.1.5. Фактические параметры
- •5.1.6. Рекурсивные вызовы
- •5.1.7. Передача параметров
- •5.1.8. Библиотеки стандартных функций
- •5.2. Пользовательские типы данных.
- •5.2.1. Ключевое слово typedef
- •5.2.2. Перечислимый тип данных
- •5.2.3. Понятие структуры
- •5.2.4. Указатели на структурный объект
- •Контрольные вопросы
- •Работа с динамической памятью. Динамические структуры данных
- •6.1. Работа с динамической памятью
- •6.1.1. Статическое и динамическое распределение памяти
- •6.1.2. Основные принципы динамического распределения
- •6.1.3. Способы работы с динамической памятью
- •6.2. Динамические структуры данных
- •6.2.1. Стек
- •6.2.2.Линейный список
- •Контрольные вопросы
- •Объектно-ориентированное программирование
- •7.1. Критерии качества декомпозиции проекта
- •7.2. Новые концепции программирования
- •7.3. Достоинства ооп
- •7.4. Объекты и классы в ооп
- •7.4.1. Определение класса
- •7.4.2. Использование класса
- •7.4.3. Вложенные классы
- •Контрольные вопросы
- •Конструкторы и Перегрузка операций.
- •8.1. Перегрузка операций
- •8.1.1. Перегрузка операций внешними функциями
- •8.1.2. Перегрузка операций методами класса
- •8.2. Конструкторы и деструктор
- •8.2.1. Конструкторы и параметры
- •Контрольные вопросы
- •9.1. Простое открытое наследование
- •9.1.1 Конструкторы и деструкторы при наследовании
- •9.1.2. Поля и методы при наследовании
- •9.1.3. Вложенные классы и наследование
- •9.1.4. Закрытое наследование
- •9.1.5. Виртуальные функции
- •9.1.6. Чистые виртуальные функции и абстрактные классы
- •9.3. Основы программирования под Windows
- •9.3.1. Типы данных в Windows
- •9.4. Cреда Microsoft Developer Studio
- •9.4.1. Библиотека mfc
- •9.4.2. Архитектура приложения
- •9.4.3. Каркас приложения
- •9.4.4. Проект приложения
- •Контрольные вопросы
- •Заключение
- •Список Литературы
4.2.3. Обзор библиотечных функций с для работы с файлами
Библиотечные функции языка С для работы с файлами можно разделить на две группы: потоковые и префиксные.
Главное отличие потоковых функций от префиксных заключается в том, что они выполняют дополнительную буферизацию информации. Использование префиксных функций может ускорить операции записи/чтения при работе с блоком данных, особенно, если его размер кратен величине сектора диска (512 байт). При работе с одиночными символами и строками оптимально использовать потоковые функции.
Существует также два режима доступа к содержимому файла: текстовый и двоичный. При чтении происходит изъятие символа возврата каретки. Все потоковые функции расположены в библиотеке stdio, поэтому в программу необходимо помещать командой #include заголовочный файл stdio.h.
4.3. Программные конструкции при работе с файлами
Рассмотрим наиболее часто встречающиеся конструкции из выражений, операторов, используемых при работе с файлами.
4.3.1. Открытие/закрытие файла
Для открытия и закрытия файла используется следующая стандартная конструкция, как показано в следующем примере:
#include <stdio.h>
#include <iostream.h>
FILE *fp;
fp=fopen(имя_файла, режим);
if(!fp)
cout<<”файл не открылся”;
else
cout<<”файл открылся”;
…
fclose(fp);
Общепринятой является проверка результата открытия файла. Если открытие прошло успешно, указатель fp содержит ненулевое значение, которое впоследствии и будет использоваться во всех операциях с файлом.
Если это значение равно нулю (NULL), то попытка открытия файла потерпела неудачу, и в программе нужно предусмотреть последовательность действий на этот случай.
4.3.2. Цикл посимвольного чтения содержимого файла
Очень часто необходимо пропустить содержимое текстового файла через символьный или текстовый фильтр. Для этого необходимо организовать цикл посимвольного чтения. Следующий пример демонстрирует данный способ:
#include <stdio.h>
#include <iostream.h>
FILE *fp;
int ch; // Открытие и проверка
while((ch=fgetc(fp))!=EOF) // операции над ch
{
…
} // закрытие файла
В цикле производится чтение очередного символа из открытого файла, его значение тут же сравнивается с EOF, и при положительном результате сравнения выполнение цикла прекращается. В теле цикла можно осуществлять любые операции над ch, например, сравнивать с определенным значением, преобразовывать регистр букв, увеличивать значение счетчиков и т.п.
4.3.3. Цикл построчного чтения содержимого файла
Во многих задачах требуется обработать содержимое файла построчно. В этом случае на помощь приходит функция fgets, которая за одно обращение читает из файла строку или n-1 символов, если строки слишком длинные, например:
#include <stdio.h>
#include <iostream.h>
FILE *fp char buf[256]; // Открытие и проверка
while(fgets(buf,256,fp)) // операции над содержимым buf
{
…
} // закрытие файла
Контрольные вопросы
1. Роль стандартного ввода/вывода.
2. Основные функции стандартного ввода/вывода.
3. Понятие и строение файлов.
4. Каков порядок работы с файлом?
6. Какие программные конструкции вы знаете?
Лекция 5.
