- •Введение
- •Блок-схема алгоритма
- •Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Основные понятия языка С(С++)
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Структура программы на языке С(С++)
- •Операции и выражения
- •sizeof
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Операторы языка С(С++)
- •Понятие пустого и составного операторов
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Примеры программ
- •Массивы
- •Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Передача массива в функцию
- •inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Вершина стека
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Стек
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Файлы
- •Примеры программ
- •Литература
Операции и выражения
В программах широко используются выражения, состоящие из одного или более операндов, объединенных знаками операций. Операции – это специальные комбинации символов, специфицирующие действия по преобразованию различных величин. Компилятор интерпретирует каждую из этих комбинаций как самостоятельную единицу, называемую лексемой. В качестве операндов могут быть использованы переменные, константы или другие выражения. Имеются три основных класса операций: арифметические, отношения (логические), побитовые. Различают операции унарные (с не более чем одним операндом) и бинарные (с двумя и более операндами). Рассмотрим основные операции, используемые в С(С++). Операции должны использоваться точно так, как они представлены в таблице: без пробельных символов между символами в тех операциях, которые представлены несколькими символами.
|
|
|
|
|
Таблица 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= |
Составная |
|
a znak= b; понимается как a = a znak b; |
||||
|
операция |
|
Например, |
a += b, |
если a=3, b=4, то a=7 |
||
|
присваивания; |
|
|
|
|
|
|
|
znak {*, /, %, +, -, |
|
|
|
|
|
|
|
<<, >>, &, |, ^} |
|
|
|
|
|
|
|
Операции адресации и |
разадресации |
|
|
|
||
& |
Адресация |
|
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 |
Операция присваивания
Операция присваивания ( = ). В результате выполнения этой операции переменная, стоящая слева от знака "=", принимает значение выражения, расположенного справа. Отличительной чертой операции присваивания в языке С является то, что она может быть использована в одном выражении более одного раза. Например:
void main(void) { int i,j,k;
i=j=k=23;
}
В этом примере присваивания выполняются справа налево: сначала переменная k принимает значение 23, затем j и, наконец, i принимают то же значение.
Арифметические операции
Операция сложения (+). Выполнение операции ”+" приводит к сложению двух величин, стоящих справа и слева от этого знака. Операнды, используемые в операции, могут быть как переменными, так и константами. Операция "+" является бинарной:
i=j+k;
printf("%d",j+k);
Операция вычитания (-). В результате выполнения этой операции переменная получает значение разности чисел, стоящих соответственно слева и
справа от знака "-": |
|
|
|
|
i=j-k; |
|
|
|
|
printf("%d",j-k); |
|
|
|
|
Операция |
изменения |
знака (-). Знак |
"-" может использоваться для |
|
задания или |
изменения |
алгебраического |
знака некоторой |
величины |
(выражения): |
|
|
|
|
i=-10; |
|
|
|
|
i=-(j-k); |
|
|
|
|
n=-j; |
|
|
|
|
Операция умножения (*). В результате выполнения этой операции вычисляется произведение двух или более операндов.
Операция деления (/). Операция деления над целыми числами выполняется не так, как над числами с плавающей точкой. Результат деления целых чисел есть число целое. При этом дробная часть у результата отбрасывается - "усечение". Результат деления целых чисел округляется не до ближайшего целого, а всегда до меньшего целого. Например:
void main(void) { int i;
float k; i=6/4; k=7./4.; k=6/4.;
}
Операция деления по модулю (%). Операция используется в целочисленной арифметике. В результате получается остаток от деления. Например, в результате 14%4 получаем 2.
Большинство операций С(С++) выполняют преобразование типов, чтобы привести операнды выражений к общему типу, или чтобы расширить короткие величины до размера целых величин, используемых в машинных операциях. Преобразования, выполняемые операциями С(С++), зависят от специфики операций и от типа операнда или операндов. Тем не менее, многие операции выполняют похожие преобразования целых и плавающих типов. Эти преобразования известны как арифметические преобразования.
Обычные арифметические преобразования осуществляются следующим образом:
-операнды типа float преобразуются к типу double;
-если один операнд типа double, то второй операнд преобразуется к типу
double;
-любые операнды типов char или short преобразуются к int;
-любые операнды типов unsigned char или unsigned short преобразуются
ктипу unsigned int;
-если один операнд типа unsigned long, то второй операнд преобразуется
ктипу unsigned long;
-если один операнд типа long, то второй операнд преобразуется к типу
long;
-если один операнд типа unsigned int, то второй операнд преобразуется к unsigned int.
Операндами операции % должны быть целые числа. Остальные операции выполняются над целыми и плавающими операндами. Типы первого и второго операндов могут отличаться. Арифметические операции выполняют обычные арифметические преобразования операндов. Типом результата является тип операндов после преобразования.
#include <stdio.h> #include <conio.h>