- •Содержание
- •Глава 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.3. Описание переменных, правила умолчания, операторы
IMPLICIT, DATA, PARAMETER
Переменные в языке FORTRAN описываются в виде:
тип имя1 , имя2 , ...
Язык FORTRAN допускает использование нигде не описанных переменных, в этом случае их тип определяется правилами умолчания: идентификаторы, начинающиеся с I, J, K, L, M, N, имеют тип INTEGER, все остальные - тип REAL. Стандартные правила умолчания для неописанных переменных можно изменить с помощью оператора IMPLICIT:
Implicit тип ( буквы ) , ...
Здесь тип - описание типа, буквы - список латинских букв. В списке букв можно использовать конструкцию буква - буква , задающую диапазон, например:
IMPLICIT REAL*8 (D,F-H,W-Z,A), INTEGER*1 (B,C,I-K)
Явное описание типа переменной во всех случаях отменяет правило умолчания для этой переменной. Правила умолчания можно полностью отменить оператором IMPLICIT NONE. Если в программе есть такой оператор, то каждая переменная должна быть явно описана.
Инициализировать переменные, т.е. присвоить им начальные значения можно в операторе DATA :
DATA список имен / список констант /
список имен - это имена переменных, разделенные запятыми, список констант - константы, разделенные запятыми. Несколько повторяющихся значений можно записать в виде повторитель * значение , где повторитель - целая константа, например:
DATA a,b,i,j,k,c /1.2,3.141,2*5,-100,0/,x,y/2*0/
Операторы DATA должны располагаться в тексте программы после всех операторов описания и до первого исполняемого оператора. Переменные также могут инициализироваться непосредственно в операторе описания, например:
REAL a/1.2/, b/3.141/, c/0/, x/0/, y/0/
INTEGER i/5/, j/5/, k/-100/
но в этом случае нельзя инициализировать список имен, каждая переменная должна быть инициализирована отдельно (но повторители при инициализации массивов использовать можно).
Для определения именованных констант служит оператор PARAMETER, аналогичный оператору CONST в языке PASCAL:
PARAMETER ( имя = константное выражение , ... )
Можно предварительно описать тип константы в операторе описания типа, например:
LOGICAL*1 TRUE
REAL*4 b,c
PARAMETER(TRUE=.TRUE.,b=-1.5353,c=2)
PARAMETER(Number=#FF)
Именованные константы могут использоваться точно так же, как и неименованные, в частности, при инициализации переменных в операторах DATA или операторах описания.
2.4. Оператор присваивания. Операции
Оператор присваивания записывается в виде:
имя = выражение
Типы переменной в левой части и выражения в правой части должны быть или оба арифметическими, или оба логическими, или оба символьными. Причем в арифметическом операторе присваивания нет больше никаких ограничений, например, целой переменной можно присвоить комплексное выражение, которое автоматически будет преобразовано к целому типу.
В языке FORTRAN существует пять арифметических операций: сложение + , вычитание - , умножение * , деление / , возведение в степень ** . Операция ** имеет наивысший приоритет и выполняется в последовательности справа налево, остальные операции выполняются слева направо. Операция деления / для вещественных операндов означает вещественное деление, для целых операндов - деление нацело (точно так же, как в языке C). Если операнды арифметической операции имеют разные типы, то они приводятся к одному типу согласно правилу старшинства типов : INTEGER*1 < INTEGER*2 < INTEGER*4 < REAL*4 < REAL*8 < COMPLEX*8 < COMPLEX*16 . Если один операнд имеет тип REAL*8, а второй - COMPLEX*8, то оба они приводятся к типу COMPLEX*16. Кроме того, компилятор следит за корректностью выполнения целочисленных вычислений, поэтому результат арифметической операции над операндами INTEGER*1 будет иметь тип INTEGER*2, а результат арифметической операции над операндами INTEGER*2 будет иметь тип INTEGER*4.
Операции сравнения записываются в виде .LT. - меньше, .LE. - меньше либо равно, .GT. - больше, .GE. - больше либо равно, .EQ. - равно, .NE. - не равно. Они применимы к арифметическим и символьным операндам. Для комплексных операндов определены лишь операции .EQ. и .NE. Результат операции сравнения имеет тип LOGICAL.
Логические операции применимы к логическим операндам и записываются в виде .NOT. - логическое отрицание, .AND. - логическое “и”, .OR. - логическое “или” , .EQV. - эквивалентно, .NEQV. - не эквивалентно; обратите внимание, что ни одна операция сравнения, в том числе .EQ. и .NE., к логическим операндам неприменима.
Для символьных операндов определена только одна операция - операция сцепления // .
Приоритеты операций в языке FORTRAN определены следующим образом : ** > { * , / } > { + , - } > // > {.EQ. , .NE. , .LT. , .LE. , .GT. , .GE.} > .NOT. > .AND. > .OR. > .EQV. > .NEQV.
