- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Операции и выражения
В программах широко используются выражения, состоящие из одного или более операндов, объединенных знаками операций. Операции – это специальные комбинации символов, специфицирующие действия по преобразованию различных величин. Компилятор интерпретирует каждую из этих комбинаций как самостоятельную единицу, называемую лексемой. В качестве операндов могут быть использованы переменные, константы или другие выражения. Имеются три основных класса операций: арифметические, отношения (логические), побитовые. Различают операции унарные (с не более чем одним операндом) и бинарные (с двумя и более операндами). Рассмотрим основные операции, используемые в С(С++). Операции должны использоваться точно так, как они представлены в таблице: без пробельных символов между символами в тех операциях, которые представлены несколькими символами.
Таблица 4.
Знак операции |
Наименование операции |
Пример |
Арифметические операции |
||
+ |
Сложение |
a= b + c; если b=6, c=4, то a=10 |
- |
Вычитание |
a= b - c; если b=3, c=8, то a= -5 |
- |
Арифметическое отрицание |
a= - b; если b=132, то a= -132 |
* |
Умножение |
a= b * c; если b=2, c=4, то a= 8 |
/ |
Деление |
a= b / c; если b=7.0, c=2.0, то a= 3.5 |
% |
Остаток от деления |
a= b % c; если b=10, c=3, то a= 1 |
Логические операции |
||
&& |
Логическое “И” (конъюнкция) |
a= b && c; если b и c не равны нулю, то a=1, в противном случае a=0 |
|| |
Логическое “ИЛИ” (дизъюнкция) |
a= b || c; если b и c равны нулю, то a=0, в противном случае a=1 |
! |
Логическое отрицание (инверсия) |
a= ! b; если b равно нулю, то a=1, если b не равно нулю, то a=1 |
Побитовые операции |
||
& |
Поразрядная конъюнкция |
a= b & c; если оба сравниваемых бита единицы, то бит результата равен 1, в противном случае – 0. Если b=1010, c=0110, то a=0010 |
| |
Поразрядная дизъюнкция |
a= b | c; если любой (или оба) из сравниваемых битов равен 1, то бит результата устанавливается в 1, в противном случае - в нуль. Если b=1010, c=0110, то a=1110 |
^ |
Поразрядное “исключающее ИЛИ” |
a= b ^ c; если один из сравниваемых битов равен 0, а второй бит равен 1, то бит результата равен 1, в противном случае (оба бита равны 1 или 0) – 0. Если b=1010, c=0110, то a=1100 |
~ |
Поразрядная инверсия |
a= ~ b; если b=1010, то a=0101 |
<< |
Сдвиг влево |
a= b << c; осуществляется сдвиг значения b влево на c разрядов; в освободившееся разряды заносятся нули. Если b=1011, c=2, то a=1100 |
>> |
Сдвиг вправо |
a= b >> c; осуществляется сдвиг значения b вправо на c разрядов; в освободившееся разряды заносятся нули, если b имеет тип unsigned и копии знакового бита в противном случае. Если b=1011, c=2, то a=0010 |
Операции отношения |
||
== |
Сравнение на равенство |
a == b; вырабатывается 1, если a равно b, и 0 – в противном случае |
> |
Больше |
a > b; вырабатывается 1, если a больше b, и 0 – в противном случае |
>= |
Больше или равно |
a >= b; вырабатывается 1, если a больше или равно b, и 0 – в противном случае |
< |
Меньше |
a < b; вырабатывается 1, если a меньше b, и 0 – в противном случае |
<= |
Меньше или равно |
a <= b; вырабатывается 1, если a меньше или равно b, и 0 – в противном случае |
!= |
Не равно |
a != b; вырабатывается 1, если a не равно b, и 0 – в противном случае |
Операции присваивания |
||
= |
Простое присваивание |
a = b; a присваивается значение b |
++ |
Унарный инкремент |
a++ (++a) значение a увеличивается на единицу |
-- |
Унарный декремент |
a-- (--a) значение a уменьшается на единицу |
znak= |
Составная операция присваивания; znakÎ{*, /, %, +, -, <<, >>, &, |, ^} |
a znak= b; понимается как a = a znak b; Например, a += b, если a=3, b=4, то a=7 |
Операции адресации и разадресации |
||
& |
Адресация |
ptr= & b; ptr присваивается адрес b |
* |
Разадресация |
a= * ptr; a присваивается значение по адресу ptr |
Операция последовательного вычисления |
||
, |
Запятая |
a = (c-- , ++b); “,” вычисляет два своих операнда слева направо. Результат операции имеет значение и тип второго операнда. Если c=2, b=3, то a=4,c=1,b=4 |
Операция условного выражения |
||
?: |
Условная операция |
a= (b<0) ? (-b) : (b); a присваивается абсолютное значение b |
Size-операция |
||
sizeof |
Определение размера в байтах |
a= sizeof(int); определяет размер памяти, которому соответствует идентификатору или типу. a присваивается размер типа int |