Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интегрирование Глава 3.doc
Скачиваний:
3
Добавлен:
12.11.2018
Размер:
986.62 Кб
Скачать
        1. Арифметические выражения

Арифметические выражения используются для программирования правых частей равенств.

Арифметическое выражение – совокупность операндов, соединенных знаками арифметических действий и разделенных, в случае необходимости, круглыми скобками.

В качестве операндов используются простейшие конструкции (данные) – константы, переменные, вызовы функций.

Под операциями подразумеваются арифметические действия.

В Си/Си++ существует большой набор операций, классифицируемых в большинстве случаев на унарные и бинарные.

Унарная – операция для обработки одного операнда.

Например, унарные операции используют для формирования знаковых констант (разд. 3.5.2.2).

Бинарная – операция с использованием двух операндов.

В арифметических выражениях используются унарные и бинарные операции.

К бинарным операциям относятся арифметические действия:

+ сложение;

- вычитание;

* умножение;

/ деление;

% взятие остатка (деление по модулю).

По способу машинного выполнения две первые операции называются аддитивными, три остальные – мультипликативными.

Результат вычисления любого арифметического выражения – константа. Поэтому, в языке Си/Си++ арифметическое выражение называется константным.

Правила записи и вычисления арифметических выражений

  1. Арифметические выражения записываются одноэтажно. Например, 0.35+а*2-cos(b)/(PI+2).

  2. Все знаки арифметических операций указываются явно. Например, А+В+С не равно АВ+С, так как во втором случае подразумевается переменная с именем АВ, а не две переменные.

  3. Запись подряд двух знаков операций, как правило, запрещается (исключение см. разд. 6.2.1). Обойти это правило можно с помощью круглых скобок. Например, a*(-b).

  4. Арифметическое выражение может быть любой сложности. Минимально может состоять из одного операнда. Реально определяется математической моделью задачи. Если зависимости математической модели относительно громоздки, рекомендуется представлять одну сложную зависимость несколькими простыми, – содержащими не более 5–7 операций в каждой.

  5. Последовательность выполнения операций в арифметическом выражении соответствует принятой в математике:

  • выражения в скобках;

  • вычисления функций;

  • умножения, деления;

  • сложения, вычитания.

Например, выражение 0.2-cos(0.5)*pow(v,3) выполняется в следующем порядке: вычисление косинуса, возведение v в куб, умножение первого результата на второй и, наконец, вычитание из константы 0.2 константы, полученной после умножения.

  1. Одноранговые операции выполняются слева направо. Например, выражение А*В/С*3 будет выполняться в порядке записи.

  2. При необходимости нарушить последовательность выполнения действий используют скобки. Например, А+В/(С+D) или (0.2-v)*cos(0.5).

  3. При делении целого операнда на целый от частного используется только целая часть. Так, результатом вычисления 5/2 будет целая константа 2, а выражения 2/5 – ноль. Для получения истинного результата необходимо сделать вещественными оба операнда или один из них. Например, 5./2. или 5./2 (5/2.).

  4. Возведение в степень (pow(a,x)), если показатель (х) целочисленный, выполняется методом последовательного умножения. Если показатель степени вещественный, возведение осуществляется по формуле ax = еxlna. Использование функций (экспоненты и логарифма) приводит к получению приближенного значения результата.

  5. В арифметическом выражении желательно использовать операнды одного типа. Например, i+23*k, если переменные i, k – целые или x*2.-0.36/cos(y), если переменные x, y – вещественные. В первом случае результатом будет целая константа, во втором – вещественная константа двойной точности (перед использованием автоматически все вещественные операнды приводятся к типу double).

  6. Допускается применение смешанных арифметических выражений. При этом наличие хотя бы одного вещественного операнда приводит к получению результата (константы) с двойной точностью. Например, при вычислении выражения 4/z+i*k-0.07*sin(3./b) результатом будет вещественная константа двойной точности, если переменные i, k – целые, а z, b – вещественные. Аналогично, возможно получение дробного результата деления целых переменных использованием дополнительного операнда в виде вещественной константы (1.). Так, если переменные i и k описаны как целые, то результат выражения i/k есть целая константа (целая часть частного), а результат выражения i*1./k есть вещественная константа двойной точности. Следует помнить, что наличие операции деления двух целых операндов в смешанном выражении может привести к неверному результату. Например, вычисление выражения 0.02 + 3/5 - 0.01 дает неверный результат (0.01), так как второе слагаемое (частное от деления целой константы 3 на целую константу 5) равно нулю.

  7. Деление по модулю % используют в целочисленной арифметике. Результат операции– остаток от деления целого операнда, записанного слева от знака операции, на операнд справа от него. Например, выражение 13%5 дает результат 3, поскольку 13=5*2+3, где 3 – остаток от деления.

  8. Вычисление корня n-ой степени при n>2 требует предварительного преобразования его к виду , а затем использование функции возведения в степень. Например, зависимость должна быть преобразована к виду , а затем сформирована как вызов функции pow(x,1./3.) Попытка вычисления функции вида pow(x,1/3) приведет к получению неверного результата – единицы, так как показатель степени (1/3) после деления станет равен нулю.

  • Внимание! Сообщения об ошибках, возможных при выполнении арифметических выражений (например, переполнение разрядной сетки), как правило, не выдаются.

Изучение выражений завершает рассмотрение простейших и промежуточных конструкций языка.

      1. Основные конструкции Си/Си++

Оператор – основная конструкция большинства языков высокого уровня.

Оператор соответствует предложению в разговорном языке.

Каждый блок схемы алгоритма реализуется одним или несколькими операторами. Следовательно, совокупность операторов образует программу.

Программа на языке высокого уровня – последовательность операторов, выполняемых в порядке их записи.

В языке Си/Си++ базовой конструкцией является функция (разд. 3.5.2.4), что позволяет представлять любые участки вычислений структурировано (блочно). Поэтому некоторые операторы языка Си/Си++ есть функции, оформленные специальным образом.

  • Внимание! Отличительный признак оператора – завершающий его символ «точка с запятой».

По критерию значимость все операторы можно классифицировать схемой рис. 3.7.

Рис. 3.7. Классификация операторов

Неисполняемые – операторы-описатели не вызывающие действий в программе.

Исполняемые – операторы, предписывающие конкретные действия обработки информации в программе.

Неисполняемые операторы – вспомогательные конструкции алгоритмических языков.

Большинство из них – описатели типов операндов-переменных, участвующих в задаче.

Классификация операторов описателей представлена на рис. 3.8.

Рис. 3.8. Классификация операторов описателей

Назначение, структура, правила использования описателей изложены выше (разд. 3.5.2.3).

Исполняемые операторы – основные конструкции, формирующие программу.

Каждый из них при выполнении программы предписывает полную (частичную) реализацию указаний, соответствующего блока схемы алгоритма. Такими блоками являются ввод исходных данных, вывод результатов, вычисления по формулам, проверка условий, формирование циклов и т.п.

Укрупненно по критерию назначение исполняемые операторы классифицируются схемой (рис. 3.9).

Операторы присваивания – программные аналоги формульных вычислений алгоритма.

Операторы ввода-вывода – программные аналоги предписаний соответствующих блоков схем алгоритма. Их разнообразие обусловлено значительным диапазоном внешних устройств, используемых для обмена данными между пользователем и

Рис. 3.9. Классификация исполняемых операторов

ЭВМ (ручной ввод с клавиатуры, вывод на экран дисплея, в поток и т.п.).

Операторы управления – программные аналоги предписаний соответствующих блоков схем алгоритмов (решение, начало и конец цикла, модификация, предопределенный процесс и т.п.).

Операторы присваивания, ввода-вывода информации – обязательный элемент конструкции практически любого вычислительного процесса, начиная с простейшего – линейного. Операторы управления – специфические конструкции, организующие основные операции ветвящихся, циклических, смешанных процессов. Значительное разнообразие операторов управления обусловлено конкретными особенностями этих процессов. Назначение, структуры, правила записи и использования различных операторов управления рассматриваются в соответствующих разделах (гл. 4, 5).

Рассмотрим операторы, используемые в программировании линейных вычислительных процессов.