Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование в среде Visual C++ 6. Учебное пособие
.pdf
туры перед точкой вквадратных скобках указывается номер
измассива структуры.
Пример массива структур:
struct massive
{
int n [10], m [20];
double ab [20];
} word [15];
Пример обращения кэлементу: word [i].m [12]. Это изi-ой
переменной word доступ к12-му элементу измассива m. Описатель другой структуры такойже структуры будет выглядеть
как massive sample, здесь massive — имя ранее объявленной
структуры, а sample — новый идентификатор со структурой
типа massive. Обращение кэлементу этой структуры будет подобное: sample.m [15]. Обратите внимание, что идентификатор
sample— простой идентификатор (немассив). Другой пример:
struct
{
double x, y;
} z [10];
Предположим, вэтих структурах хранятся комплексные
числа, где x — действительная часть, а y — мнимая часть.
Нужно перемножить 2-е и 3-е число, результат поместить
на место 5-го числа. Оператор такого перемножения запишется как:
z [5].x=z [2].x*z [3].x-z [2].y*z [3].y;
z [5].y=z [2].x*z [3].y+z [2].y*z [3].x;.
Здесь оператор верхней строчки вычисляет действительную часть, а оператор нижней строчки вычисляет мнимую
часть произведения.
— 21 —

Объявление переменной перечисляемого типа описывает
список перечисляемых идентификаторов, икаждому изних
задаёт свой порядковый номер, который принимает идентификатор. Пример для списка дней недели:
enum day
{
Saturday,
Sunday,
Monday,
Tuesday,
Wednesday
u rsday,
Friday,
} workday;
Здесь переменной workday типа int, которая может принимать одно изсеми (почислу дней внедели) значений, от0
до6, соответствующих порядковому номеру перечисляемых
дней недели. Над этой переменной можно производить любые арифметические операции. В этом объявлении enum
обозначает объединение, а day— имя этого объединения,
поаналогии объявления структуры.
Указатель— это переменная для хранения адреса какойлибо переменной. Синтаксис объявления указателя:
[спецификации типа] *описатель переменной
Здесь обязательна звёздочка перед идентификатором. Например, если объявления переменная k типа int иуказатель p
типа long:
— 22 —

int k;
long *p;
то можно указателю p присвоить адрес переменной k вопера-
тивной памяти компьютера спомощью оператора типа p=&k,
при необходимости вместо переменной k можно употреблять
ссылку *p. Нужно отметить, что если тип ссылки объявлен
как void, тоимеется ограничения на применение операций
присваивания идругих арифметических операций.
— 23 —

4.
Обозначения всех операций вязыке приведены втаблице 1.3. Некоторые операции могут иметь один операнд
(унитарные операции), либо два операнда (бинарные операции), либо три операнда (тернарные операции). Существенным свойством операций наязыке является порядок их
выполнения, когда применено несколько операций подряд.
Здесь принят общепринятый порядок слева направо. Например, выражение a-b-c выполняется как (a-b) -c, нони вкоем
случае как a- (b-c).
На языке реализованы следующие унитарные
операции:
4.1
+
!
&
*
sizeof
унитарный плюс
унитарный минус
логическое отрицание
адресация
косвенная адресация (ссылка)
определение размера
Знак унитарной операции пишется перед операндом.
На языке реализованы следующие бинарные
операции:
— 24 —

4.2
*, /,%
+, —
<<, >>
<, >, <=, >=, ==,!=
&, |, ^
&&, ||
,
мультипликативные операции
аддитивные операции
операции сдвига
операции отношения
поразрядные операции
логические операции
операции последовательного вычисления
Среди тернарных операций на языке СИ реализована
только одна операция?:— условная операция, применяемая
достаточно редко.
При выполнении операций, имеющих не один операнд,
желательно, чтобы все идентификаторы былибы одного типа
спецификаций. Нона языке предусмотрена возможность,
когда идентификаторы принадлежат разным типам спецификаций. Нопри этом все идентификаторы приводятся поумолчанию к одному типу, обычно приводятся они к первому
идентификатору. В операции присваивания они приводятся
к типу самого левого (результирующего) идентификатора.
Нопо усмотрению предусмотрено нелюбое преобразование.
Так, все идентификаторы типа oat приводятся ктипу double.
Если один идентификатор имеет тип long, то и другие
идентификаторы приводятся к этому типу. Но не все переходы отдробных чисел кцелым инаоборот допустимы. Эти
правила познаются при практическом программировании.
При выполнении операций отношения при выполнении
заданного условия вырабатывается логическая величина,
равная единице. Причём оба идентификатора должны быть
одного типа.
— 25 —

Операция условная имеет три идентификатора (операнда),
форма операции следующая: < операнд 1>? <операнд 2>: <
операнд 3>. Если вычисленное значение операнд 1 неравно
нулю, то вычисляется операнд 2 ирезультатом условия является значение операнда 2. Еслиже результат вычисления
операнд 1 равен нулю, вычисляется операнд 3 изначение ус-
ловия является его значением.
Операции инкремента «++» (увеличения наедини цу) идекремента«— –» (уменьшения наедини цу) неизменяют свой
первоначальный тип. Знак операции может стоять как дооперанда, так ипосле. Впервом случае сначала значение операнда
увеличивается наединицу, потом воперациях участвует уже
новое значение операнда. Вовтором случае сначала воперациях участвует старое значение, только затем он увеличивается наединицу.
При вычислении выражений, имеющих несколько операций, существует приоритет этих операций. Приоритеты операций приведены втаблице 4.3.
При составлении длинных математических выражений
нужно быть достаточно внимательным врасстановке скобок.
Компилятор выдаёт ошибку, если количество открывающих
изакрывающих скобок неравно. Ноесли одна изскобок стоит нена месте, компилятор эту ошибку часто незаметит, если
возможны преобразования переменных кдопустимому типу,
нопри этом результаты вычислений будут непредсказуемы,
иотыскать такую ошибку— это непростое дело.
Компилятор также сообщит обошибке, если преобразование поумолчанию при различных типах переменных ввыражении недопустимо.
. В языке предусмотрены
операции присваивания, перечисленные втаблице 4.4.
— 26 —

4.3
Знак операции
() []. —>
-! * &
++— – sizeof
Приведение типа
* /%
+ -
<< >>
< > <= >=
==!=
&
^
|
&&
||
?:
= *= /=%= += -= <<= >>=
&= |= ^=
,
Первичные
Унитарные
Мультипликативные
Аддитивные
Сдвиг
Отношение
Отношение
Поразрядное умножение
(поразрядное И)
Поразрядное исключающее ИЛИ
Поразрядное ИЛИ
Логическое И
Логическое ИЛИ
Условная операции
Простые исоставные
присваивания
Последовательные вычисления
Наименование
= Простое исоставное присваивание
+ + Унитарный инкремент
- - Унитарный декремент
+= Сложение сприсваиванием
- = Вычитание сприсваиванием
*= Умножение сприсваиванием
/= Деление сприсваиванием
4.4
— 27 —

4.4
%= Остаток отделения сприсваиванием
<<= Сдвиг влево сприсваиванием
>>= Сдвиг вправо сприсваиванием
|= Поразрядное сприсваиванием
&= Поразрядное сприсваиванием
^= Поразрядное - сприсваиванием
. Значение правого операнда присваивается левому операнду, оставляя значение правого
операнда неизменным. При этом тип правого операнда преобразуется втип левого операнда. Вместо правого операнда
может (ичаще всего так бывает) стоять выражение для вычисления каких-либо сложных формул, при этом ввыражении используемые правые операнды имеют первоначальное
значение доконца вычисления.
. Справа может быть несколько операндов, разделённых знаком равенства, например:
a=b=c=L. Здесь a, b, c— идентификаторы, аL— либо идентификатор, либо выражение. Значение L сначала присваивается
переменной c, затем переменной b итолько затем переменной
a. При этом все переменные преобразуются втип самой левой переменной, a.
. Если знак операции стоит слева от идентификатора, тозначение идентификатора
немедленно увеличивается на единицу. Еслиже знак операции стоит справа, то инкремент производится после завершения вычисления выражения, в котором участвует
данный идентификатор.
— 28 —

. При декрементировании
переменная идентификатора уменьшается наединицу. Употребление знака декремента слева или справа отидентификатора подчиняется темже правилам, что ипри выполнении
операции инкремента.
. Формат операции: a+=L. Если
L— идентификатор, токпеременной a добавляется значение
переменной L. Еслиже L— выражение, тосначала выполняется вычисление этого выражения, азатем вычисленное значение добавляется кзначению переменной a.
Остальные операции присваивания производятся поправилу операции сложения сприсваиванием.
— 29 —

5.
5.1. Перечень операторов
В языке операторы управляют вычислительными про-
цессами. Реализуются следующие операторы:
1. Пустой оператор.
2. Составной оператор или блок.
3. Оператор выражение.
4. Условный оператор if.
5. Оператор пошагового цикла for.
6. Оператор цикла спредусловием while.
7. Оператор цикла спостусловием do.
8. Оператор продолжение continue.
9. Оператор— переключатель swith.
10. Оператор разрыва break.
11. Оператор возврата return.
12. Оператор перехода goto.
Программа на языке выполняется последовательно:
оператор заоператором впорядке их следования. Любой оператор может занимать только одну строку программного кода.
5.2. Пустой оператор
Синтаксис простой, это точка с запятой: ;. Он может по-
являться впрограмме влюбом месте, где требуется хотябы
один оператор. Пустой оператор как раз и удовлетворяет
правилам синтаксиса. Собственно говоря, точка с запятой
воспринимается как конец любого оператора или операции,
— 30 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
