- •Содержание
- •Глава 1. Описание языка c ......................................................................... 5
- •Глава 2. Описание языка fortran ....................................................... 38
- •Глава 3. Решение задач на языках c и fortran ................................ 70
- •Глава 1. Описание языка c
- •1.1. Структура c-программы
- •1.2. Скалярные типы данных и константы, строковые константы
- •1.3. Описание скалярных переменных. Директива #define
- •1.4. Операции. Выражения
- •1.5. Стандартные математические функции
- •1.6. Ввод-вывод
- •Int printf ( строка формата [ , список вывода ] )
- •Int scanf ( строка формата , список ввода )
- •1.7. Метки, оператор goto, условные конструкции, оператор break, функция exit
- •If ( логическое выражение ) оператор/блок [ else оператор/блок ]
- •1.8. Циклические конструкции
- •1.9. Указатели, адресная арифметика
- •1.10. Массивы
- •1.11. Функции
- •1.12. Классы памяти. Общие правила описания. Оператор typedef
- •1.13. Строковые переменные, ввод-вывод строк, стандартные функции обработки строк. Функции проверки символов
- •Int sprintf(char* s,char* формат [ , список вывода ] )
- •1.14. Макроопределения
- •1.15. Внешние файлы
- •Int fclose(file* указатель на файл )
- •Int feof(file* файл )
- •1.16. Структуры, объединения, битовые поля
- •1.17. Динамическое распределение памяти
- •1.18. Графика
- •Глава 2. Описание языка fortran
- •2.1. Структура fortran-программы
- •2.2. Типы данных. Константы
- •2.3. Описание переменных, правила умолчания, операторы
- •Implicit тип ( буквы ) , ...
- •2.4. Оператор присваивания. Операции
- •2.5. Стандартные математические функции
- •2.6. Ввод-вывод
- •2.7. Оператор соntinue. Операторы перехода. Условные операторы
- •If (логическое выражение)оператор
- •If (арифметическое выражение)метка1,метка2,метка3
- •2.8. Операторы цикла
- •2.9. Функции loc, locfar, locnear
- •2.10. Массивы
- •2.11. Подпрограммы subroutine, function и interface
- •Intrinsic список имен
- •2.12. Общие области, подпрограмма block data. Оператор equivalence
- •2.13. Символьные переменные
- •2.14. Операторные функции
- •2.15. Внешние файлы
- •2.16. Структуры
- •2.17. Динамические массивы
- •2.18. Графика
- •Глава 3. Решение задач на языках c и fortran
- •Задача 1. Вывод натурального числа
- •Задача 2. Сумма ряда
- •Задача 3. Медленная сортировка
- •Задача 4. Быстрая сортировка
- •Задача 5. Слова
- •Задача 6. График
- •Задача 7. Кубическое уравнение
- •Задача 8. Собственное число
- •Комментарии к задачам
1.15. Внешние файлы
Для работы с внешними файлами в языке C используются указатели на файл, которые имеют тип FILE* , они аналогичны по своему назначению переменным типа FILE, TEXT или FILE OF тип в языке PASCAL.
Для открытия файла служит функция
FILE* fopen(char * имя файла , char* режим доступа )
которая возвращает указатель на файл или нулевой адрес NULL при возникновении ошибки. Существуют следующие режимы доступа:
“r” - текстовый файл для чтения;
“w” - текстовый файл для записи;
“a” - текстовый файл для записи в конец файла;
“r+” - текстовый файл для чтения и записи;
“w+” - новый текстовый файл для записи и чтения;
“a+” - текстовый файл с любым режимом доступа.
Модификатор b в конце режима доступа означает бинарный файл с соответствующим режимом доступа. Функция fopen выполняет те же действия, что пара процедур Assign и Reset/Rewrite/Append в языке PASCAL.
Закрытие файла осуществляется функцией
Int fclose(file* указатель на файл )
которая возвращает 0 при успешном завершении или EOF (=-1) при ошибке.
Функция
Int feof(file* файл )
возвращает ненулевое значение, если достигнут конец файла.
Посимвольный ввод-вывод в файл осуществляется функциями:
int fgetc(FILE* указатель на файл ) - возвращает введенный символ или EOF;
int fputc(int символ , FILE* указатель на файл ) - возвращает записанный символ или EOF.
Форматный ввод-вывод в файл осуществляется функциями:
int fscanf(FILE* указатель на файл , char* формат , список ввода ) - возвращает количество введенных значений или EOF;
int fprintf(FILE* указатель на файл , char* формат [ , список вывода ] ) - возвращает количество записанных символов или EOF.
Без всяких затруднений, так же, как в языке PASCAL, можно читать из текстового файла числа функцией fscanf.
Строковый ввод-вывод в файл осуществляется функциями:
char* fgets(char* строка , int n, FILE* указатель на файл ) - читает не более n-1 символов, прекращает чтение при достижении символа '\n', добавляет в строку символ '\0', возвращает введенную строку или NULL , если произошла ошибка или достигнут конец файла;
int fputs(char* строка , FILE* указатель на файл ) - записывает строку в файл, возвращает последний записанный символ или EOF в случае ошибки. Функция не записывает символ '\n'.
Указатели на стандартные файлы ввода и вывода stdin и stdout автоматически инициализируются в начале выполнения программы и могут быть использованы без каких-либо дополнительных описаний. Задав в качестве указателя на файл stdin в функциях fgetc, fscanf, fgets, мы получим соответственно функции getchar, scanf и gets для ввода с клавиатуры; использовав stdout в fputc, fprintf и fputs, получим соответственно putchar, printf и puts для вывода на экран.
С любыми файлами, в том числе и с текстовыми, можно работать как с файлами прямого доступа, используя функции:
void rewind(FILE* файл ) - устанавливает текущую позицию на начало файла, аналогична процедуре Reset в языке PASCAL;
long ftell(FILE* файл ) - возвращает текущую позицию в файле, аналогична функции FilePos в языке PASCAL;
int fseek(FILE* файл , long смещение , int начало ) - позиционирует файл, аргумент начало принимает одно из трех значений : SEEK_SET - от начала файла, SEEK_CUR - от текущей позиции, SEEK_END - от конца файла (смещение можно задавать со знаком). Возвращает 0 при успешном завершении и ненулевое значение при ошибке. Аналогична процедуре Seek в языке PASCAL.
Ввод-вывод в бинарные файлы осуществляется функциями:
size_t fread(void* буфер , size_t r, size_t n, FILE* файл ) - читает не более n записей длиной r , помещая их в память начиная с адреса буфер, возвращает количество считанных записей, аналогична процедуре BlockRead в языке PASCAL;
size_t fwrite(void* буфер , size_t r, size_t n, FILE* файл ) - записывает из памяти начиная с адреса буфер n записей длиной r в файл, возвращает количество записанных записей, аналогична процедуре BlockWrite в языке PASCAL.
