- •1. Понятие и состав языка программирования. Машинные и символьные языки.
- •2. Понятие и состав системы программирования.
- •3. Описание алгоритмических языков. Формулы бнф.
- •4. Описание алгоритмических языков. Синтаксические диаграммы.
- •5.Типы ошибок в программах. Понятие отладки и отладчиков.
- •6.Алфавит си
- •7.Константы. Их типы синтаксис записи.
- •8. Структура программы на языке си
- •9. Стандартные скалярные типы данных. Описание переменных.
- •10 Операции отношения и Арифметические операции
- •11 Логические операции
- •12 Операция запятая
- •13. Операцию присваивания
- •14 Оператор while формально записывается в таком виде:
- •15 Оператор do-while формально записывается следующим образом:
- •16 Операторы цикла for
- •19 Указатели и операции с ними
- •20 Массивы
- •21 Структуры
- •22 Объединения
- •23 Перечислимый тип данных
- •24 Функции
- •25 Классы переменных
- •28 Форматированный ввод данных
- •29 Форматированный вывод данных
- •30 Стандартные включаемые файлы
- •31 Функции работы со строками c
- •32 Динамическое распределение памяти. Функции malloc( ) и free( )
- •33 Основной задачей программирования является обработка информации,
- •34 Потоковый ввод/вывод
- •35 Работа с файлами
- •36 Блочный Ввод-Вывод
12 Операция запятая
Операция запятая (,) позволяет объединить несколько выражений в одно выражение и, таким образом, в Си вводится понятие выражение с запятой, имеющее общий вид записи:
<выражение>, <выражение>, <выражение>, . . .
Пара выражений, разделенных запятой, вычисляется слева направо. Тип и значение результата выражения с запятой есть тип и значение самого правого выражения. Например: k=a+b,d=m+n,5.2+7 это выражение с запятой. Выражение вычисляется слева направо. Его значением является 12.2 типа double. В процессе вычисления этого выражения переменным k и d будут присвоены соответствующие значения.
Для выражения d=(k=5+2,5+3) значение переменной d будет 8, т.к. переменной d присваивается значение выражения с запятой, которое в свою очередь равно значению самого правого выражения-операнда. Запятая в Си используется в двух контекстах: как разделитель списка объектов, например, в операторе описания данных, и как операция, определяющая последовательное вычисление выражений. Поэтому допустимо, например, такое описание с инициализацией: int a,b,c=(1,2,5),d; где переменная c инициализируется константным выражением с запятой 1,2,5 и принимает значение 5. Контекст знака запятая (операция или разделитель) компилятор "чувствует" по скобкам. Внутри скобок – это операция запятая, вне скобок – разделитель.
Забегая вперед, отметим, что аналогичная ситуация может возникнуть в списке фактических аргументов при обращении к функции. Обращение к функции, содержащее три аргумента, причем второй имеет значение 5, может выглядеть так: f(a,(t=3,t+2),c).
Чаще всего операция запятая используется в заголовках циклов, в местах, где синтаксис разрешает записать только одно выражение, а надо записать несколько. Тогда выражения объединяются в одно при помощи операции запятая. Например, когда нужно проинициализировать перед началом цикла или увеличить в конце цикла несколько переменных:
for (i=1, j=2; i<n; j++,i++) …
Преобразование типов
Если в выражении появляются операнды различных типов, то они преобразуются к некоторому общему типу, при этом к каждому арифметическому операнду применяется такая последовательность правил:
Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу long double.
В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже преобразуются к типу double.
В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже преобразуются к типу float.
В противном случае, если один из операндов в выражении имеет тип unsigned long, то остальные тоже преобразуются к типу unsigned long.
В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже преобразуются к типу long.
В противном случае, если один из операндов в выражении имеет тип unsigned, то остальные тоже преобразуются. к типу unsigned.
В противном случае все операнды преобразуются к типу int. При этом тип char преобразуется в int со знаком; тип unsigned char в int, у которого старший байт всегда нулевой; тип signed char в int, у которого в знаковый разряд передается знак из сhar; тип short в int (знаковый или беззнаковый).
Предположим, что вычислено значение некоторого выражения в правой части оператора присваивания. В левой части оператора присваивания записана некоторая переменная, причем ее тип отличается от типа результата в правой части. Здесь правила преобразования очень простые: значение справа от оператора присваивания преобразуется к типу переменной слева от оператора присваивания. Если размер результата в правой части больше размера операнда в левой части, то старшая часть этого результата будет потеряна.
В языке Си можно явно указать тип любого выражения. Для этого используется операция преобразования ("приведения") типа. Она применяется следующим образом:
(тип) выражение
(здесь можно указать любой допустимый в языке Си тип).
Рассмотрим пример:
int a = 30000;
float b;
........
b = (float) a * 12;
(переменная a целого типа явно преобразована к типу float; если этого не сделать, то результат будет потерян, т.к. a * 12 > 32767).
Преобразование типа также может использоваться для преобразования типов аргументов при вызове функций.