- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Описание переменных
- •Локальные переменные
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Комментарии
Комментарий – это сообщение, поясняющее что выполняется в данном месте программы. Комментарии позволяют повысить читабельность программы. При компиляции исходного текста компилятор игнорирует все комментарии.
Комментарий может занимать более чем одну строку. Если комментарий занимает только одну строку он может начинаться символами //, за которыми следует любой текст. Если комментарий занимает более одной строки, то либо каждую строку комментария нужно начинать с //, либо выделить начало его символами /* (начало) и */ (конец).
Типы данных
Данные в С(С++) могут быть простыми и структурированными. К данным простого типа относятся целые и вещественные числа, текстовая информация, указатели (адреса). В С имеются следующие 5 базовые типов: char( символьный), int (целый), float (вещественный), double (вещественный с двойной точностью), void (пустой тип). За исключением типа void перечисленные типы данных могут иметь модификаторы. К модификаторам относятся: unsigned (беззнаковый), signed (знаковый), short (короткий), long (длинный).
Тип данных и модификатор типа определяют:
- формат хранения данных в оперативной памяти (внутреннее представление данных);
- диапазон значений, в пределах которого может изменяться переменная;
- операции, которые могут выполняться над данными соответствующего типа.
Все типы данных можно разделить на две категории: скалярные и составные (рис.8).
Рис 8. Типы данных .
В языке С(С++) различают понятия: описание и объявление. Описание устанавливает свойства объекта: тип, размер и так далее. Объявление приводит к выделению памяти для объекта некоторого типа. Для рассмотрения различия указанных типов данных (с точки зрения их размеров) надо познакомиться с терминами "биты", "байты", "слова".
Наименьшая единица памяти называется бит. Она может принимать одно из двух значений 0 или 1. Наименьшей адресуемой единицей памяти ПЭВМ является байт. Байт представляет собой комбинацию из 8 бит. Для удобства обмена информацией байты могут быть объединены (информационно) в слова (16,32,64 - разрядные).
Целые числа и числа с плавающей запятой в ЭВМ отличаются по размеру и способу хранения.
Данные целого типа
В таблице 1 приведены характеристики данных целого типа:
Таблица 1
-
название типа
байт
диапазон значений
char
1
-128...127
unsigned char
1
0...255
signed char
1
int
2,4
-32 768...32 767
signed int
2,4
unsigned int
2,4
0...65 535
signed short int
2
-32 768...32 767
unsigned short int
2
0…65 536
long int
4
-147483648…2147483647
signed long int
4
unsigned long int
4
0...4 294 967 295
double long int
Как видно из приведенной таблицы размер памяти для типов int и unsigned int не определены в языке C(С++). По умолчанию размер int соответствует размеру машинного слова. Например, на 16-разрядной машине тип int всегда 16 бит, или 2 байта (слово). На 32-разрядной машине тип int всегда 32 бита, или 4 байта (слово). Таким образом, тип int эквивалентен типам short int или long int в зависимости от реализации. Аналогично тип unsigned int эквивалентен типам unsigned short или unsigned long. Поэтому программы, зависящие от спецификации размера int и unsigned int, могут быть непереносимы.
В процессе объявления переменные могут быть инициализированы, т.е. им присваиваются начальные значения, которые в ходе выполнения программы могут изменяться. При этом компилятор, как правило, не выполняет проверку на соответствие присваиваемого значения и типа переменной (например, int i=999999), а выдает лишь предупреждение.
Если в процессе работы требуется информация о размере некоторого объекта (или его типа), то может быть использована операция sizeof (имя_объекта), возвращающая число байт объекта. Например:
i=sizeof(int); // i равно числу байт отводимых для объектов типа int
j=sizeof(long int); // j аналогично, но для данных типа типа long int
k=sizeof(i); // к размер памяти занимаемой переменной i
В заключение отметим, что от мест расположения объявлений данных в процедуре они различаются на глобальные и локальные. Первые объявляются вне любой из функций и, следовательно, доступны для многих из них. В отличие от них, локальные переменные являются внутренними по отношению к функциям. Они начинают существовать при входе в функцию и уничтожаются при выходе из нее.