
- •Структура программы на языке Си. Этапы выполнения программы
- •1.1. Алфавит языка Си
- •1.2. Лексемы
- •1.3. Идентификаторы и ключевые слова
- •1.4. Знаки операций
- •1.5. Литералы (константы)
- •1.6. Комментарии
- •1.7. Общая структура программы на языке Си.
- •1.8. Функциональная и модульная декомпозиции
- •1.9. Этапы обработки программы.
- •1.10. Роль препроцессора.
- •1.11. Ошибки
- •2. Переменные и константы. Типы данных
- •2.1. Основные типы данных
- •2.2. Декларация (объявление) объектов
- •2.3. Константы в программах
- •2.4. Целочисленные константы
- •2.5. Константы вещественного типа
- •2.6. Символьные константы
- •2.7. Строковые константы
- •3. Обзор операций
- •3.1. Операции, выражения
- •3.2. Арифметические операции
- •3.3. Операции сравнения
- •3.4. Логические операции
- •4. Операции (продолжение).
- •4.1. Операция присваивания
- •Примеры недопустимых выражений:
- •4.2. Сокращенная запись операции присваивания
- •4.3. Преобразование типов операндов бинарных операций
- •4.4. Преобразование типов при присваивании.
- •4.5. Операция явного приведения типа
- •4.6. Операция «,» (запятая)
- •5. Стандартная библиотека языка Си
- •5.1. Стандартные математические функции
- •5.2. Потоковый ввод-вывод
- •5.3. Консольные функции вывода данных на экран
- •5.4. Консольные функции ввода информации
- •5.5. Ввод-вывод в оконных приложениях.
- •Советы по программированию
- •6. Операторы языка с.
- •7. Составление разветвляющихся алгоритмов
- •7.1. Условные операторы
- •If (выражение) оператор;
- •If (выражение) оператор 1 ;
- •If (выражение 1) оператор 1;
- •If (выражение 2) оператор 2;
- •If (выражение 3) оператор 3;
- •7.2. Оператор выбора альтернатив (переключатель)
- •7.3. Условная операция «? :»
- •8. Составление циклических алгоритмов
- •8.1. Оператор с предусловием while
- •8.2. Оператор цикла с постусловием do – while
- •8.3. Оператор цикла с предусловием и коррекцией for
- •8.4. Вложенные циклы.
- •9. Операторы передачи управления.
- •9.1. Оператор безусловного перехода goto
- •9.2. Операторы continue, break и return
- •10. Массивы
- •10.1. Одномерные массивы
- •10.2. Примеры алгоритмов, использующих одномерные массивы.
- •10.3. Многомерные массивы
- •10.4. Примеры алгоритмов, использующих двумерные массивы.
- •10.5. Компонента StringGrid
- •11. Размещение данных и программ в памяти пэвм
- •11.1. Общие понятия.
- •11.2. Кодирование целых чисел.
- •11.3. Кодирование вещественных чисел.
- •11.4. Кодирование символов.
- •Примеры кодов символов:
- •Стандартная часть таблицы символов (ascii)
- •Дополнительная часть таблицы символов
- •11.5. Операция sizeof
- •11.6. Побитовые логические операции. Операции над битами
- •11.7. Кодирование программы.
- •11.8. Регистры
- •12.1. Строки как нуль-терминированные массивы char.
- •12.2. Русификация консольных приложений.
- •12.3. Строки как переменные типа AnsiString.
- •12.4. Преобразования строковых типов.
- •12.5. Тип String в консольных приложениях.
- •13. Функции пользователя и классы памяти.
- •13.1. Сущность и предназначение функций.
- •13.2. Определение и вызов функции.
- •13.3. Прототип функции.
- •13.4. Область видимости.
- •13.5. Классы памяти объектов в языке Cи.
- •13.6. Разбиение программы на модули.
- •14. Структуры и объединения
- •14.1. Понятие структуры
- •14.2. Декларация структурного типа данных
- •14.3. Объявление структурных переменных
- •14.4. Обращение к полям структуры
- •14.5. Операции со структурой как единым целым
- •14.6. Вложенные структуры
- •14.7. Массивы структур
- •14.8. Размещение структурных переменных в памяти
- •14.9. Битовые поля
- •14.10. Объединения
- •15. Генерация псевдослучайных чисел.
- •16. Файлы в языке с
- •16.1. Типы файлов.
- •16.2. Открытие файла
- •16.3. Закрытие файла
- •16.4. Запись - чтение информации
- •А) Посимвольный ввод-вывод
- •Б) Построчный и форматированный ввод-вывод
- •В) Блоковый ввод-вывод
- •Int fflush(file *stream);
- •16.5. Текстовые файлы
- •16.6. Перенаправление стандартного ввода-вывода
- •16.7. Бинарные файлы
- •16.8. Дополнительные полезные функции
- •16.9. Простейший пример создания собственной базы данных
- •17. Указатели
- •17.1. Определение указателей
- •17.2. Связь указателей и массивов.
- •17.3. Операции над указателями (косвенная адресация)
- •17.4. Операции над указателями (косвенная адресация)
- •17.5. Массивы указателей.
- •17.6. Указатели на указатели.
- •17.7 . Указатели как параметры функций.
- •Void f1(int, const double *);
- •17.8 . Указатели на структуры
- •17.9. Ссылка
- •17.10. Указатели на функции
- •Id_функции(список аргументов);
- •18. Работа с динамической памятью
- •18.1. Динамическое выделение и освобождение памяти.
- •18.2. Создание одномерного динамического массива.
- •18.3. Создание двуxмерного динамического массива.
- •19. Операция typedef
- •20. Отладка и пошаговое выполнение программы
4.4. Преобразование типов при присваивании.
При присваивании значение правой части преобразуется к типу левой. И здесь необходимо быть внимательным, так как при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании int в char старший байт просто отбрасывается.
Если объявлены: float x; int i; то как x=i; так и i=x; приводят к преобразованиям. При этом float преобразуется в int отбрасыванием дробной части.
Тип double преобразуется во float округлением.
Длинное целое преобразуется в более короткое целое и переменные типа char посредством отбрасывания лишних битов более высокого порядка.
При передаче данных функциям также происходит преобразование типов.
4.5. Операция явного приведения типа
В любом выражении преобразование типов может быть осуществлено явно. Для этого достаточно перед любым выражением поставить в скобках идентификатор соответствующего типа.
Вид записи операции: (тип) выражение;
Ее результат - значение выражения, преобразованное к заданному типу представления.
Операция приведения типа вынуждает компилятор выполнить указанное преобразование, но ответственность за последствия возлагаются на программиста. Рекомендуется использовать эту операцию в исключительных случаях.
Например:
double x;
int n=6, k=4;
1) x=n/k; - дробная часть будет отброшена
2) x=(double)n/k; - использование операции приведения типа здесь позволяет избежать округления результата деления целочисленных операндов.
Другой пример:
int i=100000, j=100000;
long long k;
k=(long long)i*j; - использование операции приведения типа здесь позволяет избежать переполнения типа int.
4.6. Операция «,» (запятая)
Данная операция используется для организации заданной последовательности вычисления выражений (обычно используется там, где по синтаксису допустима только одна операция, а необходимо разместить две и более, например, в операторе for). Форма записи:
выражение_1, …, выражение_N;
выражения 1, 2,…, N вычисляются последовательно друг за другом и результатом операции становится значение последнего выражения N, например:
m = ( i = 1, j = i ++, k = 6, n = i + j + k );
получим последовательность вычислений: i =1, j =i =1, i =2, k=6, n=2+1+6, и в результате m=n=9.
4.7. Приоритеты операций (по убыванию, чертой разделены разные приоритеты)
Операция |
Краткое описание |
Использование |
Порядок выполнения |
Унарные операции |
|||
. |
Доступ к полю или методу |
объект . поле |
Слева направо |
-> |
Доступ к полю или методу по указателю |
указатель -> поле |
|
[] |
Индексирование |
переменная[выражение] |
|
() |
Вызов функции |
ID(список_выр.) |
|
++ |
Префиксный инкремент |
++lvalue |
Справа налево |
-- |
Префиксный декремент |
--lvalue |
|
++ |
Постфиксный инкремент |
lvalue++ |
|
-- |
Постфиксный декремент |
lvalue-- |
|
~ |
Побитовое НЕ |
~выражение |
|
! |
Логическое НЕ |
!выражение |
|
- |
Унарный минус |
-выражение |
|
+ |
Унарный плюс |
+выражение |
|
* |
Раскрытие указателя |
*выражение |
|
& |
Адрес |
&выражение |
|
sizeof |
Размер объекта или типа |
sizeof(выражение или тип) |
|
() |
Приведение типа |
(тип)выражение |
|
Бинарные и тернарная операции |
|||
* |
Умножение |
выражение * выражение |
Слева направо |
/ |
Деление |
выражение / выражение |
|
% |
Получение остатка |
выражение % выражение |
|
+ |
Сложение |
выражение + выражение |
|
- |
Вычитание |
выражение – выражение |
|
<< |
Сдвиг влево |
выражение << выражение |
|
>> |
Сдвиг вправо |
выражение >> выражение |
|
< |
Меньше |
выражение < выражение |
|
<= |
Меньше или равно |
выражение <= выражение |
|
> |
Больше |
выражение > выражение |
|
>= |
Больше или равно |
выражение >= выражение |
|
== |
Равно |
выражение == выражение |
|
!= |
Не равно |
выражение != выражение |
|
& |
Побитовое И |
выражение & выражение |
|
^ |
Побитовое исключающее ИЛИ |
выражение ^ выражение |
|
| |
Побитовое ИЛИ |
выражение | выражение |
|
&& |
Логическое И |
выражение && выражение |
|
|| |
Логическое ИЛИ |
выражение || выражение |
|
?: |
Условная операция (тернарная) |
выражение ? выражение : выражение |
|
= |
Присваивание |
lvalue = выражение |
Справа налево |
+= -= *= /= %= <<= >>= &= |= ^= |
Сложение, умножение и др. с присваиванием |
lvalue += выражение lvalue *= выражение lvalue <<= выражение и т.д. |
|
, |
Последовательное вычисление |
выражение, выражение |
Слева направо |