- •Основы программирования
- •Содержание
- •Лабораторная работа №1 Линейные и разветвляющиеся вычислительные процессы
- •Краткие теоретические сведения
- •Классификация данных
- •Декларирование объектов
- •Структура программы
- •Константы
- •Операции Операции выражения
- •Арифметические операции
- •Операция присваивания
- •Сокращенная запись операции присваивания
- •X##; - постфиксную.
- •Преобразование типов операндов арифметических операций
- •Операция приведения типа
- •Операции сравнения
- •Логические операции
- •Побитовые логические операции, операции над битами
- •Операция «,» (запятая)
- •Функции вывода информации
- •Функции ввода информации
- •Ввод - вывод потоками
- •Стандартные математические функции
- •Синтаксис операторов языка Си
- •Операция присваивания
- •Условные операторы
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Условная операция "? :"
- •Оператор выбора switch
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Циклические операторы while и do–while
- •Вложенные циклы
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Строки, как одномерные массивы символов
- •Указатели и операции над адресами
- •Операции над указателями (адресная арифметика)
- •Связь указателей и массивов
- •Пример 1: Упорядочить по алфавиту массив строк (не более 20) длиной не более 10 символов в каждой:
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа №4 Многомерные массивы, динамическое распределение памяти
- •Краткие теоретические сведения
- •Массивы указателей
- •Указатели на указатели
- •Динамическое размещение данных
- •Проверить, является ли введенная строка полиндромом (справа-налево читается также как и слева-направо).
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Вызов функции.
- •Изменение значений параметров.
- •Область действия переменных
- •Классы памяти.
- •Рекурсивные функции.
- •Операция typedef
- •Указатели на функции
- •Примеры работы с функциями
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Декларация структурного типа данных
- •Создание структурных переменных
- •Обращение к полям структур
- •Вложенные структуры
- •Использование typedef
- •Массивы структур
- •Размещение структурных переменных в памяти
- •Пример на использование структур
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 7 Файлы в языке с
- •Краткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 8 Графический режим работы
- •Kраткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Команды вставки и удаления (под блоком понимается выделенное подсветкой подмножество символов)
- •Команды работы с блоками
- •Набор текста программы
- •Компиляция, редактирование связей, запуск программы на выполнение
- •Многофайловая компиляция
- •Отладка программы
- •Использование глобальных переменных, объявленных вне файла
- •Литература
Операции сравнения
== - равно или эквивалентно;
!= - не равно;
< - меньше;
<= - меньше либо равно;
> - больше;
>= - больше либо равно.
Пары символов соответствующих операций разделять нельзя.
Общий вид операций отношений:
<выражение 1> <знак операции> <выражение 2>
Общие правила:
- операндами могут быть любые базовые (скалярные) типы;
- значения выражений перед сравнением преобразуются к одному типу;
- результат операции отношения - значение 1, если отношение истинно, или 0 в противном случае (ложно). Следовательно, операция отношения может использоваться в любых арифметических выражениях.
Логические операции
Логические операции (в порядке убывания относительного приоритета) и их обозначения:
! - отрицание (логическое НЕТ);
&& - конъюнкция (логическое И);
|| - дизъюнкция (логическое ИЛИ).
Общий вид операции отрицания:
!<выражение>
Общий вид операций конъюнкции и дизъюнкции
<выражение 1> <операция> <выражение 2>
Например:
y>0 && x=7→ истина, если 1-е и 2-е выражения истинны;
e>0 || x=7 → истина, если хотя бы одно выражение истинно.
Ненулевое значение операнда - истина, а нулевое -ложь, например:
!0 → 1
!5 → 0
x=10;
!((x=y)>0) → 0
Особенность операций конъюнкции и дизъюнкции – экономное последовательное вычисление выражений-операндов:
<выражение 1> <операция> <выражение 2>
- если выражение 1 операции конъюнкция ложно, то результат операции ноль ивыражение 2 не вычисляется;
- если выражение 1 операции дизъюнкция истинно, то результат операции единица ивыражение 2 не вычисляется.
Пример правильной записи двойного неравенства:
0<x<100 ↔ (0<x) && (x<100)
Побитовые логические операции, операции над битами
В Си предусмотрен набор операций для работы с отдельными битами. Эти операции нельзя применять к переменным вещественного типа. Операции над битами и их обозначения:
~ - дополнение (унарная операция); инвертирование (одноместная операция);
& - побитовое И - конъюнкция;
| - побитовое включающее ИЛИ - дизъюнкция;
^ - побитовое исключающее ИЛИ - сложение по модулю 2;
>> - сдвиг вправо;
<< - сдвиг влево.
Общий вид операции инвертирования:
~ <выражение>
Остальные операции над битами имеют вид
<выражение 1> <знак операции> <выражение 2>
Операндами операций над битами могут быть только выражения, приводимые к целому типу. Операции (~, &, |, ^) выполняются поразрядно над всеми битами операндов (знаковый разряд особо не выделяется):
~0xF0 ↔ x0F
0xFF & 0x0F ↔ x0F
0xF0 | 0x11 ↔ xF1
0xF4 ^ 0xF5 ↔ x01
Операция & часто используется для маскирования некоторого множества бит. Например, оператор w =n & 0177 передает вw семь младших битn, полагая остальные равными нулю.
Операции сдвига выполняются также для всех разрядов с потерей выходящих за границы бит.
Операция (!) используется для включения бит w =x !y, устанавливает в единицу те биты вx, которые =1 вy. Необходимо отличать побитовые операции & и ! от логических операций && и ||, еслиx=1,y=2, тоx &y равно нулю, аx &&y равно 1.
0x81<<1 ↔ 0x02
0x81>>1 ↔ 0x40
Если выражение 1 имеет типunsigned, то при сдвиге вправо освобождающиеся разряды гарантированно заполняются нулями (логический сдвиг). Выражения типаsigned могут, но необязательно, сдвигаться вправо с копированием знакового разряда (арифметический сдвиг). При сдвиге влево освобождающиеся разряды всегда заполняются нулями. Есливыражение 2 отрицательно либо больше длинывыражения 1 в битах, то результат операции сдвига не определен.
Унарная операция (~) дает дополнение к целому, т.е. каждый бит со значением 1 получает значение 0 и наоборот. Эта операция оказывается полезной в выражениях типа
X & (~)077,
где последние 6 бит X маскируются нулем.
Операции сдвига << и >> осуществляют соответственно сдвиг вправо (влево) своего левого операнда на число позиций, задаваемых правым операндом, например, x<<2 сдвигаетx влево на две позиции, заполняя освобождающиеся биты нулями (эквивалентно умножению на 4). Операции сдвига вправо наk разрядов весьма эффективны для деления, а сдвиг влево - для умножения целых чисел на 2 в степениk:
x<<1 ↔ x*2;
x>>1 ↔ x/2
x<<3 ↔ x*8
Подобное применение операций сдвига безопасно для беззнаковых и положительных значений выражения 1.
В математическом смысле операнды логических операций над битами можно рассматривать как отображение некоторых множеств с размерностью не более разрядности операнда на значения {0,1}.
Пусть единица означает обладание элемента множества некоторым свойством, тогда очевидна теоретико-множественная интерпретация рассматриваемых операций:
~ - дополнение;
| - объединение;
& - пересечение.
Простейшее применение - проверка нечетности целого числа:
int i;
...
if ( i &1) printf (" Значение i четно!");
Комбинирование операций над битами с арифметическими операциями часто позволяет упростить выражения.