- •Содержание
- •Глава 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. Собственное число
- •Комментарии к задачам
2.6. Ввод-вывод
Язык FORTRAN предоставляет средства для бесформатного и форматного ввода-вывода данных. Вывод на экран осуществляется оператором
PRINT формат , список вывода
формат - это или строка формата, или метка формата, или символ *, что означает вывод без форматирования; список вывода - это любое количество произвольных выражений, разделенных запятыми. Логические данные при выводе изображаются буквами T и F. Для ввода с клавиатуры служит оператор
READ формат , список ввода
В списке ввода могут быть только имена переменных. Вводимые с клавиатуры данные могут разделяться пробелами и (или) запятыми. Вводимые логические значения обозначаются буквами T и F (любой последовательностью символов, начинающейся с T или F).
Метка формата - это метка специального оператора FORMAT :
метка FORMAT( список форматов )
Этот оператор является невыполняемым и может стоять в любом месте программы. Список форматов есть последовательность элементов формата (называемых также для краткости форматами), разделенных запятыми. Список форматов очень похож по своей структуре на строку формата функции printf в языке C. Он может содержать форматы данных и управляющие элементы формата. Существуют следующие форматы данных:
Формат |
Тип данных |
Синтаксис |
I |
целые |
In / In.c |
F |
вещественные |
Fn.d |
E |
вещественные |
En.d / En.d.e |
D |
REAL*8 |
Dn.d |
G |
вещественные |
Gn.d / Gd.e |
A |
символьные |
A / An |
L |
логические |
Ln |
Z |
любые данные |
Z / Zn |
Здесь n - размер поля вывода, т.е. количество позиций, отведенных для вывода значения, c - количество выводимых цифр числа, d - количество дробных цифр, e - количество цифр порядка. Если в формате I задано количество цифр и оно больше, чем количество цифр в выводимом значении, то число дополняется слева нулями, если оно меньше, чем необходимо, то данный параметр игнорируется. Если при выводе по форматам I,F,E,D,G задан слишком маленький размер поля, то выводятся только символы *. Вещественные числа с плавающей точкой представляются при выводе в виде: знак. мантисса E знак порядка порядок . По формату Z все данные выводятся в их внутреннем представлении и изображаются 16-ричным числом.
Форматов в списке может быть меньше или больше, чем выводимых значений. Если форматов больше, то неиспользованные форматы игнорируются. Если форматов меньше, то список форматов используется многократно, но каждое исчерпание списка форматов означает переход на новую строку.
Любой формат данных может иметь повторитель - целую константу, которая записывается непосредственно перед форматом, например, 5F12.7. Можно записывать повторители для групп форматов, тогда форматы, входящие в группу, заключаются в круглые скобки, такие скобочные конструкции могут быть вложенными, например, 3(2F10.2,E12.3E1,4(I6.5))
Существуют следующие управляющие форматы :
‘строка’ - “строка” - вывод строки,
nHсимволы - “литерал” - вывод n символов,
/ - переход на следующую строку,
nX - вывод n пробелов,
Tn - переход на n-ю позицию,
TLn - смещение влево на n позиций,
TRn - смещение вправо на n позиций,
SP - включение режима вывода знака + для чисел,
SS - выключение режима вывода знака + для чисел.
Символ / сам служит разделителем, поэтому в списке форматов его можно не отделять запятыми. Кроме того, первый символ выводимой строки всегда считается управляющим и не изображается на экране. Значение управляющего символа таково:
0 - пропуск строки,
+ - вывод на ту же строку,
остальные - переход на новую строку.
Каждый новый оператор PRINT всегда начинает вывод с начала новой строки.
Форматный ввод с клавиатуры не очень удобен и используется редко (за исключением формата A), главным образом форматный ввод применяется при чтении файлов. При вводе запрещены управляющие форматы “строка” и “литерал”, управляющие форматы SP и SS игнорируются. Форматы Tn, TLn, TRn, / действуют точно так же, как и при выводе, формат nX пропускает n позиций во входном потоке. При вводе чисел можно использовать управляющие форматы:
BN - игнорирование пробелов внутри числа (действует по умолчанию),
BZ - интерпретация пробелов внутри числа как нулей,
kP - умножение введенного значения на 10-k.
Формат kP также используется при выводе чисел по формату F, в этом случае он означает умножение выводимого значения на 10k. Действие форматов данных при вводе таково:
- формат In (второй параметр игнорируется) - целое число вводится из очередных n позиций;
- форматы Fn.d , En.d , Dn.d , Gn.d (все форматы при вводе идентичны, параметр e игнорируется) - вещественное число вводится из очередных n позиций, если в константе нет десятичной точки, то последние d цифр интерпретируются как дробные;
- формат A - значение символьной переменной (без апострофов) считывается до конца строки, при необходимости усекается справа;
- формат An - значение символьной переменной (без апострофов) считывается из очередных n позиций, при необходимости усекается слева;
- формат Ln - логическое значение считывается из очередных n позиций, оно может представляться любой последовательностью символов, начинающейся буквой T(t) или F(f), перед этой буквой может быть символ “.” и любое количество пробелов.
- форматы Z , Zn - 16-ричное значение вводится до конца строки или из очередных n позиций и передается в память, занимаемую переменной; так же, как для формата A, если n не задано, то вводимое значение усекается справа, если задано, то слева. Если, напротив, вводимое значение слишком короткое, то оно дополняется слева нулями.
Бесформатный ввод осуществляется почти так же, как в языке PASCAL: данные во входном потоке разделяются любым количеством пробелов или запятыми, числовые константы представляются в любом корректном виде, но символьные константы нужно заключать в апострофы. Каждый оператор READ всегда начинает ввод с новой строки.
Формат можно задать и непосредственно в операторах PRINT и READ, для этого вместо метки формата записывается строка ‘(список форматов)’, список форматов - точно такой же, как в операторе FORMAT, круглые скобки и апострофы обязательны.
