- •Синтаксис языка c. Структура программы. Характеристика функции main.
- •Директивы препроцессора (основные).
- •Базовые типы данных.
- •Декларация объектов программы на языке c, атрибуты: тип, класс памяти и область действия.
- •Константы в программах на языке c.
- •Целочисленные константы
- •Константы вещественного типа
- •Символьные константы
- •Строковые константы
- •Функции вывода информации. Использование модификаторов и управляющих последовательностей.
- •Функции ввода информации.
- •Ввод/вывод потоками (cin, cout).
- •Синтаксис операторов языка c, операторы-выражения, управляющие операторы в языке с.
- •Условные операторы
- •Арифметические операции, преобразование типов операндов арифметических операций. Средство "typedef".
- •Линейный алгоритм. Операции присваивания, разновидности сокращений записи операции присваивания.
- •Сокращенная запись операции присваивания
- •Операции отношений (сравнения) и логические операции.
- •Логические операции
- •Операторы передачи управления goto, continue, break, return.
- •Оператор безусловного перехода goto
- •Оператор continue
- •Оператор break
- •Оператор return
- •Ветвящийся алгоритм. Условный оператор if, условная операция «? :».
- •Оператор выбора альтернатив (переключатель) switch.
- •Операция ",".
- •Оператор с предусловием while
- •Оператор цикла с постусловием do - while.
- •Оператор цикла с предусловием и коррекцией for.
- •Функции в с. Способы описания функции, операция вызова функции.
- •Особенности использования параметров функций.
- •Указатели как тип данных. Операции * и &. Операции над указателями.
- •Операции над указателями (косвенная адресация)
- •Одномерные массивы и связь с указателями.
- •Применение указателей
- •Cтроковые данные в с. Библиотечные функции для их обработки.
- •Указатель на указатель, многомерные массивы.
- •Многомерные массивы
- •Динамическая память, функции и операции работы с памятью.
- •Пример создания двуxмерного динамического массива:
- •Указатели на функцию.
- •Тип данных «структура», общая характеристика.
- •Вложенные структуры, указатели на структуру, массивы структур.
- •Массивы структур
- •Файлы в с. Типы файлов, понятие файловой переменной и увязка ее с физическим файлом.
- •Закрытие файла
- •Запись - чтение информации
- •Посимвольный ввод-вывод
- •Построчный ввод-вывод
- •Блоковый ввод-вывод
- •Текстовые файлы.
- •Основные режимы работы с бинарными файлами, последовательный и прямой доступ.
Операции отношений (сравнения) и логические операции.
Операции сравнения
== - равно или эквивалентно;
!= - не равно;
< - меньше;
<= - меньше либо равно;
> - больше;
>= - больше либо равно.
Пары символов соответствующих операций разделять нельзя.
Общий вид операций отношений:
<выражение1> <знак_операции> <выражение2>
Общие правила:
- операндами могут быть любые базовые (скалярные) типы;
значения операндов после вычисления перед сравнением преобразуются к одному типу;
- результат операции отношения - целое значение 1, если отношение истинно, или 0 в противном случае. Следовательно, операция отношения может использоваться в любых арифметических выражениях.
Логические операции
Перечень логических операций в порядке убывания относительного приоритета и их обозначения:
! - отрицание (логическое НЕТ);
&& - коньюнкция (логическое И);
|| - дизьюнкция (логическое ИЛИ).
Общий вид операции отрицания:
!<выражение>
Общий вид операций коньюнкции и дизьюнкции
<выражение1> <знак_операции> <выражение2>
Например:
y>0 && x=7 истина, если 1-е и 2-е выражения истинны;
e>0 || x=7 истина, если хотя бы одно выражение истинно.
Ненулевое значение операнда трактуется как "истина", а нулевое - "ложь".
Например:
!0 1
!5 0
x=10;
!((x=y)>0) 0
Особенность операций коньюнкции и дизьюнкции – экономное последовательное вычисление выражений-операндов:
<выражение1> <операция><выражение2>,
- если выражение1 операции коньюнкция ложно, то результат операции - ноль и выражение2 не вычисляется;
- если выражение1 операции дизьюнкция истинно, то результат операции - единица и выражение2 не вычисляется.
Таким образом, появляется возможность записью логического выражения задать условную последовательность вычисления выражений в направлении слева направо:
scanf("%d",&i) && test1(i) && test2(i) нулевой результат одной из функций приведет к игнорированию вызова остальных;
search1(x) || search2(x) || search3(x) только ненулевой результат одной из функций приведет к игнорированию вызова остальных.
Пример правильной записи двойного неравенства:
0<x<100 (0<x)&&(x<100)
Операторы передачи управления goto, continue, break, return.
Формально к операторам передачи управления относятся:
- оператор безусловного перехода goto;
- оператор перехода к следующему шагу (итерации) цикла continue;
- выход из цикла, либо оператора switch - break;
- оператор возврата из функции return.
Оператор безусловного перехода goto
В языке Си предусмотрен оператор goto, хотя в большинстве случаев можно обойтись без него. Общий вид оператора:
goto < метка >;
Он предназначен для передачи управления на оператор, помеченный меткой. Метка представляет собой идентификатор, оформленный по всем правилам идентификации переменных с символом «двоеточие» после него, например, пустой помеченный оператор:
m1: ;
Область действия метки - функция, где эта метка определена. В случае необходимости можно использовать блок.
Наиболее характерный случай использования оператора goto - выполнение прерывания (выхода) во вложенной структуре при возникновении грубых неисправимых ошибок во входных данных. И в этом случае необходимо, выйти из двух (или более) циклов, где нельзя использовать непосредственно оператор break, т.к. он прерывает только самый внутренний цикл:
for (...)
for (...)
{ ...
if ( ошибка ) goto error;
}
...
error: - операторы для устранения ошибки;
Если программа обработки ошибок нетривиальна и ошибки могут возникать в нескольких местах, то такая организация оказывается удобной.
Пример нахождения первого отрицательного числа в двумерном массиве:
for (i=0; i<N; i++)
for(j=0; j<M; j++)
{
if (v[i][j]<0) goto found;
... // Не найден
}
found: ... // Найден
Программа с goto может быть написана и без него, хотя, за счет повторения некоторых проверок и введения дополнительных переменных. Например, рассмотренная программа может быть записана следующим образом:
found = 0;
for (i=0; i<N && !found; i++)
for (j=0; j<M && !found; j++)
found = v[i][j]<0;
if (found) ... // Найден
else ... // Не найден