- •1. Среда программирования. Трансляция, компоновка и отладка программ
- •2. Виды и характеристики языков программирования
- •3. Виды программных ошибок.
- •4. Описание языка Си (используемые символы, константы, идентификаторы, ключевые слова, комментарии). Используемые символы
- •Константы
- •Ключевые слова
- •Использование комментариев в тексте программы
- •5. Идентификаторы и ключевые слова языка Си. Идентификаторы и ключевые слова
- •6. Структура программы на языке Си.
- •7. Категории типов данных (символьные, целые, с плавающей точкой).
- •Целый тип данных
- •Данные плавающего типа
- •8. Символьные и целые типы данных. Данные целого типа (integer)
- •Данные символьного типа (char)
- •9. Вещественные типы данных (с плавающей точкой). Данные вещественного типа (float, double)
- •10. Преобразование типов (явное и неявное).
- •11. Использование модификаторов при декларации типов данных.
- •12. Кодовая таблица ascii. Системы счисления. Классификация и преобразование символов. Классификация и преобразование символов
- •13. Константы. Целые константы. Константы с плавающей точкой. Символьные константы. Строки. Null.
- •1 Целые Константы
- •2 Константы с Плавающей Точкой
- •3 Символьные Константы
- •4 Строки
- •14. Условный оператор if.
- •15. Тернарная условная операция ?:.
- •16. Оператор выбора альтернатив switch.
- •17. Составление циклических алгоритмов. Операторы цикла с предусловием и с постусловием. Оператор while
- •Оператор do while
- •18. Оператор цикла с предусловием и коррекцией for. Оператор for
- •19. Операторы перехода (break, continue, return, goto). Оператор break
- •Оператор continue
- •Оператор return
- •Оператор goto
- •20. Унарные операции.
- •21. Аддитивные и мультипликативные операции.
- •22. Операции сдвига.
- •23. Поразрядные операции.
- •24. Операции отношения.
- •25. Логические операции.
- •26. Операция присваивания.
- •27. Сокращенная запись операции присваивания.
- •28. Стандартная библиотека языка Си. Математические функции.
- •29. Стандартная библиотека языка Си. Функции работы со строками.
- •Int strcmp(const char *s1, const char *s2);
- •Integer atoi(const char *nptr);
- •30. Стандартная библиотека языка Си. Ввод данных.
- •31. Стандартная библиотека языка Си. Вывод данных.
- •32. Управляющая строка функций ввода/вывода.
- •33. Препроцессор. Директивы #include, #define.
- •Директивы препроцессора и указания компилятору
- •34. Графический режим. Функции черчения и заполнения.
- •35. Графический режим. Функции вывода текста, функции управления цветом. (outtext, outtextxy, setbkcolor, setcolor, settextjustify, settextstyle, textheight, textwidth)
- •Цвет фона и вычерчивания
- •36. Одномерные массивы. Инициализация одномерных массивов. Ввод и инициализация массива символов.
- •37. Многомерные массивы. Инициализация многомерных массивов.
- •38. Структуры
- •Пример 5
- •39. Объединения.
- •Пример 2
- •40. Перечисления.
- •41. Работа с файлами. Типы открытия файлов (текстовый и бинарный). Дескриптор файла ("указатель на файл"). Режимы работы с файлами.
- •42. Работа с файлами. Открытие файла в различных режимах и закрытие файла.
- •Int feof(file *stream);
- •Int fclose(file *stream);
- •Коды, устанавливающие режимы доступа к открываемым файлам
- •Void rewind(file *stream);
- •Int fsetpos(file *stream, const fpos_t *pos);
- •45. Указатели. Указатели и адреса объектов. Указатели и массивы. Указатели.
- •Указатели и адреса объектов
- •Указатели и массивы
- •46. Операции с указателями: присваивание адреса, определение значения по адресу, присваивание указателей
- •1. Присваивание адреса.
- •3. Сравнение указателей.
- •48. Работа с динамической памятью. Динамические массивы.
- •49. Функции. Определение функции, объявление функции и вызов функции. Возвращаемое значение функции.
- •3. Вызов функции
- •50. Функции. Типы передачи параметров функции (по значению, по адресу).
- •Передача переменных
- •Передача векторных параметров
- •51. Функции. Переменные в качестве параметров функций.
- •52. Функции. Массивы в качестве параметров функций.
- •53. Указатели на функции.
- •1. Среда программирования. Трансляция, компоновка и отладка программ
- •2. Виды и характеристики языков программирования
42. Работа с файлами. Открытие файла в различных режимах и закрытие файла.
FILE *fopen(const char *filename, char *type);
fopen открывает файл с именем filename и возвращает указатель, используемый для идентификации потока в последующих операциях.
Файл может быть открыт в текстовом или двоичном режиме.
Пример.
FILE *fd;
fd = fopen("a.dat","rb+wb"); // Открыть существующий файл как двоичный
// для чтения и записи
fd = fopen("a.dat","wb+"); // Создать новый файл как двоичный
// для записи и чтения
Int feof(file *stream);
Проверка на достижение конца файла в потоке
feof возвращает ненулевое значение, если обнаружен индикатор конца файла во время выполнения последней операции ввода в потоке, или 0 - если не был обнаружен конец файла.
Int fclose(file *stream);
fclose закрывает поток stream
fclose возвращает 0 при успешном завершении или возвращает EOF, если обнаружена любая ошибка.
FILE *freopen(const char *filename, const char *type, FILE *stream);
закрывает поток, на описание которого указывает stream, а затем открывает файл, на спецификацию которого указывает строка filename. Повторное открытие того же самого файла изменяет права доступа, очищает внутренние буферы и позиционирует указатели записи-чтения либо на начало файла, либо на его конец.
Коды, устанавливающие режимы доступа к открываемым файлам
Символ |
Описание |
r |
Файл открывается только для чтения; если такого файла нет, то возникает ошибка |
w |
Файл открывается только для записи; если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается |
a |
Файл открывается для добавления в его конец новой информации |
r+ |
Файл открывается для редактирования данных; возможны и запись, и чтение информации |
w+ |
То же, что и для r+ |
a+ |
То же, что и для a, только запись можно выполнять в любое место файла; доступно и чтение файла |
t |
Файл открывается в текстовом режиме; указывается поле r, w, a, r+, w+, a+ |
b |
Файл открывается в двоичном режиме; указывается поле r, w, a, r+, w+, a+ |
По умолчанию файл открывается в текстовом режиме.
После работы с файлом доступ к нему необходимо закрыть. Это выполняет функция fclose(указатель_на_файл).
Если требуется изменить режим доступа к файлу, то для этого сначала необходимо закрыть данный файл, а затем вновь его открыть, но с другими правами доступа. Для этого используют стандартную функцию freopen.
Имеется возможность работы с временными файлами, т.е. с такими, которые нужны только в процессе работы программы и которые надо удалить после выполнения части вычислений. В этом случае используют функцию tmpfile со следующим объявлением:
FILE* tmpfile (void);
Функция tmpfile создает на диске временный файл с правами доступа «w+b» и возвращает указатель на управляющий блок по типу атрибута FILE. После завершения работы программы или после закрытия временного файла он автоматически удаляется.
43. Работа с файлами. Чтение и запись данных в файл.
Все действия по чтению/записи данных в файл можно разделить на следующие группы:
1. Посимвольный ввод-вывод
В операциях посимвольного ввода-вывода происходит прием одного символа из файла или передача одного символа в файл.
int fgetс(FILE *fp)
Чтение и возврат символа из открытого файла
int fputс(int ch, FILE *fp)
Записывает в файл код ch символа.
Пример. Посимвольное копирование файла-источника(source) с файл-назначение (destination)
char ch;
FILE *source=fopen(“one”,”rb”);
FILE *destination=fopen(“two”,”wb”);
while (!foef(source))
{
ch=fgetс(source);
fputс(ch,destination);
}
2. Построчный ввод-вывод.
В операциях построчного ввода-вывода за один прием происходит перенос из файла (или в файл) строк символов.
int fgets (char *S, int m, FILE *fp)
Извлекает байты из файла, описываемого fp, и записывает их в строку S до тех пор, пока не встретит символ ' \n ' или пока не будет считано m байтов.
int fputs (char *S, FILE *fp)
Записывает в файл байты из строки S до тех пор, пока не встретится нуль-терминатор, который в файл не переносится и на символ ' \n ' не заменяется.
Пример. Построчное копирование
char string[256];
FILE *source=fopen("1.txt","r");
FILE *destination=fopen("2.txt","w");
...
fgets(string,256,source); //чтение
fputs(string, destination); //запись
...
3. Блоковый ввод-вывод
В операциях блокового ввода-вывода работа происходит с целыми блоками информации.
int fread (void *ptv, int size, int n, FILE *fp)
Считывает n блоков по size байт каждый из файла fp, в область памяти, на которую указывает указатель ptv (необходимо заранее отвести память под считываемый блок).
int fwrite (void *ptv, int size, int n, FILE *fp)
Записывает n блоков по size байт каждый из области памяти, на которую указывает ptv, в открытый файл fp.
Особенностью этих функций является то, что для них безразличен (неизвестен) характер структуры данных в той области памяти, в которую осуществляется ввод-вывод.
Пример 1. Чтение и запись целого числа
int number;
FILE *source=fopen("1.txt","r");
FILE *destination=fopen("2.txt","w");
fread(&number,2,1, source); //чтение
fwrite(&number,2,1, destination); //запись
Пример 2. Из того, что функции fread, fwrite копируют данные из памяти в файл без преобразования, "байт в байт", следует естественный способ сохранения в файле переменной любого типа данных, основанный на использовании операции sizeof для определения ее размерности:
FILE *fd;
…
long a; // Записать в файл пере-
fseek (fd, 20L, SEEK_SET); // менную типа long, на-
fwrite (&a, sizeof(long),1,fd); // чиная с позиции 20
struct man b; // Добавить в файл пере-
fseek (fd,0L,SEEK_END); // менную типа struct man
fwrite (&b, sizeof b,1,fd);
double *pd; // Прочитать с начала файла
pd = malloc(n*sizeof((double)); // в динамический массив
fseek(fd,0L,SEEK_SET); // n переменных типа double
fread(pd, sizeof(double),n,fd);
Пример 3. Чтение и запись структурной переменной по шаблону BOOKS
struct {
char name[32];
char title[64];
int year;
float price;
}
FILE *source=fopen("1.txt","r");
FILE *destination=fopen("2.txt","w");
...
fread(&BOOKS,sizeof(BOOKS),1, source); //чтение
fwrite(&BOOKS,sizeof(BOOKS),1, destination); //запись
4 Форматированный ввод-вывод.
Особенность этих функция состоит в том, что при вводе выполняется специальное преобразование байтов строки и присваивание полученных значений специализированным переменным. При выводе выполняется обратное преобразование значений и помещение их символьного представления в поток вывода.
int fprintf(FILE *stream, const char *format[,аргумент,...]);
Направляет форматированный вывод в поток. Функция выполняет вывод аргументов в поток stream. Формат вывода для каждого аргумента задается в строке формата, определяемой указателем format. Число задаваемых в строке форматов должно совпадать с количеством аргументов.
int fscanf(FILE *stream, const char *format,[,adr ,...]);
Выполняет форматированный ввод из потока.
Пример. Форматированный ввод-вывод
char fam[15]; // фамилия
char name[15]; // имя
FILE *source=fopen("1.txt","r");
FILE *destination=fopen("2.txt","w");
...
fscanf(source,"%s %s", &fam, &name); // чтение
fprintf(destination,"%s %s\n",fam,name); // запись
...
44. Работа с файлами. Указатель текущей позиции в файле, его перемещение к нужной позиции.
int fseek(FILE *stream, long pos, int mode);
устанавливает текущую позицию в файле на байт с номером pos. Параметр mode определяет, относительно чего отсчитывается текущая позиция в файле, и имеет следующие символические и числовые значения (установленные в stdio.h)
SEEK_SET 0 // Относительно начала файла, начало файла - позиция 0
SEEK_CUR 1 // Относительно текущей позиции, >0 - вперед, <0 - назад
SEEK_END 2 // Относительно конца файла (значение pos - отрицательное)
fseek возвращает 0, если указатель успешно перемещен, и ненулевое значение при ошибке
Пример. Не следует забывать о наличии дополнительных байтов в файле (конец строки). Например, запись 10 строк по 20 символов каждая даст файл длиной 10х20+10 байт и следующее перемещение установит указатель на последний символ второй строки, а не на начало третьей
...
fseek(fp,42,SEEK_SET);
...
