- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Операции отношения
Бинарные операции отношений используются для вычисления соотношения между операндами. Операция вырабатывает значение 1(true) или 0 (false). Типом результата является int. Операнды могут быть целого, плавающего или адресного типов. Типы первого и второго операндов могут различаться.
#include <stdio.h>
#include <conio.h>
void main()
{ int i, j, k, l, m, n;
i=10; j=15; k=10;
printf("\ni=%d, j=%d, k=%d, (i>j)=%d, (i<j)=%d ",i, j, k, i>j, i<j);
printf("\n(i>=k)=%d, (j<=k)=%d, (j==k)=%d, (j!=k)=%d\n",i>=k,j<=k,
j==k,j!=k);
}
Результатом выполнения программы будет:
i=10, j=15, k=10, (i>j)=0, (i<j)=1
(i>=k)=1, (j<=k)=0, (j==k)=0, (j!=k)=1.
Инкрементные и декрементные операции
Операция инкрементирования (увеличения ++) и декрементирования (уменьшения --) значения операнда. Операнд должен быть целого, плавающего или адресного типа. Операнды целого или плавающего типа преобразуются путем сложения (++) или вычитания (--) единицы. Тип результата соответствует типу операнда. Операнд адресного типа инкрементируется или декрементируется размером объекта, который он адресует. Инкрементированный указатель адресует следующий объект, а декрементированный указатель – предыдущий.
Существуют две возможности использования операции: когда знак ++ (--) находится слева от переменной - "префиксная" форма, и справа - "постфиксная" форма. По внешнему виду операция аналогична простой операции сложения (вычитания). Каковы же преимущества операции ++ (--) по сравнению с +( -).
Во-первых, более компактная форма записи. Например:
i=2; j=3; i=2; j=3;
while(i>12) while(i++>12)
{ j=j*i; { j=j*i;
printf(”j= %d”,j) printf(”j= %d”,j);
i=i+1; }
}
Во-вторых, при использовании операции ++ (--) в результате компиляции получается более эффективный объектный код, так как она идентична соответствующим машинной команде.
Если операция является префиксом своего операнда, то операнд инкрементируется или декрементируется перед его использованием в выражении, а если постфиксом – после его использования
while(++i>12) // в начале увеличение значения i, затем сравнение
while(i++>12) // в начале сравнение, затем увеличение значения i
Операция sizeof
Операция sizeof - унарная операция, возвращающая длину в байтпх переменной или типа, помещенного в скобках. Выражение sizeof имеет форму:
sizeof(name);
где name - или идентификатор или имя типа. Имя типа не может быть void. Значением выражения sizeof является размер памяти в байтах, соответствующий поименованному идентификатору или типу.
Когда операция sizeof применяется к идентификатору массива, то результатом является размер всего массива в байтах, а не размер указателя, соответствующего идентификатору массива.
#include <stdio.h>
#include <conio.h>
void main()
{ int i,j;
double d;
char c;
i=sizeof(i); j=sizeof(d);
printf("\nразмер i(int)=%d, c(char)=%d, float=%d, d(double)=%d “,
i,sizeof(c),sizeof(float),j);
}
Результатом выполнения программы будет:
размер i(int)=2, с(char)=1, float=4, d(double)=8,