- •Структура простой программы на языке Си
- •Краткие теоретические сведения
- •Операции языка Си
- •Краткие теоретические сведения
- •Работа с текстовой информацией и с массивами
- •Краткие теоретические сведения
- •Функции в языке Си
- •Краткие теоретические сведения
- •Структуры, объединения, битовые поля
- •Краткие теоретические сведения
- •Управление файлами в языке Си
- •Краткие теоретические сведения
Операции языка Си
Разработка алгоритмов линейной и разветвляющейся структуры. Овладение приемами математической формализации и навыками алгоритмизации задач различного характера с использованием основных алгоритмических структур и типовых алгоритмов обработки информации.
Краткие теоретические сведения
Список операций языка Си приведен в табл.1. Приоритет операций языка Си дан в табл.2.
Таблица 1 - Операций языка Си
Знак операции |
Описание операции |
+ |
Сложение |
- |
Вычитание, а также унарный минус |
* |
Умножение (бинарная операция) |
/ |
Деление; если оба аргумента -целые, то деление целочисленное |
% |
Целочисленный остаток от деления |
++ |
Увеличение на единицу; имеет префиксную и постфиксную формы: ++x и x++ |
-- |
Уменьшение на единицу; также имеет две формы |
= |
Присваивание |
+= |
Прибавление величины из правой части к перемен ной в левой части |
-= |
Вычитание величины из правой части от перемен ной в левой части |
*= |
Умножение переменной из левой части на величину из правой части |
/= |
Деление переменной из левой части на величину из правой части |
<, > |
Меньше, больше |
== |
Равно |
<=,>= |
Меньше или равно, больше или равно |
!= |
Не равно |
&&, & |
Логическое и поразрядное И (бинарные операции) |
* |
Косвенная адресация (унарная операция) |
.(точка) |
Операция принадлежности поля структуре или объединению |
-> |
Косвенная адресация; обращение к полю структуры или объединения через указатель |
<< |
Сдвиг влево, а также быстрое умножение на степени 2 |
>> |
Сдвиг вправо, а также быстрое деление на степени 2 |
Sizeof |
Размер в байтах операнда, стоящего справа |
(type) |
Приведение типа; преобразует тип переменной в соответствии с ключевым словом (или словами), заключенным в скобках |
, (запятая) |
Связывает два выражения в одно и гарантирует, что левое выражение будет вычислено раньше правого. Результат совпадает с результатом правого выражения |
?: (условие) |
Имеет три операнда, каждый из которых является выражением:(выражение1)? выражение2: выражение3. Если выражение1 истинно, результат всего выражения равен результату выражения2, иначе он равен результату выражения3 |
Таблица 2 -Приоритет операций языка Си
Операции (от высшего приоритета к низшему) |
Порядок выполнения |
() П -> . |
Слева направо |
! ~ ++ -- - (type) * & sizeof (унарные) |
Справа налево |
* / % |
Слева направо |
+ - |
Слева направо |
<< >> |
Слева направо |
< <= >= > |
Слева направо |
== != " |
Слева направо |
& |
Слева направо |
&& |
Слева направо |
?: (тернарная) |
Слева направо |
= += -= *= /= %= |
Справа налево |
Операторы if и if-else
Оператор условия с неполным предписанием задается в языке Си в форме if (выражение) оператор
Оператор (простой или составной) выполняется в случае, если выражение истинно.
Для условия с полным предписанием используется форма
if (выражение) оператор1 else оператор2
Оператор1 выполняется в случае, если выражение истинно, а оператор2 - если ложно.
Возможно построение более сложных конструкций:
if (выражение1) оператор1 else
if (выражение2) оператор2 else оператор3
Выражение означает любое числовое или совместимое с числовым типом выражение. В языке Си нет специального логического типа данных, поэтому выражение считается ложным, если его значение равно нулю.
В случае, когда имеется переменная, которой нужно присвоить одно из двух возможных значений, предпочтительнее применить не конструкцию if-else, а операцию условия ?:.
Пример: absolutX = (x>0)? x: -x;
Оператор множественного выбора switch
Общий вид:
switch (выражение)
{
case метка1: оператор1
case метка2: оператор2
default: операторЗ
}
Можно записывать более двух помеченных операторов, а вариант default не обязателен.
Пример: switch (number)
{
case 4: printf("\n Хороший выбор!"); break;
case 5: printf("\n Неплохой выбор"); break;
default: printf ("\n Плохой выбор");
}
Наличие операторов break позволяет прекратить выполнение оператора switch и перейти к выполнению операторов, следующих за ним. Если убрать из примера все операторы break, то при значении number равном 4 на экран будут выданы все три сообщения.
Иногда, однако, это бывает полезным:
choice=getchar (); // Ввод одиночного символа switch (choice)
{
case 'A':
case 'B': printf("\n Заглавная буква!"); break;
case 'a':
case 'b': printf ("\n Строчная буква!"); break;
}
Директива препроцессора #define
Директива #define необходима для задания символических констант и макроопределений.
Пример: #include <stdio.h> #define TWO 2 //Константа #define MSG "\n Конец работы\ программы" // Обратная косая черта продолжает определение на следующую // строку
#define SQUARE(a) ((a)*(a)) //Макроопределение с аргументом #define PX printf("\n Значение переменной %d",x); main ()
{
int x=TWO; PX
x=SQUARE(x);
PX
printf (MSG);
}
Препроцессор заменит в тексте программы все вхождения TWO, MSG, SQUARE(x), PX на 2, "\n Конец работы\ программы", ((x)*(x)), printf("\n Значение переменной %d",x).
