Читайте также:
|
|
Лабораторная работа №3
Файлы в С++
Цель работы: программирование в Visual С++ с использованием функций структуры FILE для работы с файлами (чтение из файла, запись в файл).
Краткая теория
Для работы с файлами в языке C / C ++ предназначена структура FILE, функции которой перечислены ниже. Для применения этих функций, прежде всего, необходимо создать указатель на структуру FILE, в который будет помещен адрес открытого файла с помощью функции fopen. Прототип этой функции имеет следующий вид:
FILE * fopen (const char * filename, const char * mode);
Функция fopen ()открывает файл и инициализирует связанный с ним поток данных. Аргумент mode устанавливает режим открытия файла, его возможные значения приведены в табл. 3.1. Спецификация режима может быть дополнена символами t или b, указывающими, в каком режиме открывать файл: соответственно в текстовом или двоичном. Они отличаются обработкой символов перехода на новую строку. По умолчанию файл открывается в текстовом режиме, при котором комбинация символов «возврат каретки» и «перевод строки» (0х13 0х10, т.е. «\ r \ n») при вводе преобразуются в одиночный символ перевода строки (при выводе выполняется обратное преобразование). В двоичном режиме эти преобразования не выполняются.
Режим | Описание |
r | Файл открывается только для чтения |
w | Файл открывается только для записи с усечением. Если файл не существует, то он создается в каталоге, заданном в параметре filename. Указатель записи-чтения устанавливается в нуль. После закрытия файл имеет новый размер, соответствующий последнему положению указателя записи-чтения |
а | Файл открывается для пополнения, т.е. после его открытия указатель записи-чтения устанавливается на позицию конца файла |
r+ | Файл открывается для обновления, доступен для чтения и записи, после закрытия не происходит усечения файла. При открытии указатель записи-чтения устанавливается в начало файла |
w+ | Файл открывается для обновления, доступен для чтения и записи. Если файл не существует, он создается в каталоге, заданном в параметре filename. Указатель записи-чтения устанавливается в нуль. После закрытия файл будет иметь новый размер, соответствующий последнему положению указателя записи-чтения |
а+ | Файл открывается для обновления, доступен для чтения и записи. После его открытия указатель записи-чтения устанавливается в позицию конца файла. После закрытия файла не происходит его усечения |
Возвращаемое значение:указатель на структуру FILE. Этот указатель затем передается в качестве аргумента другим функциям, работающим с потоком. Если файл не может быть открыт, возвращается NULL -указатель.
Для записи в файл используют функцию:
int fprintf (FILE *stream, «символьная строка формата», список_переменных);
Функция формирует по заданным аргументам символьную строку, которая записывается в поток stream. Форматирование символьной строки происходит таким же образом, как и в функции printf().
Возвращаемое значение: число записанных в поток символов. В случае ошибки возвращается отрицательное значение (чаще всего EOF (WEOF)).
Для чтения данных из файла используют функцию:
int fscanf (FILE *stream, «символьная строка формата», список_адресов_переменных);
Функция считывает данные из потока данных stream. Форматирование символьной строки происходит таким же образом, как и в функции scanf().
Возвращаемое значение: число успешно преобразованных и присвоенных полей либо EOF в случае попытки считывания конца файла.
Пример. Записать в файл 5 целых чисел и строку. Считать из файла 5 чисел и все символы, пока небудет достигнут конец файла.
#include <stdio.h>
void main()
{ FILE *file;
char file_name[] = "file.txt\0";
char string[50] = "Text message\0";
char symbol;
int i, k;
file = fopen(file_name, "w"); //открыли файл на запись
for (i=0; i<5; i++)
fprintf(file, "%i ", 10*i); // запись числа с пробелом в файл
fprintf(file, "%s", string); // запись строки в файл
fclose(file); // закрыли файл
file = fopen(file_name, "r"); //открыли файл на чтение
if(file!= NULL) // проверка открытия файла
{for(i=0; i<5; i++)
{ fscanf(file, "%i ", &k); //чтение числа с пробелом из файла
printf ("number[%i] = %i\n", i, k); //вывод числа на экран
}
while (fscanf(file, "%c", &symbol)!= EOF) // чтение символов из файла
printf("symbol = %c\n", symbol); //вывод символа на экран
}
else // если файл не удалось открыть на чтение
printf ("file not found.\n");
fclose(file);
}
Рисунок 1 – Результат работы программы
Рисунок 2 – Структура файла file.txt после завершения работы программы
Задание. Разработать программу, которая должна:
1) записать данные в исходный файл;
2) считать данные из исходного файла;
3) выполнить соответствующие варианту вычисления и записать их результаты в итоговый файл и/или показать на экране.
Варианты заданий
1. Создать файл и записать в него n целых чисел. Из исходного файла сформировать два файла с четными и нечетными числами соответственно и записать их в разные файлы. Определить наибольший четный и наименьший нечетный компоненты исходного файла и показать их на экране.
2. Создать файл и записать в него n целых чисел. На основе исходного файла создать итоговый файл, содержащий массив удвоенных нечетных чисел. Определить, является ли итоговый массив упорядоченным по возрастанию и отобразить ответ на экране.
3. Создать файл и записать в него n целых чисел. Найти разность между суммой нечетных чисел, находящихся в файле и максимальным значением файла. Записать полученный результат в итоговый файл.
4. Создать файл и записать в него n целых чисел. Сформировать в итоговом файле массив положительных чисел, делящихся на пять без остатка, используя элементы исходного файла. Определить, является ли итоговый массив упорядоченным по убыванию и отобразить ответ на экране.
5. Создать файл и записать в него n вещественных чисел. Из компонентов исходного файла сформировать массивы положительных и отрицательных простых чисел и записать их в два файла. Вычислить количество нулевых компонентов файла и показать результат на экране.
6. Создать файл и записать в него n вещественных чисел. Найти сумму последней группы четных элементов и записать ее в итоговый файл.
7. Создать файл и записать в него n целых чисел. Используя исходный файл сформировать массив для записи в итоговый файл, элементы которого не являются простыми числами и расположены до минимального элемента исходного массива.
8. Создать файл и записать в него n целых чисел. В итоговый файл записать числа, расположенные в исходном файле между минимальным и максимальным элементами.
9. Создать файл и записать в него n вещественных чисел. Записать в итоговый файл элементы исходного файла, внеся в него числа, превосходящие среднее арифметическое значение среди положительных значений исходного файла.
10. Создать файл и записать в него n целых чисел. Записать в итоговый файл массив, содержащий числа, расположенные в исходном файле до минимального и после максимального элемента исходного файла.
11. Создать файл и записать в него n целых чисел. Найти произведение первой группы, состоящей из нечетных чисел и записать его в итоговый файл.
12. Создать файл и записать в него n целых чисел. Из файла целых чисел сформировать массив для записи в итоговый файл, поместив в него только ненулевые компоненты, находящиеся после максимального элемента исходного массива.
13. Создать файл и записать в него n целых чисел. Из исходного файла сформировать массив, в котором вначале расположить четные, а затем нечетные числа. Записать полученный массив в итоговый файл. Определить номера наибольшего нечетного и наименьшего четного компонентов и показать их на экране.
14. Создать файл и записать в него n вещественных чисел. Найти сумму последней группы отрицательных элементов и записать ее в итоговый файл.
15. Создать файл и записать в него n целых чисел. В файле поменять местами максимальное среди отрицательных и наибольшее среди четных чисел. Полученный массив записать в итоговый массив.
16. Создать файл и записать в него n целых чисел. Из исходного файла переписать все кратные трем числа, значение которых превышает среднее арифметическое массива, в итоговый файл.
17. Создать файл и записать в него n целых чисел. Найти среднее арифметическое среди нечетных чисел, расположенных после минимального значения, записать результат в итоговый файл.
18. Создать файл и записать в него n целых чисел. Поменять местами первое кратное 7 и последнее отрицательное число в файле. Полученный массив записать в итоговый файл.
19. Создать файл и записать в него n целых чисел. В итоговый файл записать все четные числа, значение которых не больше половины максимального значения исходного файла.
20.Создать файл и записать в него n целых чисел. Найти разность между суммой четных чисел и произведением нечетных чисел, находящихся в файле. Записать результат в итоговый файл.
21. Создать файл и записать в него n целых чисел. Найти в нем группу положительных элементов наибольшей длины и записать ее в итоговый файл.
22. Создать файл и записать в него n целых чисел. В итоговый файл записать массив, элементы которого взяты из исходного файла, кратны 5 и расположены после максимального значения исходного файла.
23. Создать файл и записать в него n целых чисел. Из исходного файла сформировать массив, записав в него только кратные 3 значения, находящиеся до минимального элемента файла. Записать полученный массив в итоговый файл.
24. Создать файл и записать в него n вещественных чисел. В итоговый файл записать массив, сформировав его из элементов исходного файла, которые превосходят среднее значение среди четных значений исходного файла.
25. Создать файл и записать в него n вещественных чисел. Поменять местами последнее четное число в массиве исходного файла с наименьшим отрицательным. Результат записать в итоговый файл
Дата добавления: 2015-11-26; просмотров: 86 | Нарушение авторских прав