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

osnovyiprogrammirovaniyanac

.pdf
Скачиваний:
24
Добавлен:
12.03.2015
Размер:
1.46 Mб
Скачать

floodfill(x,

у,

border)

м о ж н о

залить

любу ю

замкнуту ю

фигуру,

г р а н и ц а которо й

имее т цвет border,

а точк а (х,у) находитс я

внутри

з а к р а ш и в а е м о й области .

П о л н ы й

перечень

функций ,

описанны х в

библиотеке

graphics.h,

можн о получить с

п о м о щ ь ю встроенной справочной системы (клавиша F1).

 

 

Пример 3.1.Написать программу, которая выводит на экран флаг Олимпийски х игр.

синий

 

черный

красный

 

 

 

желтый

зеленый

Текст программ ы на С + + :

# i n c l u d e

< g r a p h i c s . h >

 

 

 

 

 

 

 

 

 

# i n c l u d e

< c o n i o . h >

 

 

 

 

 

 

 

 

 

 

v o i d m a i n ( )

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

int g d , g m ;

 

 

 

 

 

 

 

 

 

 

g d = D E T E C T ;

 

 

 

 

 

 

 

 

 

 

 

i n i t g r a p h ( & g d , & g m , " z : W b g i " )

 

 

 

 

 

 

s e t b k c o l o r ( 1 5 ) ; // у с т а н о в и т ь ц в е т ф о н а - б е л ь м

 

I /

 

 

 

 

 

р и с у е м в е р х н и й р я д к о л е ц

 

 

 

 

 

 

 

 

 

s e t c o l o r ( l ) ;

//

у с т а н о в и т ь ц в е т

к о л ь ц а , у к а з ы в а е т с я :-:г:/_ес ц в е т а

 

c i r c l e ( 100 , 1 0 0 , 3 5 ) ;

// н а р и с о в а т ь

к о л ь ц о з а д а н н о г о ц в е т а

 

s e t c o l o r ( O ) ;

 

 

 

 

 

 

 

 

 

 

c i r c l e ( 1 6 0 , 1 0 0 , 3 5 )

 

 

 

 

 

 

 

 

 

 

s e t c o l o r ( 4 ) ;

 

 

 

 

 

 

 

 

 

 

c i r c l e ( 2 2 0 , 1 0 0 , 3 5 )

 

 

 

 

 

 

 

 

 

 

/ /

 

 

 

 

 

р и с у е м н и ж н и й р я д к о л е ц

 

 

 

 

 

 

 

 

 

s e t c o l o r ( Y E L L O W ) ; / / у с т а н о в и т ь ц в е т к о л ь ц а , у к а з ы в а е т с я н а з в а н и е ц в е т а c i r c l e ( 1 3 0 , 1 4 0 , 3 5 ) ; / / н а р и с о в а т ь к о л ь ц о з а д а н н о г о ц в е т а

s e t c o l o r ( G R E E N ) ;

c i r c l e t 190 , 140 , 35 ) ;

g e t c h ( ) ;

c l o s e g r a p h ( ) ;

}

А н и м а ц и я

 

 

 

 

 

 

 

 

 

 

 

»

 

Как

сделать

так,

чтобы изображение

на экране

монитора двигалось?

 

Д ля этого нужно сначала дать команду компьютер у отобразить объект, а через

некоторо е время закрасить его цветом фон а и одновременн о нарисовать в другом месте -

это

создаст у пользователя

иллюзи ю движени я изображени я по экрану. Процес с создания

т а к о й и л л ю з и и н а з ы в а е т с я

анимацией .

 

 

 

 

 

 

 

 

Приме р

3.2.

Н а п и с а т ь

программу ,

котора я

рисует

светофо р

и

переключает его цвета от красного до зеленого .

 

 

 

 

 

 

 

Приступа я к

р е ш е н и ю , следует

учесть

то,

что

компьюте р

выполни т

все

к о м а н д ы

так

быстро,

что

мы

увидим

только

к о н е ч н ы й

результат.

Чтоб ы м о ж н о было видеть переключени е цветов, используется ф у н к ц и я

delay(n)

из

б и б л и о т е к и

ф у н к ц и й

dos.h

- в ы п о л н и в

эту

команду ,

компьюте р остановит в ы п о л н е н и е программ ы на

п

миллисекун д

(1

секунда = 1000 миллисекунд) .

 

 

 

 

 

 

 

 

 

Фрагмен т программ ы на С + + :

 

 

 

 

 

 

 

 

 

s e t c o l o r ( W H I T E ) ; / / р и с у е м к о н т у р с в е т о ф о р а r e c t a n g l e ( 1 0 , 1 0 , 1 7 5 , 4 7 0 ) ;

c i r c l e ( 9 0 , 9 0 , 7 0 ) ; c i r c l e ( 9 0 , 2 3 5 , 7 0 ) ; c i r c l e ( 9 0 , 3 8 0 , 7 0 ) ;

B e t f i l l s t y l e ( 1 , R E D ) ; / / у с т а н а в л и в а е м ц в е т з а л и в к и - f l o o d f i l l ( 9 0 , 9 0 ( W H I T E ) ; / / з а к р а ш и в а е м в е р х н и й к р у г

к р а с н ы й к р а с н ы м ц в е т о м

d e l a y ( 2 0 0 0 ) ; / / п а у з а 2 с е к у н д ы

 

s e t f i l l s t y l e ( 1 , B L A C K ) ; / / п е р е к р а ш и в а е м в е р х н и й к р у г в ц в е т ф о н а

ч е р н ы й

f l o o d f i l l ( 9 0 , 9 0 , W H I T E ) ;

 

s e t f i l l s t y l e ( 1 , Y E L L O W ) ; f l o o d f i l l ( 9 0 , 2 3 5 , W H I T E ) ;

/ / у с т а н а в л и в а е м ц в е т з а л и в к и - ж е л т ы й / / з а к р а ш и в а е м с р е д н и й к р у г ж е л т ы м ц в е т о м

d e l a y ( 2 00 0 ) ; // п а у з а 2 с е к у н д ы

s e t f i l l s t y l e ( 1 , B L A C K ) ; / / п е р е к р а ш и в а е м с р е д н и й к р у г в ц в е т ф о н а - ч е р н ы й f l o o d f i l l ( 9 0 , 2 3 5 , W H I T E ) ;

s e t f i l l s t y l e ( 1 , G R E E N ) ; / / у с т а н а в л и в а е м ц в е т з а л и в к и - з е л е н ы й

f l o o d f i l l ( 9 0 , 3 8 0 , W H I T E ) ; / / з а к р а ш и в а е м н и ж н и й к р у г з е л е н ы м ц в е т о м

Пример 3.3. Н а п и ш и т е программу , котора я рисует на э к р а н е рыб у и двигает её слева направо .

s e t c o l o r ( R E D ) ; / / р и с у е м р ы б у к р а с н ы м ц в е т о м

 

a r c ( 2 0 0 , 2 0 0 , 2 0 , 1 9 0 , 4 5 ) ; / / в е р х н я я

с т о р о н а

 

a r c ( 2 0 0 , 1 7 0 , 1 7 0 , 3 4 0 , 4 5 ) ; / / н и ж н я я с т о р о н а

»

c i r c l e ( 2 3 0 , 1 8 0 , 1 ) ; / / г л а з

 

 

l i n e ( 2 2 0 , 2 1 0 , 2 2 0 , 1 6 0 ) ; / / л и н и я /

в ы д е л я ю щ а я г о л о в у

 

l i n e ( 1 5 4 , 2 0 5 , 1 5 4 , 1 6 3 ) ; / / л и н и я /

з а в е р ш а ю щ а я х в о с т

 

d e l a y ( 3 0 0 0 ) ; / / п а у з а 3 с е к у н д ы

Задания к главе 3. Практическое з н а к о м с т в о . Графика

Задача 3.1.

Н а п и ш и т е программу, которая выводит

на экран

Г о с у д а р с т в е н н ы й флаг

России .

 

 

 

Задача 3.2.

Н а п и ш и т е программу, к о т о р а я рисует дом

следующего

вида:

Задача 3.3.

Н а п и ш и т е программу, цель к о т о р о й - создать и л л ю з и ю у в е л и ч е н и я квадрата

на э к р а н е :

 

Задача

3.4.

Н а п и ш и т е программу, к о т о р а я рисует окружность,

д в и ж у щ у ю с я

по экрану .

Задача

3.5.

Н а п и ш и т е программу,

которая рисует сначала

грустную

р о ж и ц у , далее

заменяет её

на н е й т р а л ь н у ю , а потом

на веселую .

 

 

Гпава4

 

 

 

 

 

 

 

ь

Типы

данных

 

 

 

 

 

 

К а к и е

правила необходимо соблюдать при

н а п и с а н и и программ?

 

Тело

п р о г р а м м ы ,

н а п и с а н н о й на я з ы к е

С + + , состоит

из

и н с т р у к ц и й . Каждая

и н с т р у к ц и я

вызывает

некоторые

действия

на соответствующем

шаге

в ы п о л н е н и я

п р о г р а м м ы .

П р и н а п и с а н и и

и н с т р у к ц и й

п р и м е н я ю т с я

определенные

символы,

с о с т а в л я ю щ и е

алфавит языка . Алфавит я з ы к а С + + включает

в себя:

 

 

 

 

 

 

буквы л а т и н с к о г о алфавита:

заглавные

от А до

Z

и

строчные

 

от

а до

z;

 

 

арабские ц и ф р ы : 0, 1,2,

 

3, 4,

5,

6,

7,

8,

 

9;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с п е ц и а л ь н ы е с и м в о л ы :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

П л ю с

 

 

 

 

 

 

 

 

 

 

 

К а в ы ч к и

 

 

 

 

 

 

 

 

 

 

 

 

-

 

М и н у с

 

 

 

 

 

 

 

 

С

 

Апостроф

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

 

Звездочка

 

 

 

 

 

 

О

 

Круглые

скобки

 

 

 

 

 

 

 

 

 

/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

П р я м о й

слеш

 

 

 

 

 

[]

 

Квадратные

скобки

 

 

 

 

 

 

 

 

=

 

Равно

 

 

 

 

 

 

 

 

{}

 

Фигурные

скобки

 

 

 

 

 

 

 

 

 

<

 

М е н ь ш е

 

 

 

 

 

 

 

%

 

П р о ц е н т

 

 

 

 

 

 

 

 

 

 

 

 

>

 

Б о л ь ш е

 

 

 

 

 

 

 

&

 

Амперсант

 

 

 

 

 

 

 

 

 

 

 

!

 

В о с к л и ц а т е л ь н ы й

 

знак

 

 

 

#

 

Решетка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

?

 

В о п р о с и т е л ь н ы й

знак

 

 

 

~

 

Тильда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Точка

 

 

 

 

 

 

 

 

 

1

 

Вертикальная

черта

 

 

 

 

 

 

 

 

?

 

Запятая

 

 

 

 

 

 

 

\

 

Обратный

слеш

 

 

 

 

 

 

 

 

 

 

 

Двоеточие

 

 

 

 

 

 

 

 

 

П о д ч е р к и в а н и е

 

 

 

 

 

 

 

 

 

?

 

Точка

с запятой

 

 

 

 

 

 

 

 

Пробел

 

 

 

 

 

 

 

 

 

 

 

 

 

Л

 

К р ы ш е ч к а

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И с п о л ь з о в а н и е

русски х

 

букв

других

специфически х

символов)

в о з м о ж н о

только в строковых выражениях.

К о л и ч е с т в о

п р о б е л о в

и

н а ж а т и й

к л а в и ш и < E n t e r > ,

используемых

для

визуального

ф о р м а т и р о в а н и я

текста,

 

не

имеет

для

к о м п и л я т о р а

з н а ч е н и я .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Точка с запятой служит признаком конца оператора,

и ч а щ е

в с е г о и м е н н о э т о т

знак забывают

поставить н о в и ч к и .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Компилято р различает строчные и заглавные буквы, и в

н е к о т о р ы х с л у ч а я х

замена

строчной

буквы

заглавной или

наоборот может вызвать ошибку.

 

 

 

 

В

качестве имени

переменной и л и

ф у н к ц и и

м о ж е т

служит ь

н а б о р

букв л а т и н с к о г о

алфавита,

ц и ф р

и

 

символа

п о д ч е р к и в а н и я ,

при

 

этом

начинаться

это

имя

д о л ж н о

обязательно с

буквы

или знака

п о д ч е р к и в а н и я

(rt,

first,

huge,

_ а ) .

И м я п е р е м е н н о й не

д о л ж н о совпадать

с

л ю б ы м ключевым

 

словом.

Если

п е р е м е н н а я

или

ф у н к ц и я

с таким

и м е н е м

уже используются в системе,

то

может в о з н и к н у т ь

о ш и б к а

совпадения и м е н и еще

на стадии

к о м п и л я ц и и .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Длина имени не фиксируется

р а з у м н ы х

п р е д е л а х ) ,

но

р а з н ы е к о м п и л я т о р ы

различают

и м е н а

по

разному

количеству

начальных

символов,

что

тоже

может

служить

и с т о ч н и к о м о ш и б к и .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В к а ч е с т в е

и м е н и запрещено использовать

с л е д у ю щ и е

к л ю ч е в ы е

слова:

 

 

a sm

do

if

s t a t i c

a u t o

d o u b l e

int

s t r u c t

b r e a k

e l s e

long

s w i t c h

c a s e

e n u m

r e g i s t e r

t y p e d e f

c h a r

e x t e r n

r e t u r n

u n i o n

const

float

short

u n s i g n e d

c o n t i n u e

for

s i g n e d

v o i d

d e f a u l t

g o t o

s i z e o f

 

v o l a t i l e

_ d s

 

w h i l e

far

 

_ s s

p a s c a l

 

i n t e r r u p t

_ e s

 

_ c s

h u g e

»

c d e c l

e x p o r t

 

n e a r

 

 

Переменная представляет собой данные, хранящиеся в определенных ячейках памяти; значение переменной, в отличие от константы, может быть изменено в ходе выполнения программы.

Вид данных (целые, дробные числа, строки и так далее) и способ их представления и хранения определяются типом переменной, который указывается при объявлении или определении переменной.

К а к уже отмечалось выше, идентификаторы переменных, т.е. их имена, не могут совпадать с ключевыми словами, поэтому являются неизвестными компилятору. В связи с этим до первого использования переменной ее обязательно нужно объявить. Если переменная просто объявляется, то ее начальное значение может быть либо нулем, либо каким-то произвольным, соответствующим тем байтам, которые были записаны в ячейках памяти, отведенных под переменную. Чтобы избежать неопределенности, мы будем либо

определять переменные, либо придавать

им начальные значения до первого

использования в качестве значений чего-либо.

 

Общая структура объявления переменной

может быть представлена так:

тип_данных идентификатор;

Например: int а; ИЛИ long double b;

Если нужно объявить несколько переменных одного типа, то их идентификаторы можно

перечислять через запятую:

тип_данных идентификатор! , идентификатор2 ;

Например: int а,Ь,с;

Общая структура определения переменной отличается только тем, что идентификатору сразу же присваивается начальное значение, причем можно одновременно определять и объявлять переменные одинакового типа:

тип_данных идентификатор=значение;

Например: int а=5;

или

тип_данных идентификатор1=значение1, идентификатор2=значение2;

Например: i n t а = о^ = 9;

или

тип_данных идентификатор!, идентификатор2=значение;

Например: int а,с=10;

Ба з о в ы е т и п ы

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

Для хранения целых чисел применяются типы char и int, причем первый может

сохранять числа от -128

до

127,

то есть объем этого типа составляет один байт. Обычно

тип char используют для хранения символов в кодировке

ASCII

(см.

приложение

1),

поэтому он так и называется.

 

 

 

 

 

 

 

Длина типа int равняется машинному

слову и для 16-ти

разрядных систем

составляет

2 байта, а для 32-х разрядных

- 4 байта. Мы будем рассматривать

16-ти

разрядную

систему, например, Borland С++

3.1, поэтому с его помощью можно представить числа от

-32768 до 32767. Это

так

называемые

знаковые типы,

в них для хранения числа

используются не все биты, а только 7 и 15, и этот последний,

старший бит равняется 0 для

положительных чисел и

1

для

отрицательных. Каждое число по

модулю разлагается

на

 

 

 

 

 

 

 

 

 

 

4

 

3

 

2

 

1

 

 

 

 

 

 

 

 

 

 

 

 

с т е п е ни

д в о й к и , н а п р и м е р , 25d

 

=

1*2

+

1*2

+ 0*2

+

0*2

+

1*2°

=

11001b. Д л я

х р а н е н и я

о т р и ц а т е л ь н ы х

чисел используется

д о п о л н и т е л ь н а я д в о и ч н а я

а р и ф м е т и к а ,

то

есть берется

п о л о ж и т е л ь н о е

число,

все его

 

биты

и н в е р т и р у ю т с я ,

и

к

нему

добавляется

1,

тогда при

с л о ж е н и и о д и н а к о в ы х

по модулю, но разных по

знаку чисел

 

с

и с п о л ь з о в а н и е м правил

д в о и ч н о й а р и ф м е т и к и

получим

 

0.

Н а п р и м е р ,

для типа

char

127

записывается

в

д в о и ч н о й

системе к а к 01111111,

а - 127

к а к

10000001.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Д л я

целых чисел

существует

м о д и ф и к а т о р

 

unsigned,

 

к о т о р ы й

 

позволяет

использовать базовые т и п ы для

 

хранени я

беззнаковых чисел .

 

 

 

 

 

 

 

 

 

 

Например :

u n s i g n e d char

 

 

-

диапазон

от 0 до

255

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

или

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

u n s i g n e d

i n t

 

 

-

диапазон

от 0 до 65535.

 

 

 

 

 

 

 

 

 

 

 

 

Д л я х р а н е н и я д р о б н ы х

(вещественных)

ч и с е л

и с п о л ь з у ю т с я т и п ы

float

и double.

В е щ е с т в е н н ы е

числа

могут

быть

представлен ы

либо

в о б ы ч н о й

з а п и с и , н а п р и м е р ,

3956.768, либо

в

н а у ч н о й : 0.3956768е+4,

то есть

0.3956768*

10

.

Во

втором

случае

число

представляется

в

виде

мантиссы,

то есть

о с н о в а н и я ,

и

э к с п о н е н т ы ,

в д а н н о м

случае

-

степени

д е с я т к и ,

на которую

у м н о ж а ю т

мантиссу .

Для

х р а н е н и я м а н т и с с ы

используют

следующи й

ф а к т :

б е с к о н е ч н а я

геометрическая

прогрессия

сходится

к

о п р е д е л е н н о м у

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

2

 

3

 

 

 

 

числу. Н а п р и м е р ,

если

будем

складывать

1/2+1/4+1/8+... или 1/2 +1/2

+1/2 +..., то в итоге

получим в

сумме

1, п р и ч е м если мы

будем

складывать не до

б е с к о н е ч н о с т и , а до

к а к о й - т о

о п р е д е л е н н о й

степени

п ( н а п р и м е р ,

10),

то

мы

получим

число,

о т л и ч а ю щ е е с я

от

1

не

более,

чем

на

1/2

Если

теперь

мы

 

будем

в ы к и д ы в а т ь

к а к и е - т о

степени

д в о й к и ,

подставляя в соответствующие биты д в о и ч н о г о представления 0, то получим число,

отличное

от 1. Т а к и м

образом,

с

п о м о щ ь ю

п

бит мы можем

представить любую дробную

 

 

 

 

 

 

 

 

 

 

 

1

Л - ) П _ 1

 

 

 

 

 

 

 

 

 

 

часть в е щ е с т в е н н о г о

числа

с

точностью

l/2

,

разлагая

его

по

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

д в о й к и

2(-1)

и так далее.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Т и п ы

float и

double

отличаются

к о л и ч е с т в о м

б и т о в ,

о т в о д и м ы х

д л я х р а н е н и я

 

м а н т и с с ы ,

то

есть

т о ч н о с т ь ю ,

и

битов,

отводимых на

х р а н е н и е э к с п о н е н т ы ,

то

есть

д и а п а з о н о м

от

самых маленьки х до самых больших чисел .

 

 

 

 

 

 

 

К п е р е ч и с л е н н ы м

типа м

 

могут

 

п р и м е н я т ь с я

м о д и ф и к а т о р ы

short

и

long,

у м е н ь ш а ю щ и е

и у в е л и ч и в а ю щ и е

количество

байтов,

отводимых

для

хранени я

типа .

П р и ч е м м о д и ф и к а т о р

short определен

только

для

типа

int и нужен в 32-х разрядных

системах

для

совместимости ,

в

 

16-ти

 

р а з р я д н о й

системе

он

л и ш е н

смысла,

хотя

и

определен,

мы

его

не

будем

п р и н и м а т ь

во

в н и м а н и е .

П е р е ч и с л и м

о п и с а н н ы е

т и п ы

в

следующей

т а б л и ц е :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

О т м е т и м ,

что

слово

int

в д л и н н ы х с о ч е т а н и я х

с

м

о д и ф и к а т о р а м и

может

опускаться,

н а п р и м е р ,

unsigned и

unsigned

int означают

одно

и

то

же.

 

К р о м е того,

если нужно

предотвратить

и з м е н е н и е

к а к о й - л и б о

в е л и ч и н ы , н а п р и м е р ,

п е р е м е н н о й ,

то

она

объявляется

как константа с и с п о л ь з о в а н и е м м о д и ф и к а т о р а

const.

Например:

c o n s t

i n t

а = 5 ;

 

 

 

 

 

 

 

 

П р и п о п ы т к е м о д и ф и ц и р о в а т ь з н а ч е н и е к о н с т а н т ы в п р о г р а м м е в о з н и к н е т о ш и б к а к о м п и л я ц и и .

Операции с переменными

И т а к ,

мы р а з о б р а л и с ь ,

что

такое

п е р е м е н н ы е , теперь

п о с м о т р и м ,

что

с

н и м и

м о ж н о

делать.

Н а п р и м е р ,

из

них

м о ж н о

составлять

в ы р а ж е н и я ,

используя

м а т е м а т и ч е с к и е

о п е р а ц и и :

сложение,

вычитание,

умножение, деление.

Э т и

о п е р а ц и и

п р и м е н и м ы

к

 

ц е л ы м

и

в е щ е с т в е н н ы м

т и п а м д а н н ы х .

Они

используют

 

два

з н а ч е н и я

или

операнда,

н а п р и м е р ,

два слагаемых

и

 

так

далее,

и

если

т и п ы

операндов

не

совпадают,

н а п р и м е р ,

ц е л ы й

и

в е щ е с т в е н н ы й ,

то

результат

преобразуется

автоматически

 

к

более

д л и н н о м у

и

общему типу,

н а п р и м е р ,

к

вещественному . Если т и п ы обоих

операндов

совпадают,

то

тип

результата

 

совпадает

с

н и м и .

И с к л ю ч е н и е

составляет

о п е р а ц и я

взятия

 

остатка

от

деления

по

модулю

- %.

О н а

п р и м е н я е т с я т о л ь к о

к

ц е л ы м

ч и с л а м

 

и выдает

остато к от

д е л е н и я

первого на

второе .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

К а р и ф м е т и ч е с к и м

о п е р а ц и я м т а к ж е

о т н о с я т

инкремент

++

и

декремент

— ,

 

к о т о р ы е

п р и м е н я ю т с я

к

одному

операнду

целого

типа .

Эти

о п е р а ц и и

увеличивают

и

у м е н ь ш а ю т соответственно

 

значение

операнда

на

1.

Различаются

п р е ф и к с н а я

ф о р м а

(+ + п е р е м е н н а я ) и

п о с т ф и к с н а я

( п е р е м е н н а я + + ).

Для

б о л ь ш и н с т в а

случаев

это

не

имеет

з н а ч е н и я ,

но

иногда м е н я е т с я последовательность

в ы п о л н е н и я .

П р е ф и к с н а я

всегда

выдает

з н а ч е н и е

операнда

уже

и з м е н е н н о е , а

п о с т ф и к с н а я

сначала

выдает

з н а ч е н и е

 

операнда,

а

потом его

и з м е н я е т .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Важной

о п е р а ц и е й

является

присваивание

значения

п е р е м е н н о й .

Н а п р и м е р ,

если

мы хотим

п р и с в о и т ь п е р е м е н н о й

х

значение

п е р е м е н н о й

у,

то п и ш е м

 

 

 

 

 

 

 

 

 

х= у;

ане наоборот .

М о ж н о присваивать

п е р е м е н н о й

результат

в ы р а ж е н и й ,

математических

действий, н а п р и м е р :

 

 

 

 

 

 

х =2 *

у + 8 ;

 

 

 

 

 

 

М о ж н о у с т р а и в а т ь

множественное присваивание,

н а п р и м е р :

 

 

х = у = 5;

 

 

 

 

 

 

тогда сначала в у з а п и ш е т с я

5,

а потом в х -

з н а ч е н и е у (в текущий м о м е н т

5).

К р о м е

того, д о в о л ь н о

часто встречаются ситуации, когда

в п е р е м е н н у ю нужно

з а п и с а т ь

ее

же значение,

н о ,

н а п р и м е р , умноженное

на какое-то

число. Тогд а нужнЪ

н а п и с а т ь

к о н с т р у к ц и ю вида:

 

 

 

 

 

Х= х*3;

н о д л я э т о г о м о ж н о п р и м е н и т ь сокращенный вариант:

Х* = 3;

Эта запись обозначает то же самое . Такие

с о к р а щ е н н ы е

записи,

или

п р и с в а и в а н и я ,

с о п р я ж е н н ы е с

о п е р а ц и е й ,

существуют для

всех

а р и ф м е т и ч е с к и х

о п е р а ц и й .

 

 

 

Все

о п е р а ц и и

обладают р а з л и ч н ы м

п р и о р и т е т о м ,

то

есть

п о р я д к о м

в ы п о л н е н и я .

С у щ е с т в о в а н и е

п р и о р и т е т а

надо

всегда иметь

в

виду

при

с о с т а в л е н и и

в ы р а ж е н и й ,

в

к р а й н е м случае,

для

подстраховки

расставлять с к о б к и ( ) .

 

 

 

 

 

 

 

К а к

уже у п о м и н а л о с ь ,

результат

в ы р а ж е н и я

зависит

от

о п е р а н д о в ,

а

о с о б е н н о

от

левого операнда в о п е р а ц и и

п р и с в а и в а н и я . Тем

не

менее,

иногда требуется

я в н ы м образом

преобразовать

п е р е м е н н у ю

одного

типа

к

другому

типу.

П р и

этом

 

используется

следующая

к о н с т р у к ц и я :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

( т р е б у е м ы й _ т и п )

п е р е м е н н а я ;

 

 

 

 

 

 

 

 

 

 

 

 

н а п р и м е р :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(int)

х;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

 

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

более

коротких

 

типо в

в

более

д л и н н ы е

всегда

происходит

б е з б о л е з н е н н о .

Обратное

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

является

к о р р е к т н ы м ,

если

значени е

п е р е м е н н о й

не

выходит за д и а п а з о н

требуемого типа,

в

п р о т и в н о м

случае может

сильно

и з м е н и т ь с я значение ,

н а п р и м е р , смениться знак числа и даже его модуль.

 

 

 

s

П р о д е м о н с т р и р у е м

с к а з а н н о е н а примере с л е д у ю щ е й п р о г р а м м ы .

 

 

 

 

Ти п д а н н ы х

char

используется

для х р а н е н и я символов, поэтому, прежде

чем

з н а ч е н и е char

будет выведено

на экран,

 

преобразуем

его

в

ц е л о ч и с л е н н ы й тип

int.

Д л я

о т о б р а ж е н и я

результатов

на

экран е м о н и т о р а

мы

будем

использовать

ф у н к ц и ю

cout

из

библиотеки iostream.h,

которая

имеет вид

c o u t «

< в ы в о д и м о е

з н а ч е н и е >

Перед

тем

как выводить

з н а ч е н и я

на

э к р а н ,

мы

 

очистим

его

с

п о м о щ ь ю

ф у н к ц и и

clrscr()

из

библиотек и conio.h:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример 4.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <conio.h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ttinclude <iostream.h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void

main()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{ const int s=2; //определяем

константу

 

 

 

 

 

 

 

 

 

//определяем

переменные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int а=3;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char

с=4;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

float

z=3.14;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

clrscr();//очистить

экран

 

 

 

 

 

 

 

 

 

 

 

 

 

 

z- z - a; t lx станет равно 6.14

 

 

 

 

 

 

 

 

 

 

 

 

 

cout<<z<<endl; // << «end l

»

-

означает «перейти

на новую

строку»

 

 

с=а—s;//c станет равно 5 cout<<(int)c<<endl;

a»z-a; //а станет равно 9 cout<<a<<endl;

С + + ; / / с станет равно б cout<<(int)c<<endl ;

с = c/s;//c станет равно 3 cout<<(int)c<<endl ;

a=a%c;// а станет равно О cout<<a<<endl ;

a+=10;// а станет равно 10 cout<<a<<endl;

getch();

}

Задания

к главе 4.Типы д а н н ы х

Задача

4.1

 

 

К а к о е и м я

не может

п р и н и м а т ь п е р е м е н н а я :

Задача

4.2

 

 

Определите з н а ч е н и я

п е р е м е н н ы х а,Ь,с и F после в ы п о л н е н и я п р о г р а м м ы :

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]