- •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. Строковые константы
- •2.8. Логические константы
- •3. Обзор операций
- •3.1. Операции, выражения
- •3.2. Арифметические операции
- •3.3. Операции сравнения
- •3.4. Логические операции
- •3.5. Операция присваивания
- •Примеры недопустимых выражений:
- •3.6. Сокращенная запись операции присваивания
- •3.7. Операция «,» (запятая)
- •4. Обзор операций (продолжение)
- •4.1. Преобразование типов операндов бинарных операций
- •4.2. Преобразование типов при присваивании.
- •4.3. Операция явного приведения типа
- •4.4. Приоритеты операций
- •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. Оператор выбора альтернатив (переключатель)
- •Void main(void)
- •7.3. Условная операция «? :»
- •8. Составление циклических алгоритмов
- •8.1. Оператор с предусловием while
- •8.2. Оператор цикла с постусловием do – while
- •Void main(void)
- •8.3. Оператор цикла с предусловием и коррекцией for
- •8.4. Вложенные циклы.
- •Пример 1.
- •Void main(){
- •Пример 2.
- •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)
- •Дополнительная часть таблицы символов (ascii, кириллица)
- •Дополнительная часть таблицы символов (ansi, кириллица)
- •11.5. Операция sizeof
- •11.6. Кодирование программы.
- •11.8. Регистры
- •12.1. Строки как нуль-терминированные массивы char.
- •Void main(){
- •If (!strcmp(a,b))
- •Itoa(I, s, 10);
- •If (! sscanf(s, "%d", &I))
- •If (!strnicmp(s, "song", 4)) {
- •If (!strnicmp(s, "song", 4)) {
- •12.2. Русификация консольных приложений.
- •Void main(void)
- •12.3. Строки как переменные типа AnsiString.
- •12.4. Преобразования строковых типов.
- •12.5. Тип String в консольных приложениях.
- •Void main(){
- •13. Функции пользователя.
- •13.1. Сущность и предназначение функций.
- •13.2. Определение и вызов функции.
- •Void main(){
- •14. Область видимости и классы памяти
- •14.1. Область видимости.
- •Void fun(void);
- •14.2. Классы памяти объектов в языке Cи.
- •Void f1(int);
- •Void main(void)
- •Void f1(int I)
- •Void st(void){
- •14.3. Разбиение программы на модули.
- •15. Генерация псевдослучайных чисел.
- •16. Отладка и пошаговое выполнение программы
- •17. Указатели
- •17.1. Определение указателей
- •17.2. Связь указателей и массивов.
- •17.3. Операции над указателями (косвенная адресация)
- •17.4. Сравнение указателей
- •17.5. Массивы указателей.
- •17.6. Указатели на указатели.
- •17.7 . Указатели как параметры функций.
- •Void zam(int *X, int *y)
- •Void zam(int &X, int &y)
- •Void zam (int&, int&);
- •Void main (void)
- •17.9. Указатели на функции
- •Void FunOut(double (*p_f )(char, double)){
- •18.2. Создание одномерного динамического массива.
- •18.3. Создание двуxмерного динамического массива.
- •19. Операция typedef
4.2. Преобразование типов при присваивании.
При присваивании значение правой части преобразуется к типу левой. И здесь необходимо быть внимательным, так как при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании int в char старший байт просто отбрасывается.
Если объявлены: float x; int i; то как x=i; так и i=x; приводят к преобразованиям. При этом float преобразуется в int отбрасыванием дробной части.
Тип double преобразуется во float округлением.
Длинное целое преобразуется в более короткое целое и переменные типа char посредством отбрасывания лишних битов более высокого порядка.
При передаче данных функциям также происходит преобразование типов.
4.3. Операция явного приведения типа
В любом выражении преобразование типов может быть осуществлено явно. Для этого достаточно перед любым выражением поставить в скобках идентификатор соответствующего типа.
Вид записи операции: (тип) выражение;
Ее результат - значение выражения, преобразованное к заданному типу представления.
Операция приведения типа вынуждает компилятор выполнить указанное преобразование, но ответственность за последствия возлагаются на программиста. Рекомендуется использовать эту операцию в исключительных случаях.
Например:
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.4. Приоритеты операций
(по убыванию, чертой разделены разные приоритеты)
|
Операция |
Краткое описание |
Использование |
Поря-док выпол-нения |
|
Унарные операции | |||
|
. |
Доступ к полю или методу |
объект . поле |
Слева направо |
|
-> |
Доступ к полю или методу по указателю |
указатель -> поле | |
|
[] |
Индексирование |
переменная[выражение] | |
|
() |
Вызов функции |
ID(список_выр.) | |
|
++ |
Префиксный инкремент |
++lvalue |
Справа налево |
|
-- |
Префиксный декремент |
--lvalue | |
|
++ |
Постфиксный инкремент |
lvalue++ | |
|
-- |
Постфиксный декремент |
lvalue-- | |
|
~ |
Побитовое НЕ |
~выражение | |
|
! |
Логическое НЕ |
!выражение | |
|
- |
Унарный минус |
-выражение | |
|
+ |
Унарный плюс |
+выражение | |
|
* |
Раскрытие указателя |
*выражение | |
|
& |
Адрес |
&выражение | |
|
sizeof |
Размер объекта или типа |
sizeof(выражение или тип) | |
|
() |
Приведение типа |
(тип)выражение | |
|
Бинарные и тернарная операции | |||
|
* |
Умножение |
выражение * выражение |
Слева направо |
|
/ |
Деление |
выражение / выражение | |
|
% |
Получение остатка |
выражение % выражение | |
|
+ |
Сложение |
выражение + выражение | |
|
- |
Вычитание |
выражение – выражение | |
|
<< |
Сдвиг влево |
выражение << выражение | |
|
>> |
Сдвиг вправо |
выражение >> выражение | |
|
< |
Меньше |
выражение < выражение | |
|
<= |
Меньше или равно |
выражение <= выражение | |
|
> |
Больше |
выражение > выражение | |
|
>= |
Больше или равно |
выражение >= выражение | |
|
== |
Равно |
выражение == выражение | |
|
!= |
Не равно |
выражение != выражение | |
|
& |
Побитовое И |
выражение & выражение | |
|
^ |
Побитовое исключающее ИЛИ |
выражение ^ выражение | |
|
| |
Побитовое ИЛИ |
выражение | выражение | |
|
&& |
Логическое И |
выражение && выражение | |
|
|| |
Логическое ИЛИ |
выражение || выражение | |
|
?: |
Условная операция (тернарная) |
выражение ? выражение : выражение | |
|
= |
Присваивание |
lvalue = выражение |
Справа налево |
|
+= -= *= /= %= <<= >>= &= |= ^= |
Сложение, умножение и др. с присваиванием |
lvalue += выражение lvalue *= выражение lvalue <<= выражение и т.д. | |
|
, |
Последовательное вычисление |
выражение, выражение |
Слева направо |
