
- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана 2010 График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 6.
- •Функции поиска из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 7.
- •Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
- •Ниже приведены примеры программы, использующих функции работы со троками.
- •Тема 11. Структуры данных в Си.
- •Тема 12. Динамические структуры данных.
- •Тема 13. Работа с файлами в Си.
- •Тема 14. Графика в Си.
- •Тема 15. Объектно-ориентированное программирование.
- •Методические рекомендации по выполнению лабораторных заданий
- •Лабораторная работа № 3. Использование операторов цикла при решении задач.
- •Лабораторная работа №4. Разработка программ с использованием одномерных массивов.
- •Лабораторная работа №5. Разработка программ с использованием двумерных массивов.
- •Лабораторная работа № 6. Программирование задач с использованием нескольких функций на языке Си.
- •Лабораторная работа № 8. Программирование задач обработки структур данных.
- •Лабораторная работа № 9. Разработка программ с использованием файловых переменных.
- •Лабораторная работа № 10. Разработка программ с использованием графических функций языка Си.
- •Содержание отчета по выполнению лабораторной работы
- •1 Задание
- •Тема 1. Запись констант, стандартных функций, выражений, операторов присваивания. Запись программ линейных структур алгоритмов.
- •Тема 2. Алгоритмическое описание, запись программ линейных, разветвляющихся.
- •Тема 3. Алгоритмическое описание, запись программ циклических структур алгоритмов.
- •Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.
- •Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.
- •Тема 6-7. Составление программ решения задач с использованием функции.
- •Рекомендуемая литература:
- •Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
- •Тема 10-11. Программирование задач обработки символьных и стрковых данных.
- •Рекомендуемая литература.
- •Тема 12. Методы сортировки.
- •Тема 13. Составление программ решения задач с использованием структур данных.
- •Тема 14. Составление программ решения задач с использованием файла произвольного доступа.
- •Рекомендуемая литература.
- •Тема 15. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Тема 13. Работа с файлами в Си.
Как при чтении, так и при записи информации в файл, его нужно открыть с помощью стандартной библиотечной функции fopen. Обращение к fopen в программе выполняется так:
fp = fopen (name, mode);
первый параметр – имя файла, строка символов, второй параметр – mode также строка символов, указывающая, как будет использоваться файл. Ниже приводятся основные способы применения файла:
«r» – файл нужно читать,
«w» – файл нужно записать,
«а» – файл нужно дополнить,
«r+» – открыть файл одновременно для чтения и записи (файл доллжен существовать),
«w+» – открыть пустой файл для чтения и записи (если этот файл ранеее сеществовал, его содержимое уничтожается),
«а+» – открыть фал для чтения и добавления (если файла нет, то вначале он создается).
При применении «r» открывается существующий файл. При попытке прочитать несуществующий файл – ошибка. При обнаружении ошибки fopen выдает нулевую ссылку со значением NULL. При применении «w» или «а» открывается файл для записи или дополнения, но если такого файла нет, он будет создан.
Внимание. Если используется «w» для существующего файла, то старая версия его стирается.
Третий параметр является указателем на файл; это значение возвращается функцией:
FILE *fp;
fp = fopen (“dann” , “r”);
Теперь fp является указателем на файл “dann”. С этого момента программа ссылается на файл при помощи указателя fp, а не по имени “dann”. Необходимо отметить: функция fopen ( ) возвращает указатель на ‘FILE’ в качестве аргумент; fopen () как функци указателя на ‘FILE’ не объявляется, т.к. это описание содержится в stdio.h:
FILE * fopen ();
Пример:
main ();
{ FILE *fp;
int ch;
if ((fp = fopen (“dann” , “r”)) ! = NULL)
{ while ((ch = getc (fp) ! = EOF) /* получение символа из файла, на который указывает fp*/
putch (ch, stdout); /*записывается символ ch в файл, на который ссылается */
/* указатель stdout, stdout – указатель на стандартный вызов */
fclose (fp); }
else
printf (“ файл не открыт \ n ”); }
Если fopen () не может открыть файл, она возвращает значение ‘NULL’ (в stdio.h определенное как 0).
fclose () – закрыть файл.
fclose (fp) – аргумент, fp – указатель на файл.
Можно проверить, успешно ли закрыт файл. Функция fclose () возвращает значение 0, если файл закрыт успешно, и – 1 в противном случае.
Ввод-вывод файла:
fprintf (), fscanf ()
Эти функции аналогичны функция printf () и scanf (), но в данном случае необходимо указать ссылку на файл.
main ()
{ FILE *fp;
int m;
fp = fopen (“dann1” , “ r ”);
fscanf (fp, “% d” , &m);
fclose (fp);
fp = fopen (“dann2”, “a”);
fprintf (fp, “ % d \ n“ , m);
fclose (fp);
- - - - - - - - }
Рассмотрим следующие функции
fgets (), fputs (), fread (), fwrite ().
1. fgets ( )
char * fgets (string, n, stream);
char * string;
int n;
FILE * stream;
Функция fgets () читает строку из входного потока stream и помещает ее в строку, адрес которой задается значением параметра string. Символы читаются из потока до тех пор, пока не будет прочитан символ новой строки (‘ \ n’ ), который включается в строку, или пока не наступит конец потока, или пока не будет прочитано (n-1) символов. Результат помещается в string и заканчивается нулевым символом (‘ \ 0 ’). Если n=1, то формируется пустая строка (возвращается адрес строки; значение NULL, если произошла ошибка или достигнут конец файла).
2. fputs ( )
int fputs (string, stream);
char * string;
FILE * stream;
Функция копирует строку string в поток stream с текущей позиции. Завершающийся нулевой символ (‘ \ 0 ‘) не копируется (возвращаемое значение: последний записанный символ; значение 0, если строка string пустая; значение EOF, если произошла ошибка).
3. fread ( )
int fread (buffer, size, count, stream);
void * buffer;
size-t size;
size-t count;
FILE * stream;
Функция читает count элементов длины sizе из входного потока stream и помещает их в заданный массив buffer. Указатель файла, связанный с потоком stream, увеличивается на число действительно прочитанных байтов. Форматных преобразований данных (как для функции fscanf ()) не производится. Символы перевода строки (‘ \ n ‘) специально (как для fgets ()) не обрабатываются. (Возвращаемое значение: количество действительно прочитанных элементов, которое может быть меньше, чем count, если встретилась ошибка или конец файла раньше, чем было прочитано count элементов. )
4. fwrite ( )
int fwrite (buffer, size, count, stream);
сhar * buffer;
int size;
int count;
FILE * stream;
Функция дописывает count записей по size байтов из области buffer в выходной поток stream (высокоуровневый ввод/вывод). Указатель файла (имеется в виду внутренний указатель), связанный с потоком stream, увеличивается на число записанных байтов. Форматных преобразований данных (как для fprintf ()) не производится. Символы перевода строки (‘ \ n ’) специально (как для fputs) не обрабатываются. (Возвращаемое значение: количество реально помещенных в файл записей; это число может быть меньше, чем значение count, если имела место ошибка.)
5. fseek ( )
int fseek (stream, offset, origin);
FILE * stream;
long offset;
int origin;
Функция перемещает (внутренний) указатель файла, связанного с потоком stream, на новое место в файле, которое вычисляется по смещению offset и указанию направления отсчета origin. Следующая операция ввода/вывода с указанным потоком stream будет выполнена, начиная с той позиции, на которую произведено перемещение.
Основная литература: 1осн[425-444],2осн[437-450]
Дополнительная литература:10доп[51-54],11доп[16-23]
Контрольные вопросы:
1. В чем состоит сходство и различие между массивом и файлом?
2. Какие действия выполняют функции fseekиfopen?
3. Назовите функции записи информации в файл?
4. Назовите функции чтения информации из файла?
5. Какие существуют основные способы применения файла?