Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в среде Visual C++ 6. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
туры перед точкой вквадратных скобках указывается номер измассива структуры.
Пример массива структур:
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 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]