- •Содержание
- •Лекция 1. Общее знакомство
- •Происхождение языка Си
- •Достоинства языка Си
- •Будущее языка Си
- •Использование языка Си
- •Использование текстового редактора для подготовки программ
- •Исходные и выполняемые файлы
- •Пример простой программы на языке Си
- •Пояснения к программе
- •Первый просмотр
- •Второй просмотр
- •Структура простой программы
- •Дополнительный пример
- •Лекция 2. Данные, символьные строки, директива #define
- •Основные типы данных
- •Описание различных типов, переменные и константы
- •Символьные строки
- •Препроцессор языка Си
- •Лекция 3. Операции
- •Основные операции
- •Операция вычитания: -
- •Операция изменения знака: -
- •Операция умножения: *
- •Операция деления: /
- •Дополнительные операции
- •Операция деления по модулю: %
- •Операция уменьшения: --
- •Перечень операций языка Си
- •Операции, уровень приоритета которых равен 1
- •Операция уменьшения: --
- •Операция вычитания: -
- •Операции, уровень приоритета которых равен 5
- •Операции, уровень приоритета которых равен 6
- •Операции, уровень приоритета которых равен 7
- •Операция, уровень приоритета которой равен 8
- •Операция, уровень приоритета которой равен 12
- •Операция логическое или: ||
- •Операция, уровень приоритета которой равен 13
- •Операция условный оператор: ?
- •Операция, уровень приоритета которой равен 14
- •Операция присваивания
- •Операция, уровень приоритета которой равен 15
- •Операция запятая: ,
- •Лекция 4. Операторы
- •Выражения
- •Простейшие выражения
- •Операторы
- •Составные операторы
- •Оператор цикла while
- •Изучение и использование функций printf( ) и scanf( )
- •Применение функции scanf( )
- •Лекция 5. Преобразование типов
- •Эквивалентность типов
- •Преобразование типов
- •Разбор программы
- •Операция приведения
- •Неявное преобразование типа
- •Арифметические преобразования
- •Явные преобразования типов
- •Синтаксис типов
- •Лекция 6. Функции и переключение ввода-вывода
- •Ввод и вывод одного символа
- •Чтение одной строки
- •Чтение файла
- •Переключение и работа с файлами
- •Переключение ввода
- •Комбинированное переключение
- •Операционные системы, отличные от oc unix
- •Лекция 7. Выбор вариантов
- •Выбор вариантов
- •Оператор if
- •Расширение оператора if
- •Операции отношения
- •Что такое истина
- •Осложнение с понятием истина
- •Логические операции
- •Операция условия: ?:
- •Множественный выбор
- •Лекция 8. Циклы и другие управляющие средства. Структурное программирование
- •Структурное программирование
- •Цикл с предусловием
- •Цикл со счетчиком
- •Цикл с постусловием
- •Другие управляющие операторы
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Лекция 9. Функции
- •Создание и использование функций
- •Аргументы функции
- •Возвращение значений
- •Локальные переменные
- •Нахождение адресов
- •Указатели, первое знакомство
- •Операция косвенной адресации *
- •Описание указателей
- •Подведем итоги по указателям
- •Функции с переменным количеством аргументов
- •Лекция 10. Классы памяти и разработка программ
- •Классы памяти и область действия
- •Автоматические переменные
- •Внешние переменные
- •Статические переменные
- •Внешние статические переменные
- •Регистровые переменные
- •Лекция 11. Препроцессор языка Си
- •Общие сведения
- •Символические константы: #define
- •Замена идентификаторов
- •Использование аргументов с #define
- •Макроопределение или функция?
- •Включение файла: #include
- •Условная компиляция
- •Вспомогательные директивы Номер строки и имя файла
- •Реакция на ошибки
- •Пустая директива
- •Встроенные макроимена
- •Лекция 12. Массивы и указатели
- •Указатели и массивы
- •Массивы
- •Указатели
- •Динамические объекты
- •Создание динамических объектов
- •Доступ к динамическим объектам
- •Время жизни динамического объекта
- •Связь между указателями и массивами
- •Строки - дополнительные сведения о тесной связи между указателями и массивами
- •Инициализация массивов и классы памяти
- •Функции, массивы и указатели
- •Операции с указателями
- •Лекция 13. Символьные строки и функции над ними
- •Строковые константы
- •Массивы символьных строк и их инициализация
- •Массив и указатель: различия
- •Указатели и строки
- •Ввод-вывод строк
- •Обработка строк
- •Лекция 14. Структуры
- •Определение структурных переменных
- •Доступ к компонентам структуры
- •Поля битов в структурах
- •Объединения
- •Перечисления
- •Переменные структуры
- •Указатели и структуры
- •Массив структур
- •Переименование типов
- •Лекция 15. Библиотека языка Си и файлы ввода-вывода
- •Стандартные библиотечные функции
- •Доступ в библиотеку языка Си
- •Открытие файла: fopen( )
- •Закрытие файла: fclose( )
- •Текстовые файлы с буферизацией
- •Ввод-вывод текстового файла: getc( ), putc( )
- •Ввод-вывод файла: fprintf( ), fscanf( ), fgets( ), fputs( )
- •Функции fprintf( ) и fscanf( )
- •Функция fgets( )
- •Функция fputs( )
- •Функция fseek( )
- •Распределение памяти Функция malloc( )
- •Функция calloc( )
- •Лекция 16. Функции в примерах
- •Функция получения случайных чисел
- •Поиск узлов из простых чисел
- •Матрица инцидентности
- •Структуры данных
- •Очереди
- •Связанные списки
- •Все операции со стеком
- •Подведем итог
- •Дополнения
- •Литература
Описание различных типов, переменные и константы
Целые числа. У целого числа никогда не бывает дробной части. Представив целое число в двоичном виде, его нетрудно разместить в машине. Например, число 3 в двоичном виде выглядит как 11. Если его поместить в слово 32-разрядной машины, необходимо первые 30 бит установить в 0, а последние 2 бита - в 1.
Числа с плавающей точкой. Числа с плавающей точкой соответствуют тому, что математики называют вещественными числами. Способ кодирования, используемый для помещения в память числа с плавающей точкой, полностью отличается от размещения целого числа. Числа с плавающей точкой представляют в виде дробной части и порядка числа, а затем обе части размещают в памяти.
Все данные типов int, short, long являются числами со знаками, т.е. значениями этих типов могут быть только целые числа - положительные, отрицательные и нуль. Один бит используется для указания знака числа, поэтому максимальное число со знаком, которое можно представить в слове, меньше, чем максимальное число без знака.
Описание данных целого типа. При описании данных необходимо написать только тип, за которым должен следовать список имен переменных. Например, int dog, rad, nina. В качестве разделителя между именами переменных необходимо использовать запятую.
Целые константы. Согласно правилам языка Си, число без десятичной точки и без показателя степени рассматривается как целое. Поэтому компилятор по записи константы определяет, целая она или вещественная. Если нужно ввести константу типа long, то нужно указать признак L или l в конце числа. Если при записи константы целое начинается с цифры 0, то эта константа интерпретируется как восьмеричное число, если же целое начинается с символа 0x или 0X - как шестнадцатеричное число.
Инициализация переменных целого типа. Константы применяются при инициализации переменных. Это означает присваивание переменной некоторого значения перед началом обработки. Можно инициализировать переменную в операторе описания.
Например,
int dog=5;
int rad=077;
int nina =0X99;
! |
В языке Си введено три класса целых чисел, имеющих различные размеры. Тем самым пользователю языка Си предоставили возможность выбора типа переменной с требованием задачи. Например, если переменная типа int занимает одно слово, а переменная типа long занимает два слова, значит тип long позволяет обрабатывать большие числа. Если в задаче не используются большие числа, то незачем вводить в программу переменные типа long, т.к. если вместо числа, занимающего одно слово в памяти, используется число, занимающее два слова, работа машины замедляется. |
Описание данных типа unsigned. Этот тип является модификатором типов: int, short, long. Мы можем использовать комбинацию ключевых слов unsigned int, unsigned short, unsigned long, т.е. переменная не может принимать отрицательного значения. Для указания типа unsigned int достаточно написать unsigned. Целые беззнаковые константы записываются так же, как и обычные константы, запрещено только использование знака минус.
Например, unsigned age;
Описание данных типа char. Этот тип определяет целые числа без знака в диапазоне от 0 до 255 (это зависит от реализации, char может совпадать как с signed char так и c unsigned char). Такое целое обычно размещается в одном байте памяти. Для описания символьной переменной применяется ключевое слово char. Правила описания более чем одной переменной и инициализации переменных остаются теми же, что и для других основных типов.
Например, char dog, cat;
Символьные константы. Символы в языке Си заключаются в апострофы.
Например, char dog; dog='b';
Если апострофы опущены, то компилятор считает, что используется неописанная переменная b. В стандартном языке Си значением переменной или константы типа char могут быть только одиночные символы.
Примеры символьных констант: ' A ', ' a ', ' 7 ', ' $ '.
Специальные (управляющие) символьные константы.
Новая строка (перевод строки) |
'\n' |
Горизонтальная табуляция |
'\t' |
Вертикальная табуляция |
'\v' |
Возврат на шаг |
'\b' |
Возврат каретки |
'\r' |
Перевод формата |
'\f' |
Обратная косая |
'\\' |
Апостроф |
'\'' |
Кавычки |
'\"' |
Нулевой символ (пусто) |
'\0' |
Кроме того, любой символ может быть представлен последовательностью трех восьмеричных цифр: '\ddd'. Символьные константы считаются данными типа int.
Строковые константы. Строковая константа представляется последовательностью символов кода ASCII, заключенной в кавычки.
Например,
"Это строковая константа"
В конце каждой строки компилятор помещает нулевой символ '\0', отмечающий конец данной строки. Каждая строковая константа, даже если она идентична другой строковой константе, сохраняется в отдельном месте памяти. Если необходимо ввести в строку символ кавычек ( " ), то перед ними надо поставить символ обратной косой ( \ ). В строку могут быть введены любые специальные символьные константы, перед которыми стоит символ \. Символ \ и следующий за ним символ новой строки игнорируется.
Перечисляемые константы. Имена, указанные в описании перечисляемых констант, трактуются как целые числа (см. описание перечисления).
Описание данных типа float и double. Числа с плавающей точкой в языке Си описываются типом float. Числа с плавающей точкой аналогичны числам в обычной алгебраической записи, используемой при работе с очень большими или малыми числами.
Пример алгебраической записи чисел с плавающей точкой:
Число |
Алгебраическая запись |
Запись для ввода в машину |
5000 |
= 5.0 * 103 |
= 5.0e+3 |
0.000077 |
= 7.7 * 10-5 |
= 7.7e-5 |
Обычно для размещения в памяти числа с плавающей точкой отводится 32 бита - 8 бит для представления порядка и знака и 24 бита - для мантиссы, т.е. коэффициента при степени десяти. Для представления данных типа double (вычисление с двойной точностью) используется удвоенное число битов. Другой способ определения данных типа double заключается в использовании ключевых слов long float.
Переменные с плавающей точкой описываются и инициализируются таким же образом, что и переменные целого типа.
Например,
float dog, cat, bigword=5.77e+34;
Константы с плавающей точкой. В языке Си имеется несколько возможностей записи констант с плавающей точкой. Наиболее общая форма записи константы - это последовательность десятичных цифр со знаком, включающим в себя десятичную точку, затем символ e или Е и показатель степени по основанию 10 со знаком. Знак ( + ) можно не писать. Ниже приведено несколько правильно записанных констант с плавающей точкой:
1.1e+12
3.14159
! |
Во время разработки программы необходимо составить список требуемых переменных и указать при этом, какого они должны быть типа. Описывайте эти данные в самом начале тела функции, в которой они используются. Имена переменных выбирайте таким образом, чтобы они указывали на их смысл. При инициализации переменной следите за тем, чтобы тип константы соответствовал типу переменной, хотя язык Си рассматривает такие несоответствия менее жестко, чем Паскаль, но лучше учиться избегать дурного тона в программировании! |