Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК-1_АЯП_рус.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.19 Mб
Скачать

Void main()

{

int x=5;

int y=60:

x++;

++y;

printf("x=%d y=%d\n", x, y);

printf("x=%d y=%d\n", x++, ++y);

}

Результатом работы этой программы будет следующее:

х=6, у=61;

х=6, у=62.

Обратите внимание на то, что напечатанное значение х не изменилось при втором обращении к функции printf(), а значение у увеличилось на единицу. На самом деле значение переменной х также увеличилось на единицу, но уже после выхода из функции printf(). Различие в использовании префиксной ++х и постфиксной x++ форм состоит в следующем:

x++ - значение переменной х сначала используется в выражении, и лишь затем переменная увеличивается на единицу;

++х - переменная х сначала увеличивается на единицу, а затем ее значение используется в выражении.

Старшинство арифметических операций следующее:

++, --

- (унарный минус)

*, /, %

+, -

Операции, одинаковые по старшинству, выполняются в порядке слева направо. Конечно же, для того чтобы изменить порядок операций, могут использоваться круглые скобки.

Операции отношения и логические операции

Операции отношения используются для сравнения. Полный список операций отношения в языке С следующий:

< меньше,

<= меньше или равно,

> больше,

>= больше или равно,

== равно,

!= не равно.

В языке С имеется также три логические операции:

&& и (AND),

|| или (OR),

! не (NOT).

Операции отношения используются в условных выражениях (условиях). Примеры условных выражений:

а<0, 101>=105, 'а'=='А' , 'а'!='А'

Каждое условное выражение проверяется: истинно оно или ложно. Точнее следует сказать, что каждое условное выражение принимает значение "истинно" ("true") или "ложно" ("false"). В языке С нет логического (булевого, boolean) типа. Поэтому результатом логического выражения является целочисленное арифметическое значение. В языке С "истинно" - это ненулевая величина, "ложно" - это нуль. В большинстве случаев в качестве ненулевого значения "true" используется единица. Так, из приведенных выше примеров условных выражений 2-е и 3-е приняли значение "нуль", а 1-е и 4-е - ненулевые значения. Рассмотрим пример.

#include <stdio.h>

/* Пример 12 */

main()

{

int tr, fal;

tr = (10l<=105); /*выражение "истинно" */

fal = (101>105); /*выражение "ложно" */

printf("true - %d , false - %d\n", tr, fal);

}

Программа выведет на экран:

true – 1 , false - 0

Логические операции в языке С соответствуют классическим логическим операциям AND(&&), OR (||) и NOT (!), а их результат - соответствующим таблицам, которые принято называть таблицами истинности:

Х

Y

X AND Y

X OR Y

NOT X

X XOR Y

1

1

0

0

1

0

1

0

1

0

0

0

1

1

1

0

0

0

1

1

0

1

1

0

Операция XOR называется операцией "исключающее или". В языке С нет знака логической операции XOR, хотя она может быть реализована с помощью операций AND, OR и NOT. Однако в дальнейшем мы будем рассматривать побитовые операции, среди которых операция "исключающее или" уже есть.

Операции отношения и логические операции имеют приоритет ниже, чем арифметические операции. Это значит, что выражение 12>10+1 рассматривается как выражение 12>(10+1).

Старшинство логических операций и операций отношения следующее:

!

> < >= <=

== !=

&&

||

Операция присваивания

Операция присваивания в языке С обозначается просто знаком =. В отличие от других языков в языке С оператор присваивания может использоваться в выражениях, которые также включают в себя операторы сравнения или логические операторы.

В фрагменте

if ((f=x-y)>0) printf ("Число х, больше чем у)

сначала вычисляется величина х-у, которая присваивается переменной f, затем сравнивается ее значение с нулем. Еще одной особенностью использования оператора присваивания в языке С является возможность записать оператор:

а=b=с=х*у

Дополнительные операции присваивания

В языке С имеются дополнительные операции присваивания

+=, -=, /= *= и %=.

Вместо выражения n = n + 5 можно использовать выражение n += 5. Здесь += аддитивная операция присваивания, в результате выполнения которой величина, стоящая справа, прибавляется к значению переменной, стоящей слева.

Аналогично

m-=20 то же самое, что и m=m-20;

m*=20 то же самое, что и m=m*20;

m/=10 то же самое, что и m=m/10;

m%=10 то же самое, что и m=m%10.

Поразрядные операции (побитовые операции)

Поразрядные операции можно проводить с любыми целочисленными переменными и константами. Нельзя использовать эти операции с переменными типа float, double и long double. Результатом побитовой операции будет целочисленное значение.

Поразрядными операциями являются:

& AND,

| OR,

^ XOR,

 NOT,

<< сдвиг влево,

>> сдвиг вправо.

Операции AND, OR, NOT и XOR полностью аналогичны соответствующим логическим операциям. Только в этом случае сравниваются не значения выражений, а значения каждой соответствующей пары разрядов (битов).

Операции сдвига >> и << применимы только к целочисленным переменным. В результате применения этой операции сдвигают все биты левого операнда на число позиций, определяемых выражением справа соответственно вправо или влево. Недостающие значения битов дополняются нулями.

Значением выражения х=х<<3 в двоичном виде будет 11111000.

Значением выражения х=х>>3 в двоичном виде будет 00011111.

Поразрядные операции порождают еще несколько сложных операций присваивания:

|=, &=, ^=, <<=, >>=.

Прочие операции

операции () и [ ]

В языке С круглые и квадратные скобки также рассматриваются как операции. Причем эти операции имеют наивысший приоритет.

операция УСЛОВИЕ ?:

Операция условие - единственная операция языка С, имеющая три операнда. Эта операция имеет вид:

перем = (лог_выраж.) ? (выраж.1) : (выраж.2);

Вычисляется выражение (лог_выраж.). Если это выражение имеет ненулевое значение, то вычисляется выражение (выраж.1). Результатом операции будет значение выражения (выраж.1).

Если значение выражения (лог_выраж.) равно нулю, то вычисляется выражение (выраж.2) и его значение будет результатом операции.

операция ЗАПЯТАЯ

Операция запятая имеет самый низкий приоритет из всех операций языков С и C++. Операция запятая выполняется слева направо, и ее значением является значение правого операнда.

операция SIZEOF

Операция sizeof имеет две формы: sizeof (тип) или sizeof (выражение).

Результатом этой операции является целочисленное значение величины типа или выражения в байтах. При использовании второй формы значение выражения не вычисляется, а лишь определяется его тип. Примеры использование: sizeof (short int) или sizeof (х). В качестве типа в операции sizeof не может использоваться тип void.

Приоритеты операций и порядок их выполнения приведены в таблице1

Таблица 1

Приоритеты операций и порядок

Прио-ритет

Операция

Название

Порядок

выполнения

1

( )

Скобки, вызов функции

Слева направо

1

[ ]

Квадратные скобки

Слева направо

1

.

Выделение элемента

структуры

Слева направо

1

->

Выделение элемента

структуры

Слева направо

2

++ --

Инкремент , декремент

Справа налево

2

~

Побитовое НЕ

Справа налево

2

!

Логическое НЕ

Справа налево

2

+ -

Унарный минус, унарный плюс

Справа налево

2

&

Взятие адреса

Справа налево

2

*

Обращение по адресу, разыменование

Справа налево

2

(тип)

Преобразование типов

Справа налево

2

sizeof

Определение размера в байтах

Справа налево

3

*

Умножение

Слева направо

3

/

Деление

Слева направо

3

%

Остаток от деления

Слева направо

4

+, -

Сложение, вычитание

Слева направо

5

>>, <<

Сдвиги влево, вправо

Слева направо

6

< , >

Меньше, больше

Слева направо

6

<= ,(!=>)

Меньше или равно

Слева направо

6

>=, (!<)

Больше или равно

Слева направо

Прио-ритет

Операция

Название

Порядок

выполнения

7

== , !=

Равно, не равно

Слева направо

8

&

Побитовое И

Слева направо

9

^

Побитовое исключ. ИЛИ

Слева направо

10

|

Побитовое ИЛИ

Слева направо

11

&&

Логическое И

Слева направо

12

||

Логическое ИЛИ

Слева направо

13

?:

Условная операция

Справа налево

14

=, *=, /=,

%= , +=,

-=

Присваивание, умножение и присваивание, деление и присваивание, и т.п.

Справа налево

14

<<=, >>=, &=, ^= , !=

Поразрядные операции и присваивание

Справа налево

15

,

Операция запятая

Слева направо

Математические функции

Язык С имеет широкий набор библиотечных функций. В таблице 2 приведены некоторые математические функции, описание которых содержится во включаемых файлах math.h и stdlib.h.

Таблица 2

Математические функции

Функция

Матем.

обозначение

Обозначение

Абсолютное значение

|x|

fabs(x)

Косинус

cos x

cos(x)

Синус

sin x

sin(x)

Тангенс

tg x

tan(x)

Экспонента

ех

exp(x)

Возведение в степень

ху

pow(x,y)

Степенная функция

10n

pow10(n)

Логарифм натуральный

ln x

log(x)

Логарифм десятичный

log x

log10(x)

Корень квадратный

sqrt(x)

Вычислить , при x=2.444, y=0.0869, z=-130.0

Текст программы может иметь следующий вид:

#include <stdio.h>

#include <conio.h>

#include <math.h>

#define x 2.444

#define y 0.00869

#define z -130.0