- •Укороченный язык си
- •Порядок обработки информации машиной с целью получения программы
- •Элементы языка си
- •История языка
- •Понятие языка программирования
- •Основные понятия языка программирования
- •Основные символы языка
- •Ключевые слова
- •Использование комментариев в тексте программы
- •Описательные и выполняемые операторы языка
- •Понятие идентификатора
- •Переменные и базовые типы данных
- •Константы
- •Указатели
- •Типы структурированных переменных
- •Массивы
- •Структуры
- •Структура программ
- •Составные части программы
- •Функции в языке си
- •Понятие модуля
- •Арифметические выражения и присваивания
- •Арифметические выражения
- •Приоритет арифметических операций
- •Преобразования типов при вычислении выражений
- •Странные операторы присваивания
- •Сокращенная запись арифметических выражений
- •Логические выражения
- •Операция sizeof
- •Программирование вычислительных структур
- •Исполняемые операторы
- •Структура альтернатива
- •Структура повторение
-
Понятие модуля
Модуль – фундаментальное понятие и функциональный элемент технологии структурного программирования.
Чтобы функция стала модулем, ее надо оформить особым образом.
Модулю должны быть приданы следующие свойства:
1) выполнять строго однозначную функцию (от слова функционирование), например "расчет зарплаты", но не "расчет зарплаты и расчет значения синуса";
2) иметь один вход;
3) иметь один выход;
4) вызывать при необходимости другие модули;
5) обеспечивать раздельную от текста других модулей компиляцию, при которой «забываются» все обозначения внутренних идентификаторов (кроме имени самого модуля и имен вызываемых модулей), что облегчает коллективное написание больших программ при отсутствии необходимости согласования внутренних имен;
6) длина текста модуля должны быть обозрима (Рекомендуемая длина модуля 25 или 60 строк, но модуль может включать только один выполняемый оператор или иметь длину до 200 строк);
7) текст модуля должен быть самодокументированным (оформлен в единообразном для всей программы стиле, содержать необходимые комментарии, а также его код должен состоять только из стандартных вычислительных структур).
Свойства 1-5 обеспечиваются особенностями языка Pascal. Свойства 6-7 обеспечиваются квалификацией программиста.
Следствие: модуль не использует значений глобальных переменных или их использует очень ограниченно.
При проектировании модульной структуры программы используются схемы иерархии (подчиненности) модулей, рисунок 2:

Рисунок 2 – схема иерархии модулей программы вычисления значения куба числа.
Схема иерархии отражает только подчиненность модулей и не отражает ни порядка их вызова, ни количества их вызовов. Схема иерархии дополняется расшифровкой наименований модулей и их назначения.
Описание отдельного модуля включает описание его спецификации модуля, содержит описание алгоритма модуля, а также список модулей, вызываемых данным модулем.
-
Арифметические выражения и присваивания
-
Арифметические выражения
-
Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.
В языке СИ присваивание также является выражением, и значением такого выражения является величина, которая присваивается. Рассмотрим примеры операторов присваивания:
j = 3 + i;
j = i = 5;
j = 2 + i = 3;
В последнем примере использование присваивания i = 3 не наглядное, такие присваивания лучше не использовать!
Операнд – это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.
Если в качестве операнда используется константа, то ему соответствует значение и тип представляющей его константы. Целая константа может быть типа int, long, unsigned int, unsigned long, в зависимости от ее значения и от формы записи. Символьная константа имеет тип int. Константа с плавающей точкой всегда имеет тип double.
При вычислении выражений тип каждого операнда может быть преобразован к другому типу. Преобразования типов могут быть неявными, при выполнении операций и вызовов функций, или явными, при выполнении операций приведения типов.
Итак, арифметические выражения, стоящие в правой части оператора присваивания, могут содержать:
-
целые и вещественные переменные;
-
целые и вещественные числа (в вещественных числах целая и дробная часть разделяются точкой, а не запятой, как это принято в математике);
-
знаки арифметических действий;
-
вызовы функций;
-
круглые скобки для изменения порядка действий.
Знаки арифметических действий:
+ - сложение, вычитание;
* / умножение, деление;
% остаток от деления значений целых типов.
Вызовы функций, например, математических, определяемых в <math.h>.
abs(i) модуль целого числа i;
fabs(x) модуль вещественного числа x;
sqrt(x) квадратный корень из вещественного числа x;
sin(x) вычисление синуса вещественного числа x;
cos(x) вычисление косинуса вещественного числа x;
exp(x) вычисление экспоненты вещественного числа x;
ln(x) вычисление натурального логарифма вещественного числа x.
При использовании деления надо помнить, что:
-
при делении целого числа на целое остаток от деления отбрасывается, таким образом, 7/4 будет равно 1.
-
если же надо получить вещественное число и не отбрасывать остаток, делимое или делитель надо преобразовать к вещественной форме.
Например:
int i, n;
float x;
i = 7;
x = i / 4; // x=1, делится целое на целое
x = i % 4; // x=3, остаток от деления целого на целое
x = i / 4.; // x=1.75, делится целое на дробное
x =(float) i / 4; // x=1.75, делится дробное на целое
n = 7. / 4.; // n=1, результат записывается в
// целую переменную
Здесь (float) i – явное преобразование типа целый в вещественный тип.
Операция арифметического отрицания (-) вырабатывает отрицание своего операнда. Операнд должен быть целой или плавающей величиной. При выполнении осуществляются обычные арифметические преобразования.
Пример:
double u = 5;
u = -u; /* переменной u присваивается ее отрицание,
т.е. u принимает значение -5 */
