Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Задание на лабораторную работу № 3




Название работы: Использование указателей. Работа с массивами, строковыми величинами. Структуры, смеси, битовые поля и перечисления.

Цель работы: Научиться использовать указатели. Изучить работу с массивами и строками. Использование структур как объединения данных различных типов в одной переменной.

 

1. Составить программу, которая позволяет пользователю ввести числа в массив и затем сортирует числа по возрастанию. Составить два варианта программы: первый с использованием индексированного доступа к элементам массива, второй — с использованием указателя для доступа к отдельным элементам массива.

2. По справочной системе исследовать функции, работающие со строками:

strcpy(), strcat(), strcmp(), strlen(), strncpy(), strdupt() и др., описания которых находятся в справочной системе, заголовочный файл <string.h>.

Контрольные вопросы:

 

1. Понятие указателя. Операции над указателями.

2. Массивы в С, многомерные массивы.

3. Связь между указателями и массивами.

4. Структуры, доступ к элементам структуры.

5. Строки символов и операции над ними.

6. Определение новых типов данных (оператор typedef).

7. Битовые поля, смеси и перечисления.


Лабораторная работа №4
Файлы и файловые операции



Теоретическая часть

Файлы.

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

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

Прежде чем читать или записывать информацию в файл, он должен быть открыт. Это можно сделать с помощью библиотечной функции fopen. Она берет внешнее представление файла (например, C:MY_FILE.TXT) и связывает его с внутренним логическим именем которое используется далее в программах. Логическое имя - это указатель на требуемый файл. Его необходимо объявлять; делается это, например, так:

FILE *lst;

Здесь FILE - имя типа, описанное в стандартном определении stdio.h, 1st-указатель на файл. Обращение к функции fopen в программе производится выражением:

lst=fopen (спецификация файла, вид использования файла);

Спецификация файла может, например, быть: C:MY_FILE.TXT-для файла MY_FILE.TXT на диске С:; A:\MY_DIR\EX2_3.CPP-для файла ЕХ2 3. СРР в поддиректории A:\MY_DIR и т. п. Вид использования файла может иметь вид:

r - открыть существующий файл для чтения;

w - создать новый файл для записи (если файл с указанным именем существует, то он будет переписан);

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

rb - открыть двоичный файл для чтения;

wb - создать двоичный файл для записи;

аb - дополнить двоичный файл;

rt - открыть текстовой файл для чтения;

wt - создать текстовой файл для записи;

at - дополнить текстовой файл;

r+ - открыть существующий файл для записи и чтения;

w+ - создать новый файл для записи и чтения;

a+ - дополнить или создать файл с возможностью записи и чтения;

r + b - открыть двоичный файл для записи и чтения;

w + b - создать двоичный файл для записи и чтения;

а + b - дополнить двоичный файл с предоставлением возможности записи и чтения.

Если режим t или b не задан (например, г, w или а), то он определяется значением глобальной переменной _fmode. Если __fmode=O_BINARY, то файлы открываются в двоичном режиме, а если _fmode=O_TEXT - в текстовом режиме. Константы O_BINARY и O_ТЕХТ определены в файле fcntl.h.

Строки вида r+b можно записывать и в другой форме: rb +. Если в результате обращения к функции fopen возникает ошибка, то она возвращает указатель на константу NULL. После окончания работы с файлом он должен быть закрыт. Это делается с помощью библиотечной функции fcloce. Она имеет следующий прототип:

int fclose (FILE *lst):

При успешном завершении функции fclose возвращает значение нуль.

Любое другое значение говорит об ошибке. Рассмотрим другие библиотечные функции, используемые для работы с файлами (все они описаны в файле stdio.h):

1. Функция putc записывает символ в файл и имеет следующий прототип:

int putc (int с, FILE *lst);

здесь lst - указатель на файл, возвращенный функцией fopen, с -символ для записи (переменная с имеет тип int. но используется только младший байт). При успешном завершении putc возвращает записанный символ, в противном случае возвращается константа EOF. Она определена в файле stdio.h и имеет значение -1.

2. Функция getc читает символ из файла и имеет следующий прототип:

int getc (FILE *lst);

здесь lst - указатель на файл, возвращенный функцией fopen. Эта функция возвращает прочитанный символ. Соответствующее значение определяется типом int, но старший байт равен нулю. Если достигнут конец файла, то getc возвращает значение EOF.

3. Функция feof определяет конец файла при чтении двоичных данных и имеет следующий прототип:

int feof (FILE *lst):

здесь lst - указатель на файл, возвращенный функцией fopen. При достижении конца файла возвращается ненулевое значение, в противном случае возвращается 0.

4. Функция fputs записывает строку символов в файл. Она отличается от функции puts только тем, что в качестве второго параметра должен быть записан указатель на переменную файлового типа. Рассмотрим пример:

fputs («Example», lst); При возникновении ошибки возвращается значение EOF.

5. Функция fgets читает строку символов из файла. Она отличается от функции gets только тем, что в качестве второго параметра должен быть записан указатель на переменную файлового типа. Рассмотрим пример: fgets (str, lst); Функция возвращает указательна строку при успешном завершении и константу NULL в случае ошибки либо достижения конца файла.

6. Функция fprintf выполняет те же действия, что и функция printf, но работает с файлом. Ее отличием является то, что в качестве первого параметра задается указатель на переменную файлового типа. Рассмотрим пример: fprintf (lst, "%x", а).

7. Функция fscanf выполняет те же действия, что и функция scanf, но работает с файлом. Ее отличием является то, что в качестве первого параметра задается указатель на переменную файлового типа. Рассмотрим пример: fscanf (lst, "%х", &a);. При достижении конца файла возвращается значение EOF.

8. .Функция fseek позволяет выполнять чтение и запись с произвольным доступом и имеет следующий прототип:

int fseek (FILE *lst, long count, int access);

Здесь lst - указатель на файл, возвращенный функцией fopen, count-номер байта относительно заданной начальной позиции, начиная с которого будет выполняться операция, access-способ задания начальной позиции. Переменная access может принимать следующие значения:

0 - начальная позиция задана в начале файла;

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

2 - начальная позиция задана в конце файла.

При успешном завершении возвращается нуль, при ошибке - ненулевое значение.

9. Функция ferror позволяет проверить правильность выполнения последней операции при работе с файлом и имеет следующий прототип:

int ferrof (FILE *lst):

В случае ошибки возвращается ненулевое значение, в противном случае возвращается нуль.

10. Функция remove удаляет файл и имеет следующий прототип:

int remove (char *file_name);

Здесь file_name-указатель на строку со спецификацией файла. При успешном завершении возвращается нуль, в противном случае возвращается ненулевое значение.

11. Функция rewind устанавливает указатель текущей позиции в начало файла и имеет следующий прототип:

void rewind (FILE *lst):

В языке С открываются пять стандартных файлов со следующими логическими именами:

stdin-для ввода данных из стандартного входного потока (по умолчанию с клавиатуры);

stdout-для вывода данных в стандартный выходной поток (по умолчанию на экран дисплея);

stderr- файл для вывода сообщений об ошибках (всегда связан с экраном дисплея);

stdprn-для вывода данных на принтер;

stdaux-для ввода и вывода данных в коммуникационный канал.

 

Примеры программ

Пример1. Работа с файлами

#include <stdio.h>

void main(void)

{

FILE *in, *out;             //определяет указатель на два файла

char n1[8], n2[8];          //переменные для хранения имен файлов

printf("Исходный файл\n");

gets(n1);                                 /* ввод имен входного и выходного

printf("Выходной файл\n");  файлов и присвоение этих имен

gets(n2);                                 переменным n1 и n2 */

if ((in = fopen(n1, "rt"))== NULL)

{

   printf("Не могу открыть исходный файл\n");

   return 1;

}

if ((out = fopen(n2, "wt"))== NULL)

{

   printf("Не могу открыть выходной файл\n");

   return 1;

}

while (!feof(in))

   fputc(fgetc(in), out);

fclose(in);

fclose(out);

}

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 140.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...