- •1) Базовые элементы языка с. Алфавит и словарь языка (в1б1, в3б3)
- •2) Основные типы данных. Классификация их типов. Модификация базовых типов. (в1б2, в3б17)
- •3) Константы (в1б3, в3б2)
- •4) Переменные (в1б4, в3б16)
- •5) Структура с-программы. Понятие локальных и глобальных переменных. Функция main(). Директивы препроцессора (# include и #define). Комментарии. (в1б5, в3б1)
- •6) Операции языка с. Арифметические, логические операции. Поразрядные операции. (в1б6, в3б15)
- •7. Операции языка с. Операция присваивания и отношения. Операция определения размера. Оператор последовательного вычисления. (в1б7, в2б30)
- •8. Операции языка с. Условная операция. Операция (), операция []. (в1б8, в3б14)
- •9) Приоритет операций и порядок вычислений (в1б9, в2б29)
- •10) Основные сведения о вводе-выводе. (в1б10, в3б13)
- •11) Ввод-вывод символов (в1б11, в2б28)
- •12) Форматированный ввод-вывод. Модификаторы формата. Спецификаторы преобразования. Подавление ввода. (в3б12, в1б12)
- •13) Операторы языка с. Условные операторы (if, switch). (в1б13, в2б27)
- •14) Операторы цикла (while, for, do while )(в1б14, в3б11)
- •15) Операторы безусловного перехода ( break, continue, go to, return) (в1б15, в2б26)
- •16) Одномерные массивы. (в1б16, в3б10)
- •17) Строковый литерал. Чтение и запись строк. (в1б17, в2б25)
- •18)Двухмерные массивы. Массивы строк (в1б18, в3б9)
- •19) Инициализация массива. (в1б19, в2б24)
- •20) Способы доступа к элементом массива. (в1б20, в3б8)
- •22) Указательные переменные. Операции получения адреса (&) и раскрытие ссылка (*) (в1б22, в3б7)
- •23) Указательные выражения. Адресная арифметика. (в1б23, в2б22)
- •24) Связь массивов и указателей (в1б24,в3б6)
- •25) Функции динамического распределения памяти (в1б25, в2б21)
- •26) Динамическое выделение памяти для массивов. (в1б26, в3б5)
- •27) Функции. Определения функций. Оператор return.( в1б27, в3б20)
- •28) Функции. Прототипы функции. (в1б28, в3б4)
- •29) Функции. Вызов функций: вызов по значению и по ссылке. (в1б29, в2б19)
- •30) Передача массива в функцию. (в1б30, в3б27)
- •31) Классы памяти. Область видимости. (в2б1, в3б28)
- •32) Аргумент функции main(): argv и argc (в2б2, в3б26)
- •33) Рекурсия. (в2б3, в3б29)
- •34) Вызов библиотечных функций(в2б4, в3б25)
- •35) Директива препроцессора #define: создание макрофункций с помощью директивы #define (в2б5, в3б30)
- •36) Директивы условной компиляции #if, #else, #elif, #endif, #ifdef, #ifndef (в2б6, в3б24)
- •37) Понятие структуры. Доступ к членом структуры (в2б7)
- •38) Присваивание структур (в2б8, в3б23)
- •39) Массивы структуры(в2б9)
- •40) Передача членов структур функциям. Передача целых структур функциям. (в2б10, в3б22)
- •41) Указатели на структуры. Средство typedef (в2б11)
- •42) Понятие объединение и перечисления. Битовые поля. (в2б12,в3б21)
- •44) Методы поиска: последовательный и двоичный поиск. (в2б14, в3б20)
- •45) Основы файловой системы. Стандартные потоки. Указатель файла. Открытые файлы. Закрытые файлы. (в2б15)
- •46) Форматированный ввод-вывод в файл (в2б16, в2б17, в3б19)
- •48) Понятие очереди, стеков, связанных списков и деревьев. (в2б12, в3б18)
45) Основы файловой системы. Стандартные потоки. Указатель файла. Открытые файлы. Закрытые файлы. (в2б15)
Основным понятием, связанным с информацией на внешних устройствах ЭВМ, является понятие файла. Всякая операция ввода/вывода трактуется как операция обмена с файлами: Ввод- это чтение из файла в оперативную память; вывод - это запись из оперативной памяти в файл. Сначала нужно открыть поток перед выполнением каких-либо операций ввода/вывода, затем выполнить операции доступа (чтения/записи) и потом закрыть. Файл - это байтовая последовательность, заканчивающаяся EOF.
1.Стандартные потоки
С началом работы любой программы открываются пять стандартных потоков:
stdin - поток стандартного ввода;
stdout - поток стандартного вывода;
stderr - вывод сообщений об ошибках.
Кроме того открывается поток для стандартной печати и дополнительный поток для последовательного порта.
2. Указатель файла
Работа с файлами начинается с объявления указателя на поток:
FILE *имя_указателя;
FILE *fp;
FILE внутренняя C-структура данных языка Си,которая используется для работы с потоками и определена в stdio.h. Стуктура FILE содержит следующую информацию: указатель на буфер, указатель текущей позиции в потоке.
3. Открытие файла
Открыти файла возможно при помощи функции fopen(), синтаксис которой следующий:
FILE *fopen(char *name, char *mode)
fopen возвращает указатель на структуру FILE. Строка name содержит имя файла. Строка mode определяет способ доступа. Если файл не может быть открыт по какой-либо причине, функция возвращает NULL.
Способы доступа включают:
"r" - чтение,
"w" - запись,
"a" - добавление в конец.
Также способ доступа может включать:
"t" - текстовый,
"b" - бинарный.
Для открытия файла myfile.dat на чтение необходимо:
FILE *stream, *fopen();
/* описание потока и прототипа fopen */
stream = fopen("myfile.dat","r");
Необходимо проверять, что файл открылся:
if ((stream = fopen("myfile.dat", "r")) == NULL)
{ printf("Нельзя открыть %s\n", "myfile.dat");
exit(1); }
4. Закрытие файла
Для того, чтобы закрыть файл, используется функция fclose. Ее синтаксис:
fclose(FILE *stream)
Пример. Ввести матрицу из файла inputfile.dat.
Файл входных данных имеет следующую структуру:
n - количество строк
m - количество столбцов
a a ... a
...
a a ... a,
где
n - количество строк
m - количество стобцов
a - элементы матрицы.
И вывести ее в файл outputfile.dat.
#include <stdio.h> void main(){ int A[100][100]; // массив 100х100 int i,j; // индексы для перемещения по массиву int n; // кол-во строк int m; // кол-во столбцов FILE *fp; // открытие файла на чтение if ((fp = fopen("inputfile.dat", "r")) == NULL) { printf("Нельзя открыть %s\n", "inputfile.dat"); return; } // ввод размеров матрицы fscanf(fp,"%d",&n); fscanf(fp,"%d",&m); // ввод значений матрицы for(i=0;i<n;i++) for(j=0;j<n;j++){ fscanf(fp,"%d",&A[i][j]); } fclose(fp); // открытие файла на запись if ((fp = fopen("outputfile.dat", "w")) == NULL) { printf("Нельзя открыть %s\n", "outputfile.dat"); return; } // вывод значение матрицы for (i=0;i<n;i++){ for (j=0;j<n;j++) fprintf(fp,"%d ",A[i][j]); fprintf(fp,"\n"); } fclose(fp); }