Бочаров презентации 1 семестр / Tech_Progr_PPT_3p_2016
.pdfТехнология и языки программирования
Иллюстративный материал к проведению лабораторных работ по практическому освоению языка программирования С
Преподаватель
Бочаров Юрий Иванович
кафедра микронаноэлектроники НИЯУ МИФИ
Часть III
Работа с файлами. Функции языка С
Основные алгоритмы
Файлы
Файл это особым образом организованная именованная область памяти.
Будем различать файл логический – файловая переменная, буфер в оперативной памяти компьютера и файл физический – область на диске, имеющая имя.
Ввод и вывод в программе осуществляется через буфер в памяти по адресу файловой переменной, а обмен данными между буфером и файлом на диске выполняется средствами операционной системы.
В дальнейшем под файлом будем понимать файловую переменную. Для файла на диске в программе указывается лишь его имя в функции fopen() при задании соответствия между логическим и физическим файлами, а обращение к файлу осуществляется только через файловую переменнуюуказатель.
Технология и языки программирования |
2 |
Файлы
В соответствии с форматом хранимых данных и возможными операциями файлы бывают двух видов: текстовые и двоичные (бинарные)
Текстовые |
Двоичные |
Содержат текст, представленный двоично-кодированными символами, а также управляющие символы конца строк. Содержимое файла может быть прочитано текстовым редактором. Примерами являются файлы с расширениями .txt, .html
Содержат копию области памяти, данные представлены во внутреннем двоичном формате. Обычным текстовым редактором содержимое файла прочитать невозможно. Примерами являются файлы с расширениями
.exe, .jpg, .avi
Технология и языки программирования |
3 |
Файлы
Мы будем работать только с текстовыми файлами из-за возможности простого контроля их содержимого путем просмотра любым текстовым редактором. Однако следует иметь в виду, что при сравнимом объеме хранимой информации размер двоичного файла всегда меньше, чем размер текстового файла, поскольку в текстовом файле каждый символ кодируется 8 битами.
Например, двоичная запись числа 65432 содержит 16 бит, а
строка из 7-ми символов ’6’, ’5’, ’4’, ’3’, ’2’,’\r’, ’\n’ содержит 56
бит, т.е. в 3,5 раза больше.
Символы ’\r’, ’\n’ (возврат к началу строки и переход на новую строку) обозначают конец строки в DOS-подобной операционной системе (ОС). Оконные приложения среды программирования Pelles C for Windows работают под управлением такой ОС, которая эмулируется средствами основной ОС Windows.
При записи и чтении чисел их преобразование в символы и обратно осуществляется автоматически по указанным форматам
Технология и языки программирования |
4 |
Файлы
Типовая последовательность записи в файл
Объявление файловой переменной – указателя на файл FILE *f; // в слове FILE буквы заглавные!
Открытие файла для записи (write) в новый файл
f = fopen(”data.txt”, ”w”);
или для дозаписи (append) в существующий файл f = fopen(”data.txt”, ”a”);
Здесь data.txt – имя создаваемого файла на диске. Оно может быть любым допустимым в операционной системе именем - полным или кратким. Если имя краткое, то файл создается в текущей папке.
Если файл с таким именем уже существует, то при использовании операции записи (w) его содержимое стирается.
Запись данных (переменной целого типа x) в файл fprintf(f, ”%d”, x);
Закрытие файла
fclose(f); // обязательная операция!
Запись на диск происходит при закрытии файла или переполнении буфера. При завершении работы программы все файлы закрываются автоматически
Технология и языки программирования |
5 |
Файлы
Типовая последовательность чтения из файла
Объявление файловой переменной – указателя на файл
FILE *g;
Открытие файла для чтения (read)
g = fopen(”data.txt”, ”r”);
Здесь data.txt – имя файла на диске. Предполагается, что он существует. Если файл открыть не удалось, то функция fopen() возвращает нулевой адрес (NULL).
Чтение данных (в адрес переменной целого типа y) fscanf(g, ”%d”, &y);
Закрытие файла
fclose(g);
После закрытия файла соответствующая файловая переменная освобождается и ее можно использовать для работы с другим файлом
Технология и языки программирования |
6 |
Файлы
Открытие файла для записи с проверкой
FILE *f;
f = fopen(”data.dat”, ”w”); if ( f == NULL )
{ printf(”Error opening file”); . . .
Причины, по которым файл не может быть открыт:
•неверное имя файла
•файл, имеющий атрибут «только для чтения»
•конфликт с другой программой
Открытие файла для чтения с проверкой
FILE *f;
f = fopen(”data.dat", ”r”); if ( f == NULL )
{ printf(”Error opening file”); . . .
Причины, по которым файл не может быть открыт:
•
•
•
неверное имя файла Файл не существует
конфликт с другой программой
Технология и языки программирования |
7 |
Файлы и случайные числа
Пример
Запись случайного количества случайных целых чисел в файл с контролем записываемых чисел выводом их на экран
Чтение записанных чисел из файла и вывод их на экран. Предполагается, что количество чисел в файле заранее не известно
Для генерации случайных (точнее - псевдослучайных) чисел используется стандартная функция rand() из библиотеки <stdlib.h>. Она возвращает целое беззнаковое случайное число в диапазоне от 0 до значения константы RAND_MAX, которая равна 1 703 741 823.
Для инициализации генератора служит функция srand(x), в качестве параметра которой задается начальное значение псевдослучайной последовательности. Это может быть произвольное число. В данном примере для инициализации используется возвращаемое значение функции time(NULL) из библиотеки <time.h>. Функция time(d) с параметром-указателем, соответствующим текущей дате и времени, возвращает число прошедших секунд с начала 1970 года. Если в качестве параметра указано нулевое значение указателя, то функция возвращает случайное число.
Технология и языки программирования |
8 |
Файлы и случайные числа
Текст программы
#include <stdio.h> #include <time.h> #include <stdlib.h>
int main(void)
{
srand(time(NULL)); FILE *f;
f = fopen("rnd.dat", "w");
int n = rand() % 20; //random integer numbers from 0 to 19 int x = 0;
for (int i=1; i < n; i++)
{
x = rand() % 10; //random digits from 0 to 9 fprintf(f, "%d\n", x);
printf("%d\n", x);
}
fclose(f);
system("Pause"); //delay before window will be closed
//продолжение программы на следующем слайде
Технология и языки программирования |
9 |
Файлы и случайные числа
продолжение текста программы
FILE *v;
v = fopen("rnd.dat", "r"); if (v==NULL)
{
printf("File is not found!");
}
else
{
int z =1;
while(z == 1) //one number was read successfully
{
z = fscanf(v, "%d", &x);
if (z == 1) printf("%d\n", x);
}
fclose(v);
}
return 0;
}
Операции записи в файл и чтения из файла очень похожи на соответствующие операции при работе с консолью (клавиатурой и дисплеем), поскольку работа с консолью также осуществляется с использованием файлов – стандартных файлов ввода и вывода (stdin, stdout)
Технология и языки программирования |
10 |