- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Порядок выполнения операций
Изменение порядка выполнения операций в выражении может привести к различным результатам, следовательно, требуется ввести набор непротиворечивых правил, определяющих порядок действий. В С(С++) это осуществляется путем задания приоритета той или иной операции. Приоритет - это уровень старшинства (первоочередности выполнения) операции. Если несколько операций имеют один и тот же уровень приоритета, то они выполняются в том порядке, в котором записаны в операторе (выражении). Операции деления и умножения имеют более высокий приоритет по сравнению со сложением и вычитанием. Это означает, что в операторе i=35*j-k вначале выполняется 35*j, затем из полученного значения вычитается k. Если требуется, чтобы сложение или (и) вычитание в операторе выполнялось ранее деления и умножения, необходимо использовать механизм скобок. Так, в операторе i=35*(j+k) вначале выполняется (j+k), затем умножение.
Приоритет операций
В приведенной ниже табл.5 показан приоритет (порядок вычисления) операций языка С(С++). Операции упорядочены по приоритету сверху вниз.
Необходимо отметить, что если в вычисляемом выражении (или его некоторой части) скобки отсутствуют, то порядок вычисления составляющих его
Таблица 5.
|
Операция |
Приоритет |
|
|
() [] -> . |
слева направо |
|
|
! ~ ++ — + - * & sizeof |
справа налево |
|
|
* / % |
слева направо |
|
|
+ - |
слева направо |
|
|
<< >> |
слева направо |
|
|
< <= > >= |
слева направо |
|
|
== != |
слева направо |
|
|
& |
слева направо |
|
|
^ |
слева направо |
|
|
| |
слева направо |
|
|
&& |
слева направо |
|
|
|| |
слева направо |
|
|
?: |
справа налево |
|
|
= += -= *= /= %= &= ^= |= <<= >>= |
слева направо |
|
операндов в С(С++) (как и в ряде других языков) не фиксирован. Это означает, что если в выражении х=операнд1 + операнд2 значение операнда1 влияет на величину операнда2, то не обязательно значение операнда1 будет вычислено ранее операнда2.
Порядок вычисления аргументов функции также не определен и на разных компиляторах может давать несовпадающие результаты.
printf(“%d %d”,n++,n+i);
Во избежание этого эффекта до входа в функцию все операнды, влияющие друг на друга, должны быть вычислены.
n++;
printf(”%d %d”,n,n+i);