
- •Управление памятью программы
- •Динамическое распределение памяти в С
- •Пример создания динамической переменной
- •Проверка выделения памяти
- •Еще вариант контроля
- •Пример создания строки в динамической памяти
- •Пример программы с динамической переменной
- •Массив в динамической памяти
- •Проверка выделения памяти
- •Задача
- •Классы хранения переменных
- •Статическая переменная
- •Регистровая переменная
- •Пример использования внешней
- •Задача: найдите ошибки в программе
- •Файловый ввод/вывод
- •Структура типа FILE
- •Функции для работы с файлами
- •Режимы открытия файлов
- •Функции чтения и записи
- •Функции getc ( ) и putc ( )
- •Посимвольное копирование строки
- •Функции fgets ( ) и fputs ( )
- •Функции fscanf ( ) и fprintf ( )
- •Проверка чтения из файла
- •Функции fread ( ) и fwrite ( )
- •Задача
- •Текст программы (1)
- •Текст программы (2)
- •Текст программы (3)
- •Текст программы (4)
- •Текст программы (5)
- •Работа с файлом в режиме чтения и записи (1)
- •Работа с файлом в режиме чтения и записи (2)
- •Работа с файлом в режиме чтения и записи (3)
- •Работа с файлом в режиме чтения и записи (4)
- •Работа с файлом в режиме чтения и записи (5)
- •Работа с файлом в режиме чтения и записи (6)
- •Прямая рекурсия int A( )
- •Рекурсивная функция
- •Вычисление факториала
- •Вычисление суммы цифр целого
- •Функция с переменным числом аргументов
- •Функция пользователя с переменным числом аргументов
- •Функция пользователя с переменным числом аргументов (2)
- •Задача
- •Функции преобразования типов данных
- •Функции atoi, atol и atof
- •Функции strtol, strtof, strtod
- •Функция sprintf ( )
- •Операторы языка С
- •Инкремент и декремент
- •Префиксный и постфиксный
- •Поразрядные операции
- •Поразрядное НЕ
- •Поразрядное И
- •Поразрядное ИЛИ
- •Поразрядное исключающее ИЛИ
- •Задача
- •Операции сдвига
- •Условная (тернарная) операция
Функции чтения и записи
1.getc ( ) - чтение символа из файла putc ( ) - запись символа в файл
2.fgets ( ) - чтение строки из файла fputs ( ) - запись строки в файл
3.fscanf ( ) - форматированный ввод из файла fprintf ( ) - форматированный вывод в файл
4.fread ( ) - блоковый (двоичный) ввод fwrite ( ) - блоковый (двоичный) вывод

Функции getc ( ) и putc ( )
int getc (FILE* file);
int putc (int c, FILE* file);
char ch; FILE* file;
file = fopen (''my.txt'', ''r''); ch = getc (file);
while (ch != EOF)
{
putchar (ch); ch = getc (file);
}
Возвращают код прочитанного или записанного в файл символа или EOF
Посимвольное копирование строки
FILE *in, *out; int ch;
if ((in = fopen(''in.txt'', ''r'')) == NULL)
{
printf (''Входной файл не открыт\n''); exit(1);
}
if ((out = fopen(''out.txt'', ''w'')) == NULL)
{
printf (''Файл на запись не открыт\n''); exit(2);
}
while ((ch = getc (in)) != EOF) putc (ch, out); if (fclose (in) != 0 || fclose (out) != 0)
printf (''Ошибка при закрытии файлов''); return 0;

Функции fgets ( ) и fputs ( )
#include <stdio.h> |
char* fgets (char* s, int n, FILE* file); |
#define MAXLINE 10 |
возвращает указатель на прочитанную строку |
int main ( ) |
или NULL |
{ |
int fputs (const char* st, FILE* file); |
char line [MAXLINE]; |
возвращает код последнего записанного |
символа или EOF |
FILE *in, *out;
if ((in = fopen (''mystr.txt'', ''r'')) ==NULL)
{
printf(''Входной файл не открыт\n''); exit (1);
}
while (fgets(line, MAXLINE, in) != NULL)
{
puts(line); fputs(line, out);
}
fclose (in); fclose (out); return 0;
}

Функции fscanf ( ) и fprintf ( )
int fscanf (FILE* file, const char* format, ...);
|
fscanf возвращает количество |
int num=15; |
заполненных переменных |
|
fprintf возвращает количество |
|
int fprintf (FILE* file, const char* format, ...); |
||
double f=2.6; |
записанных в файл байтов |
|
char st[20]=''numbers:''; |
||
|
||
FILE* out = fopen(''my.txt'',''w''); |
||
fprintf(out,''%20s%6d%6.2lf'',st,num,f); |
||
fclose(out); |
|
#include <stdio.h> #include <stdlib.h> #define N 5
int main()
{
Чтение массива из файла
int mas[N], i=0; FILE* in;
if((in=fopen("num.txt","r"))==NULL)
{
printf("File not found\n"); exit(1);
}
while(!feof(in))
{
fscanf(in,"%d",mas+i); printf("%d %d\n",i,mas[i]); i++;
}
fclose(in); return 0;
}
Проверка чтения из файла
FILE* file; char st[100]; double num;
if ((file = fopen(''text.txt'', ''r''))==NULL)
{
fprintf(stderr, ''Ошибка\n''); exit(1);
}
while (fscanf (file, ''%s%lf'', st, &num) == 2) printf (''%s %lf\n'', st, num);
fclose (file);
Функции fread ( ) и fwrite ( )
size_t fread (void* ptr, size_t size, size_t number, FILE* file);
size_t fwrite (void* ptr, size_t size, size_t number, FILE* file);
Возвращают количество прочитанных/записанных элементов (<=number) или EOF
double mas[4] = {0.5, 0.9, 1.8, 3.7}; FILE* file;
file = fopen (''num'', ''w''); fwrite(mas, sizeof(double), 4, file); fclose(file);
Задача
В текстовом файле записаны несколько чисел.
Написать программу, которая читает файл в массив, увеличивает значения чисел на 10 и сохраняет в текстовый файл, потом увеличивает числа еще на 10 и сохраняет в двоичный файл.
Текст программы (1)
#include <stdio.h> #define N 100
int main()
{
FILE *fin, *bfout, *tfout; int mas[N];
int i, n; fin=fopen("in.txt","r");