- •Содержание
- •Глава 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.8. Операторы цикла
Оператор цикла DO (аналогичный оператору цикла FOR в языке PASCAL) записывается в виде:
DO[метка]переменная=начальное значение,конечное
значение[,приращение]
Если в операторе задана метка, то последним оператором тела цикла является оператор с такой меткой, если метка не задана, то тело цикла должно заканчиваться специальным оператором END DO. Переменная цикла может иметь любой арифметический тип, кроме комплексного. Начальное, конечное значение и приращение - любые арифметические выражения, кроме комплексных. Если приращение не задано, оно считается равным 1. Последний оператор тела цикла не может быть: безусловным GOTO, GOTO по предписанию, арифметическим IF, блочным IF, оператором DO. Во всех случаях можно последним оператором цикла записывать оператор CONTINUE. Допускаются вложенные циклы, они могут заканчиваться одним и тем же оператором, т.е. иметь одну и ту же метку цикла. Запрещается изменять значение переменной цикла в теле цикла, такая попытка рассматривается как синтаксическая ошибка.
Оператор цикла DO WHILE полностью аналогичен по своему действию оператору While в языке PASCAL :
DO [метка] WHILE(логическое выражение)
Такой цикл может заканчиваться либо меткой, либо оператором END DO. Для выхода из любого типа цикла служит оператор EXIT, выполняющий те же действия, что оператор break в языках C и PASCAL.
Оператор CYCLE завершает текущий шаг цикла и передает управление оператору DO или DO WHILE, он аналогичен оператору continue в языках C и PASCAL.
2.9. Функции loc, locfar, locnear
Язык FORTRAN не дает возможности непосредственно работать с адресами переменных, как в языке PASCAL и, особенно, C. Единственные средства языка, связанные с адресами - это встроенные функции LOC, LOCFAR и LOCNEAR. Они возвращают адрес аргумента (но это может быть не только переменная). Функция LOCFAR возвращает дальний адрес (тип INTEGER*4), функция LOCNEAR - ближний адрес (тип INTEGER*2), а функция LOC эквивалентна в дальней модели памяти LOCFAR, а в ближней модели - LOCNEAR.
2.10. Массивы
Существуют два способа описания массива - описание измерений массива в операторе DIMENSION плюс описание типа элементов массива, или описание измерений массива непосредственно в операторе описания типа. Оператор DIMENSION записывается следующим образом :
DIMENSION имя массива([нижняя граница:]верхняя граница[,...])
Нижняя граница измерения массива по умолчанию равна 1. Оператор DIMENSION никак не определяет тип элемента массива, но только количество и длины его измерений. Границы измерений могут задаваться любыми арифметическими константными выражениями. Если какая-либо граница задана вещественным значением, оно преобразуется к целому отбрасыванием дробной части. Язык FORTRAN не задает никаких ограничений на размер массива и суммарный размер данных программы. Если тип элемента массива должен отличаться от типа, определенного по умолчанию, необходимо явно определить этот тип обычным образом:
тип имя массива
Можно не пользоваться оператором DIMENSION для описания массива, одновременно описывая тип элементов и измерения массива:
тип имя массива([нижняя граница:]верхняя граница[,...])
Инициализировать массивы можно в операторе DATA, так же, как и простые переменные (можно использовать повторители). Элементы многомерных массивов располагаются в памяти не так, как в языках Паскаль и C: первым меняется самый левый индекс. Пусть массив описан как DIMENSION x(3,3), тогда его элементы будут записаны в памяти в таком порядке : x11, x21, x31, x12, x22, x32, x13, x23, x33. Для сравнения такой же массив в программе на Паскале или C : x11, x12, x13, x21, x22, x23, x31, x32, x33. Элементы массива в программе можно использовать так же, как простые переменные соответствующего типа (кроме оператора DO),обращение к элементу массива имеет вид:
имя массива(индексное выражение,...)
Индексное выражение может быть целого или вещественного типа. Массивы можно целиком вводить оператором READ и выводить оператором PRINT. Массиву можно присвоить массив с таким же описателем измерений, тип элементов при этом может быть разным. Массиву можно присвоить скалярное выражение - это присваивание будет выполнено для каждого элемента массива. Массивы могут быть операндами выражений, например, запись PRINT*,SIN(a) вполне корректна. Операция над массивом означает последовательное выполнение этой операции над каждым элементом массива, результат выражения есть массив такой же структуры с элементами соответствующего типа.
При вводе и выводе массивов (и не только массивов) можно задавать так называемые неявные циклы. Неявный цикл ввода-вывода записывается в виде:
(список ввода-вывода,переменная цикла=начало,конец[,приращение])
Переменная цикла, параметры начало, конец и приращение имеют тот же смысл, что и в операторе DO. Список ввода-вывода вводится или выводится столько раз, сколько раз выполняется неявный цикл. Если переменная цикла каким-то образом входит в список ввода-вывода, ее значение изменяется на каждом шаге цикла. Сам список ввода-вывода, в свою очередь, может включать неявные циклы.
