- •Содержание
- •Глава 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.16. Структуры, объединения, битовые поля
Структура - это объединенное в единое целое множество семантически связанных именованных элементов разных типов (аналог записей в языке PASCAL). Существует несколько вариантов описания структур, во многих случаях при этом используется структурный шаблон. Структурный шаблон описывается в виде:
struct имя шаблона { описания элементов } ;
Элементы структуры, описываемые в таком операторе - это то же самое, что поля записей в языке PASCAL. Структурную переменную можно описать, используя предварительно описанный шаблон:
struct имя шаблона имена переменных ;
Можно объединить описания шаблона и переменной:
struct имя шаблона { описания элементов } имена переменных ;
или
struct { описания элементов } имена переменных ;
В этом случае шаблон может и не иметь имени. Имя шаблона не является именем типа, его нельзя использовать в описаниях без слова struct, но можно дать имя структурному типу, используя оператор typedef.
Структуры, как и любые другие переменные, можно инициализировать. Допускаются массивы структур, вложенные структуры и указатели на структуры. Пример описания структурных переменных:
struct st1 {int Num; unsigned char Ch; char St[64];};
struct st1 a={-11,'H',"123456789"}, b={0,'U',""},
c={777,'\a',"This is C structure"}, *p1=&c;
Обращение к элементу структуры осуществляется так же, как в языке PASCAL :
имя структуры . имя элемента
Для указателей на структуры определена специальная операция косвенной адресации: -> , которая имеет самый высокий приоритет среди всех операций, она используется для обращения к элементу структуры по адресу:
указатель -> имя элемента
Например: p1->Ch , p1->St[0] . Можно заменить операцию косвенной адресации операцией "значение": (*p1).Ch , (*p1).St[0] .
В смысле взаимодействия с функциями структуры рассматриваются как скалярные объекты, поэтому допускаются параметры функций - структуры и функции, возвращающие структуры. Для однотипных структур определена операция присваивания = . К структурным переменным применима операция “адрес” &.
Объединение - это объект, который может содержать (попеременно) данные разных типов (фактически объединение является структурой, все элементы которой имеют нулевое смещение относительно ее базового адреса). Для объединения резервируется память по самому большому элементу. Полным аналогом объединений являются вариантные поля записей в языке PASCAL.
Описание объединений и обращение к их элементам аналогично соответствующим действиям со структурами, но при этом ключевое слово struct заменяется на union. Инициализировать объединение можно только значением, имеющим тип первого из его элементов.
Битовое поле - это последовательность битов, лежащих внутри одного или нескольких машинных слов. Описание поля имеет вид:
struct { [ тип ] [ имя ] : длина ; .................... } ;
Тип элемента поля всегда int или unsigned. Неименованные элементы можно использовать для выравнивания (пропуска битов). Например, опишем объект, позволяющий осуществлять прямой доступ к любому биту младшего байта слова и к старшему биту:
struct BitStr { unsigned b1:1; unsigned b2:1; unsigned b3:1; unsigned b4:1;
unsigned b5:1; unsigned b6:1; unsigned b7:1; unsigned b8:1; :7; unsigned UP:1; };
union Word { unsigned N; struct BitStr b;};
union Word Number={0X3FE6};
printf("%u%u%u%u%u%u%u%u",Number.b.b1,Number.b.b2, Number.b.b3, Number.b.b4,Number.b.b5,Number.b.b6,Number.b.b7,Number.b.b8);
printf(" Up bit=%u",Number.b.UP);
В арифметических выражениях элементы битовых полей рассматриваются как целые числа.
