
- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Операция присваивания
Операция присваивания ( = ). В результате выполнения этой операции переменная, стоящая слева от знака "=", принимает значение выражения, расположенного справа. Отличительной чертой операции присваивания в языке С является то, что она может быть использована в одном выражении более одного раза. Например:
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; // (результат = 1)
k=7./4.; // (результат = 1.75)
k=6/4.; // (результат = 1.25)
}
Операция деления по модулю (%). Операция используется в целочисленной арифметике. В результате получается остаток от деления. Например, в результате 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>
void main()
{ int i, j, k, l, m, n;
float f,f1;
char с,c1;
clrscr();
i=12;
k=32767; // максимальное значение для int 32767, при увеличении
k=k+1; // значения переменной k происходит переполнение
c=’а’; // с присваивается значение ASCII кода символа а
с=с+1; // переход к следующей букве (б)
printf(" i=%d, j = %d k=%d c=%с c=%d i-5=%d i % 3%d”,
i,j=i+1,k,c,c,i-5,i%3);
}
Результатом выполнения программы будет: