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

Егорова. Программирование на языке Си

.pdf
Скачиваний:
511
Добавлен:
12.03.2016
Размер:
1.37 Mб
Скачать

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

В данном примере поэтапное вычисление по первой формуле, в принципе, излишне и дано просто как пример такой возможности.

Замечание 2. В данном примере в операторе printf все сообщения даны на русском языке. Во многих системах русский алфавит будет распечатан неправильно. Проще всего решить эту проблему, записывая сообщения на английском языке.

Замечание 3. Обратите внимание на деление «1./3». Знак десятичной точки здесь нужен для того, чтобы деление происходило над вещественными числами, а не над целыми 1 и 3. Результат деления «1/3» будет равен 0.

1.7.2.3 Линейный вычислительный процесс. Расчет по формулам. Варианты заданий

N1

 

5,329142

 

π x

 

+

 

5,329142

 

 

,

0 < x 4

 

 

 

 

 

 

 

 

 

 

x +π x2

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

xπ

+ cos

2

x

 

 

 

 

 

 

 

 

5,329142 e

 

 

 

 

 

,

 

 

 

 

 

 

4 < x 5,8

 

 

 

 

 

ln x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,887452 + x

 

 

 

 

 

 

 

sin2 (π + x) +

 

,

 

 

 

1,4 x < π

 

x3 +1,887452

 

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

1,887452

 

 

+ e

xπ

,

 

 

 

 

 

 

 

 

 

 

 

 

 

π x 5,2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4,79854 3

 

 

x + (π x)2 ,

 

 

 

 

 

 

 

0 < x 1,7

 

 

 

 

2

+ 4,79854 sin x

 

 

 

 

 

 

 

 

 

 

 

y(x)= eπ+x

 

,

 

 

 

 

 

 

 

 

 

1,7 < x 3,9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(4,79854 + x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3,987483

 

 

 

x + x3 ,

 

 

0 x 0,42

 

 

 

 

 

exπ

 

3,987483

 

 

 

 

 

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

, 0,42 < x 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

(π x) + ln(3,987483 +

3

 

x )

 

 

 

 

sin

 

 

 

 

 

N5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8,732105

 

x π

 

+

 

 

x +π x

 

,

0 < x 1,75

 

 

 

 

 

 

 

 

8,732105

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

xπ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8,732105 x

4

 

 

e

 

+ sin2 x,

 

 

 

1,75 < x 2,05

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π x3 +

x

 

+ 0,1274

 

x π

 

 

 

 

,0 < x 9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,1274

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

0,1274 exπ

 

+ sin2

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

9 < x 10

 

 

 

 

 

ln x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

41

N7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

xπ

 

2,423152

 

, 2 < x 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,423152 (x

 

x )

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

2,423152),

 

 

3 < x < 5

 

 

 

sin(x

 

 

 

 

 

 

N8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 x + 3,247115 ex+π

+ x3 ,

0 < x < 3

 

 

 

 

3,247115 π (x +

 

π )

 

 

 

 

 

 

 

y(x)=

 

 

 

,

 

3 x 5

 

 

 

 

 

 

 

 

 

3,247115 + x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,379451 sin2

x +

2,379451 x

,

1

< x <1,8

 

 

 

 

 

 

 

 

 

 

 

2,379451 cos x

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

2,379451x

 

+ ln(π + x),

1,8 x 4,1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,987215 +

 

 

x + (π x)

3

,

 

 

1,3 x 1,8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

πx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

sin(1,987215 x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

1,8 < x 2,4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln x +1,987215

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π 2,94784 + x + 2,94784 sin x2 ,

0 x 1,2

 

 

 

 

 

 

x + ex2,94784

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

 

 

 

,

 

 

 

 

 

 

 

 

1,2 < x π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π + ln(2,94784 + x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,78932 tg(π x) +

 

x,

 

 

 

0 x 1,31

 

 

 

 

 

 

2,78932

 

cos(x)

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

 

 

 

 

,

 

 

1,31 < x < π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,78932 e

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N13

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 1,2738 ex1,2738 + x3 ,

 

 

 

 

0 < x < 3

 

 

 

 

2 π lg(x +

1,2738)

 

 

 

 

 

 

 

 

 

y(x)=

 

,

 

 

 

3 x 5

 

 

 

 

 

 

 

 

 

 

 

3,28 + x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4,58974 (π x)3 + 4

x,

 

 

 

 

0 < x 1,275

 

y(x)=

 

 

 

 

 

4,58974 eπ+x2

 

,

 

 

 

 

1,275 < x 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

+π) 4,58974

 

 

 

 

 

ln(x

 

 

 

 

 

 

 

 

 

 

 

N15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)= (π + x2 ) 3,789115 +sin(3,789115 x),

1,4 < x < 2,37

 

 

 

 

 

 

 

 

 

 

 

ln(3,789115 x +π), 2,37 x 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

42

N16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3 + 0,99971 5

x ,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x )

 

 

y(x)= sin3 (π x) + ln(0,99971 +

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

xπ

 

0,99971

 

 

 

 

 

 

 

 

 

 

 

 

 

N17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3,98454 + x cos(π x)

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3 3,98454

 

 

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

x+

3,98454

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π+x ,

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

N18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,914813 3

 

x + sin

2 x

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,914813

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

π e2,914813

 

x

 

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π + ln(x + 2,914813)

 

 

 

 

 

 

N19

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cos4 (π + x) +

x0,75 + 0,288881

,

 

 

 

 

 

 

 

 

 

2,88881 +

x

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

3

 

2,88881 + e

x2 π

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 < x 2,42

2,42 < x 3

0 x 1

1 < x < 2

0 < x 1,4

1,4 < x < 3,2

1,4 x < π

π x 7,1

N20

 

 

 

0,47885 4

x + (x π)3 ,

 

0 < x 1,78

y(x)= ex3 π 0,47885 cos x

,

 

 

1,78 < x < 3.9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(0,47885 + x

3

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N21

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 9,876543 + x ex2 +π

+ x3 ,

1 < x 2

 

 

 

 

 

9,876543 π lg(x +π)

 

 

 

 

 

y(x)=

 

 

 

,

2 < x 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9,876543 + x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5,4321 cos2 (x +1) + 3 5,4321 x

,

1

< x 2

 

 

 

 

 

 

 

5,4321 cos x

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

5,4321+x2

+ln(π + x

3

),

2 < x 2,5

 

 

 

 

 

 

 

 

 

 

N23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5,12345 + (x π)5

x

,

 

 

 

 

 

0,25 x 0,5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ex+π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

 

cos(5,12345 + x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

0,5 < x 0,75

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln x +5,12345

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,99981 cos x5 +π 3

 

2,99981 x

,

0

x 1,3

 

 

 

 

 

 

 

 

 

 

 

e

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

 

 

 

x

3

+ e

x2,99981

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

1,3 < x < 2,3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

π + x +ln(x +π)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

43

N25

 

0,7654321 tg(π x3 ) +

 

x

,

 

0 < x 2

 

 

 

 

 

 

 

 

 

 

x

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)=

 

 

 

 

 

 

0,7654321

 

cos x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

2 < x 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,7654321 ln x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

0,765111 e0,765111+x

+ x3

 

0 < x <1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

0,765111 + x

 

 

 

 

 

 

 

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 π lg(x +

 

x + 0,765111)

,

1 x 2

 

 

 

 

 

 

 

 

x (0,765111)5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N27

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,77777 x3 +

7 x

,

 

 

 

 

 

 

 

 

 

 

0 < x 2,05

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x )

 

 

 

 

 

 

 

 

 

 

y(x)= ln(0,77777 +

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

(π

x) + e

x

3 π

0,77777,

 

2,05 < x < 3

sin

 

 

 

 

 

 

 

N28

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,234567 ex2 π

 

 

,

 

 

 

1 < x 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y(x)= 1,234567 (3 x x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sin(x

2

1,234567),

 

 

 

3 < x < 4

 

 

 

 

 

 

 

N29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

(x +π) +

1,275 +

 

 

 

x

,

1

x π

cos

 

 

 

x3 +1,275

y(x)=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

1,275 + e

xπ

+ x

2

,

 

 

 

π < x 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1,2345 3 x +1 + (π x)2 ,

 

 

 

0 < x 0,7

y(x)=

 

 

eπ+x +1,2345 sin2

x

,

 

 

 

 

 

 

0,7 < x <1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(x +12345.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.8КОНТРОЛЬНЫЕ ВОПРОСЫ ПО МОДУЛЮ 1

1.8.1Основные этапы решения задач на ЭВМ

1.8.2Основные элементы структурных схем

1.8.3Структура и основные элементы Си-программы.

1.8.4Препроцессор языка Си; основные команды препроцессора define и include.

1.8.5Константы в языке Си.

1.8.6Основные типы в Си. Преобразование типов.

1.8.7Стандартные функции ввода в Си.

1.8.8Стандартные функции вывода в Си.

44

2 ОПЕРАЦИИ И ОПЕРАТОРЫ

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

2.1ОПЕРАЦИИ В СИ

2.1.1Арифметические операции

Операции в Си в зависимости от числа операндов бывают унарные и бинарные. Унарная арифметическая операцияэто унарный минус ( - ).

Бинарные арифметические операции - это сложение ( + ), вычитание ( - ), умножение ( * ), деление ( / ), нахождение остатка при целочисленном делении ( % ). Специальной операции целого деления в Си нет. Существует правило: если делимое и делитель целого типа, то деление производится нацело, то есть дробная часть результата отбрасывается и результат деления получается типа integer. Операция нахождения остатка допустима только для целых операндов.

Пример1. Ниже иллюстрируется выполнение арифметических операций: в левом столбике приводится выражение, в правом - значение этого выражения в виде

комментария.

 

 

 

-5

/** " -5

"

**/

2+3*4-5

/** " 9

"

**/

2+3/4-5

/** " -3 " **/

2+3%4-5

/** " 0 " **/

2+3.0/4-5

/** "-2.25" **/

Пример 2. Ниже приведено два примера, которые иллюстрируют особенности выполнения операции деления "/' для целочисленных и вещественных операндов.

1) int a,b;

 

float c;

 

a=10; b=3;

 

c=a/b;

/* Результат: c=3.00. Оба операнда a и b - целые, поэтому в результате

деления получилось целое число 3, которое затем присвоилось переменной c типа float и преобразовалось в дробное число 3.00 */

2) float a,b,c;

 

a=10; b=3;

 

c=a/b;

/* Результат: c=3.33. Оба операнда a и b - с плавающей точкой, поэтому в

результате деления сразу получилось дробное число 3.33 , которое затем присвоилось переменной c типа float */

Пример 3. Приведенные ниже примеры иллюстрируют особенности выполнения операции деления "/" совместно с операцией приведения типа (см. п.1.4.3).

int i=5; float x;

1) x = i/2;

/* Результат: x=2.000000 */

2) x = (float)i/2;

/* Результат: x=2.500000. До начала деления операнд i преобразуется

 

к вещественному типу, а если один из операндов - вещественный, то

ирезультат деления - с плавающей точкой */

3)x = (float)(i/2); /* Результат: x=2.000000. Этот случай аналогичен случаю 1) */

45

2.1.2 Увеличение и уменьшение

Для увеличения или уменьшения значения переменной на 1 существуют специальные операции:

"++" - увеличение; "--" - уменьшение.

Пример1.

 

 

 

x++;

/*

Увеличение x на 1, т.е. этот оператор эквивалентен оператору x=x+1;

*/

++a;

/*

Увеличение a на 1, т.е. этот оператор эквивалентен оператору a=a+1;

*/

y--;

/*

Уменьшение y на 1, т.е. этот оператор эквивалентен оператору y=y-1;

*/

--b;

/*

Уменьшение b на 1, т.е. этот оператор эквивалентен оператору b=b-1;

*/

Операции увеличения и уменьшения можно использовать в выражениях. Существенно, с какой стороны от операнда стоит знак "++" или "--".

Если знак операции стоит перед именем (префиксная форма операции), то сначала выполняется увеличение (или уменьшение), а затем полученный результат используется в выражении.

Если знак операции стоит после имени переменной (постфиксная форма операции), то в выражении используется старое значение переменной, которое изменяется после вычисления программой данного выражения.

Пример 2.

 

 

int i, j, x;

 

 

i=2; j=2;

/*

i=2, j=2 */

x=(i++)+(--j);

/*

i=3, j=1; x=iстар.+jнов.=2+1=3 */

Пример 3. Не следует в одном и том же выражении использовать несколько операций увеличения или уменьшения для одной и той же переменной, так как результат в этом случае сложно предугадать. Эту мысль иллюстрирует приведенная ниже программа.

#include <stdio.h> int main()

{ int y=5, i=1; y=y+(++i)+(++i);

printf("y=%d, i=%d",y,i); /* Результат: y=11, i=3. */

}

Пример 4. Не следует в одном и том же выражении использовать операцию увеличения (уменьшения) и операцию присваивания для одной и той же переменной, так как результат в этом случае бывает сложно предугадать.

#include <stdio.h> int main()

{ int y, i, j=100; y=(i=(j=1)+4)/(++j);

printf("\ny=%d i=%d j=%d",y,i,j); /* Результат: y=5 i=5 j=1 */

}

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

Знак присваивания - это знак равенства " = ". Общий вид присваивания: < имя >=< выражение >

46

Тип выражения в правой части преобразуется к типу идентификатора в левой части. Следует иметь в виду, что при преобразовании "большего" типа к "меньшему", например, float в int, значение выражения "обрезается" и старшие разряды просто игнорируются.

Пример1.

 

 

 

int x, y, a;

 

 

 

x=5;

/*

x=5

*/

y=x*2+7;

/* y=17 */

a=y/4;

/*

a=4

*/

Операция присваивания, кроме того, что выполняет присваивание, поставляет в качестве результата присвоенное значение. Так, например, операция "+" производит сложение и поставляет полученный результат: 2+3 Æ результат этого выражения 5; аналогично и операция "=" производит присваивания значения переменной и поставляет полученный результат: y=5 Æ результат этого выражения 5. Поэтому в Си разрешено включать присваивание в выражение.

Пример 2. Сравните этот пример с примером 1

выше.

a=(y=(x=5)*2+7)/4; /* x=5, y=17, a=4 */

 

Пример 3. В Си возможно многократное присваивание, которое выполняется, в отличие от большинства операций, справа налево.

a=b=c=x*y; /* Сначала вычисляется значение x*y, затем это значение присваивается c, потом b, и лишь затем a */

Для бинарных арифметических и поразрядных операций (обозначим такую операцию как "#") существует специальная операция присваивания, обозначаемая как "#=". Присваивание

<имя > #= < выражение > эквивалентно присваиванию

<имя > = < имя >#< выражение >.

Следует иметь в виду, что операция " x+=5 "

выполняется быстрее, чем операция "

x=x+5 ".

 

 

 

 

Пример 4.

 

 

 

int x,y;

 

 

 

 

x=y=5;

/* x=5, y=5 */

 

 

x+=1;

/* x=6

*/

 

 

y-=3;

/* y=2

*/

 

 

x*=y;

/* x=12 */

 

 

x/=++y;

/* x=4, так как

x = x/++y=12/++2=12/3=4; y=3 */

x%=y++; /* x=1, так как

x=x%y++=4%3++=1,

y=4 */

2.1.4 Логические операции и операции отношения

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

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

>больше,

>= больше или равно, == равно (два знака "равно" подряд без пробела), != не равно.

47

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

&&операция "и" (аналог AND в Паскале),

|| операция "или" (аналог OR в Паскале),

!операция "не" (аналог NOT в Паскале).

Подробно выполнение операций отношения и логических операций рассматривается в п. 2.2.2, посвященном построению условий в Си.

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

Эти операции можно производить только с целочисленными операндами, результат операций - так же целый.

Побитовые операции дают возможность манипулировать с двоичными образами значений (с битами). Они позволяют обеспечить доступ к каждому биту информации. Эти операции часто используются в программах, связанных с принтером, модемом и др. устройствами.

Отличие поразрядных операций от логических и операций отношения (см. п.2.1.4) в том, что последние всегда дают в результате 0 или 1 ; для поразрядных операций это не так. Поэтому не следует поразрядные операции использовать в логических выражениях; операции дадут верный результат, только если операнды будут равны точно 0 или 1, а в логических выражениях операнды могут быть любые.

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

Название операции

Пример

Результат

Сдвиг влево

7 << 5

224 или E016

Сдвиг вправо

7 >> 5

0

Дизъюнкция битов( ИЛИ )

7 | 5

7

Исключающее ИЛИ

7 /\ 5

2

Конъюнкция битов( И )

7 & 5

5

Обращение(отрицание битов)

~ 5

-6

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

Пример. Ниже подробно объяснено выполнение основных битовых операций. Слева дано описание переменной и присваиваемое ей значение, справа в квадратных скобках -

двоичный образ соответствующего значения.

 

1) int

a = -2;

/*

[a] = 1111 1111 1111 1110

*/

int

rez = ~a;

/*

[rez] = 0000 0000 0000 0001

*/

 

/* переменной res присваивается начальное значение 1 */

2) int

a = 10;

/*

[a] = 0000 0000 0000 1010

*/

int b = 12;

/*

[a] = 0000 0000 0000 1100 */

int rez = a&b; /* [rez] = 0000 0000 0000 1000 */

 

 

/* переменной res присваивается начальное значение 8 */

3) int

a = 10;

/*

[a] = 0000 0000 0000 1010

*/

int b = 12;

/*

[a] = 0000 0000 0000 1100 */

int

rez = a/\b;

/*

[rez] = 0000 0000 0000 0110

*/

 

/* переменной res присваивается начальное значение 6 */

4) int

a = 10;

/*

[a] = 0000 0000 0000 1010

*/

int b = 12;

/*

[a] = 0000 0000 0000 1100 */

int

rez = a|b;

/*

[rez] = 0000 0000 0000 1110

*/

48

/* переменной res присваивается начальное значение 14 */

2.1.6Операции: приоритет и порядок вычислений

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

ПРИОРИТЕТ

ОПЕРАЦИЯ

НАЗВАНИЕ

Высший

(

)

Скобки

 

[

]

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

Высший -1

+ +

Увеличение

 

- -

Уменьшение

 

(тип)

Приведение

 

 

 

Содержимое

 

&

Адрес

 

 

-

Унарный минус

 

 

~

Обращение

 

 

!

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

 

Sizeof

Определение памяти

Высший -2

 

 

Умножение

 

 

/

Деление

 

%

Остаток

Высший -3

 

+

Сложение

 

 

-

Вычитание

Высший -4

>>

Сдвиг вправо

 

<<

Сдвиг влево

Высший -5

 

>

Больше

 

>=

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

 

<=

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

 

 

<

Меньше

 

==

Равно

 

!=

не равно

Низший +5

&

Поразрядное И

Низший +4

 

 

Исключающее ИЛИ

Низший +3

 

|

Поразрядное ИЛИ

Низший +2

&&

Логическое И

Низший +1

 

||

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

Низший

 

?:

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

Низший - 1

 

=

Присваивание

 

+=

Присваивание со сложением

 

-=

и т.д.

 

=

 

 

/=

 

 

%=

 

 

>> =

 

 

<< =

 

 

&=

 

 

=

 

 

 

|=

 

Низший -2

 

,

Запятая

49

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

2.2ОПЕРАТОРЫ УПРАВЛЕНИЯ

2.2.1Выражения и операторы

Виды операторов: пустой, простой и составной (см. п.1.2.6).

В Си любое выражение может быть преобразовано в оператор добавлением к нему точки с запятой, то есть запись вида:

выражение; является оператором. Значение выражения при этом игнорируется. Обычно действие

такого оператора состоит в создании побочного эффекта при вычислении значения выражения.

Пример подобного оператора - это оператор присваивания (см. п.2.1.3). Оператор присваивания - это выражение вида

< имя переменной > = < выражение >, преобразованное в оператор добавлением к нему точки с запятой.

Примеры ниже иллюстрируют рассматриваемую связь выражений и операторов: x=2 - это выражение, в котором используется операция присваивания;

x=2; - это оператор, полученный из предыдущего выражения добавлением к нему ";"; a++ - это выражение, в котором используется операция увеличения;

a++; - это оператор, полученный из предыдущего выражения добавлением к нему ";".

2.2.2Построение условий

ВСи существует 6 операций отношения (сравнения):

<меньше,

<= меньше или равно, > больше, >= больше или равно, == равно, != не равно.

Замечание. Не нужно путать знак сравнения "==" (равно) и присваивания "=" (присвоить).

Операции отношения используются для сравнения значений двух выражений. Их результатом может быть истина или ложь. Истина кодируется в Си как 1, ложь - как 0, поэтому результат операции отношения можно рассматривать как число. Примеры выражений, использующих операции отношения: 2<3, a==b, k+y>7.

Сложное условие вида "1<=x<=2" трактуется в Си следующим образом. Результат сравнения 1<=x преобразуется в число 0 (ложь) или 1 (истина), и это число сравнивается с числом 2. Так как и 0, и 1 меньше 2, в результате всегда получится истина.

В подобных случаях для построения сложных условий используются логические операции:

1)"!" - логическое отрицание; "!a" (читается "не а") истинно, если a - ложно, и наоборот (not - аналог в Паскале);

2)"&&" - логическое И; "a&&b" (читается "a и b") истинно, если выражения a и b оба истинны, и ложно, если хотя бы одно из них ложно (and - аналог в Паскале);

3) "||" - логическое ИЛИ; "a||b" (читается "a или b") истинно, если среди выражений a и

50