- •Программирование на языке высокого уровня
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Ввод-вывод данных в стиле с
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения):
- •Функция очистки экрана результатов:
- •Выражения и операции
- •Логические выражения и операции.
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель.
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
Выражения и операции
Выражение – это комбинация операндов, знаков операций и круглых скобок, используемая для получения значения определенного типа. Операндом (участником операции) может быть константа, переменная, функция или другое выражение. Знаки операции определяют действия (элементарные операции) над операндами в порядке, заданном приоритетами операций и круглыми скобками, которые образуют вложенные подвыражения. Вычисление выражения начинается с самых внутренних скобок.
Унарные операции (с одним операндом) имеют приоритет над бинарными (с двумя операндами). Мультипликативные операции (умножение, деление, в том числе и деление нацело, деление по модулю (%)) старше аддитивных (сложение, вычитание), за которыми идут операции отношения и логические операции [1, c.40].
Функции в выражении вычисляются для получения значения, участвующего в операции. Для использования стандартных математических функций в программе необходимо подключить их командой препроцессора
#include<math.h> .
Для аргументов функций, которые имеют тип: int i; unsigned int u; double x, y; наиболее используемы в выражениях следующие функции [1, c.48]: sin(x) ~ sin x; cos(x) ~ cos x; tan(x) ~ tg x; acos(x) ~ arccos x; asin (x) ~ arcsin x ; atan(x) ~ arctg x; fabs(x) ~ | x | для вещественного x (результат double); abs(i) ~ | i | - для целого i (результат int); log(x) ~ ln x; log10(x) ~ lg x; exp(x) ~ ex, где e – основание натурального логарифма (2.7); sqrt(x) ~ √x, floor(x) ~ наибольшее целое число <= x (результат double); ceil(x) ~ наименьшее целое число >= x (результат double); srand(u) ~ инициализация генератора случайных чисел (результат double); rand ~ равномерное псевдослучайное число от 0 до 232-1 (результат int).
Аргументы функции любой сложности, включая и вложенные функции, должны заключаться в круглые скобки после имени функции.
Общее правило вычисления выражения: перед вычислением все входящие в него переменные должны быть определены, то есть должны иметь численные значения.
По роли, выполняемой в программе, выражения можно разделить на арифметические и логические.
Арифметические выражения и операции.
Арифметические выражения представляют собой запись на языке С в одну строку (или более) математической формулы с учетом порядка вычисления выражения и старшинства операций с целью получения числового значения (целого или вещественного). Например,
математическая формула: |
арифметическое выражение: |
|
a*sin(x)/sqrt(x*x+fabs(x-a)) |
|
(a+b)/(2*p-q) |
|
a/(-2) |
Выражение можно переносить на другую строку без повторения знака операций в отличие от записи математической формулы, но нельзя опускать знаки операций:
a+b sin t – 2cos t |
a+b*sin(t) – 2*cos(t) |
Результат выражения определяется выполняемыми операциями с учетом преобразования типов операндов неявного (автоматического) и явного.
Неявное преобразование типов операндов осуществляет изменение типа участвующих в операциях операндов к типу операнда с наибольшим размером (“старший тип”). Перечислим типы данных, начиная со старшего:
long double – длинный вещественный с двойной точностью (10 байт);
double – вещественный с двойной точностью (8 байт );
float – вещественный (4 байта);
unsigned long – длинный беззнаковый целый (4 байта);
long int – длинный целый (4 байта);
unsigned – беззнаковый целый (2 байта);
int – целый; (2 байта)
char – символьный (1 байт ).
Например, для заданных описаний:
double p; unsigned char ch; unsigned long m; int i;
при вычислении выражения p*(i+ch/m) операнд сh преобразуется к типу unsigned long, к которому преобразуется также операнд i и результат в скобках, затем последний преобразуется к типу double и результат выражения будет иметь тип double.
Явное преобразование типа операнда осуществляется программистом с помощью операции вида
(тип) выражение, если без такого преобразования результат выражения будет неверный.
Деление целых операндов дает результат целого типа, что может привести к неожиданным результатам.
Например, пусть описана переменная int k = 7, тогда при вычислении выражения k / 2 получим в результате 3, вместо ожидаемого 3.5. Применив преобразование типа переменной k: (float) k / 2, получим нужный результат 3.5. Этот же результат можно получить, применяя смешанные (разного типа) операнды: k / 2.0.