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

Языки программирования / Литература по C++ / Денисова Э. В., Раков С. В. Программирование на языке СИ

.pdf
Скачиваний:
72
Добавлен:
31.05.2015
Размер:
1.41 Mб
Скачать

Денисова Э. В., Раков С. В. Программирование на языке СИ – СПб; СПб ГИТМО (ТУ), 2003. – 74с.

В пособии даются базовые сведения для программирования на алгоритмическом языке СИ. Большое количество примеров упрощает понимание материала. Нестандартные ситуации и особые случаи выделены в специальные абзацы.

Учебное пособие предназначено для подготовки студентов высших учебных заведений, обучающихся по направлению подготовки 651900, 652300 по специальностям 210100, 181200 и 075300, по направлению подготовки 654000 по специальностям 072300, 190700 и 191100, по направлению подготовки 651100 по специальности 070700.

Пособие подготовлено на кафедре информатики и прикладной математики Санкт-Петербургского государственного института точной механики и оптики (технического университета).

Рецензенты: д.т.н., проф. Демин А.В., к.т.н., доц. Безруков В.А.

Одобрено на заседании кафедры информатики и прикладной математики 30 июня 2003 года, протокол № 10

©Санкт-Петербургский государственный институт точной механики и оптики (технический университет), 2003.

©Денисова Э. В., Раков С. В., 2003.

ОГЛАВЛЕНИЕ

 

1.

Элементы языка Си......................................................................................

4

 

1.1.

Используемые символы....................................................................

4

 

1.2.

Константы..........................................................................................

6

 

1.3.

Идентификатор..................................................................................

9

 

1.4.

Ключевые слова.................................................................................

9

 

1.5.

Комментарии .....................................................................................

10

2.

Типы данных.................................................................................................

12

 

2.1.

Категории типов данных..................................................................

12

 

2.2.

Целый тип данных ............................................................................

13

 

2.3.

Данные с плавающей точкой ...........................................................

15

 

2.4.

Указатели ...........................................................................................

16

 

2.5.

Массивы .............................................................................................

17

 

2.6.

Структуры..........................................................................................

18

 

2.7.

Объединения ( смеси ) ......................................................................

19

 

2.8.

Инициализация данных....................................................................

20

3. Выражения и операция присваивания ......................................................

22

 

3.1.

Операнды и операции.......................................................................

22

 

3.2.

Преобразования при вычислении выражений ...............................

23

 

3.3.

Операции отрицания.........................................................................

24

 

3.4.

Операции взятия адреса и разадресации ........................................

25

 

3.5.

Операция определения размера sizeof ............................................

26

 

3.6.

Мультипликативные операции........................................................

26

 

3.7.

Аддитивные операции......................................................................

27

 

3.8.

Операции сдвига ...............................................................................

28

 

3.9.

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

28

 

3.10. Логические операции........................................................................

29

 

3.11. Операция последовательного вычисления.....................................

30

 

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

30

 

3.13. Операции увеличения и уменьшения .............................................

31

 

3.14. Простое и составное присваивание.................................................

32

 

3.15. Приоритеты операций и порядок вычислений ..............................

32

 

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

33

4.

Операторы.....................................................................................................

36

 

4.1.

Оператор выражение ........................................................................

36

 

4.2.

Пустой оператор................................................................................

37

 

4.3.

Составной оператор..........................................................................

37

 

4.4.

Оператор условия if ..........................................................................

38

 

4.5.

Оператор выбора switch ...................................................................

40

 

4.6.

Оператор цикла while .......................................................................

42

 

4.7. Оператор цикла do while ..................................................................

44

 

4.8.

Оператор цикла for............................................................................

46

2

 

4.9.

Оператор continue..............................................................................

48

 

4.10. Оператор return..................................................................................

49

 

4.11. Оператор goto ....................................................................................

50

5.

Связь указателей и массивов.......................................................................

52

 

5.1. Указатели на многомерные массивы ..............................................

53

 

5.2.

Операции с указателями...................................................................

54

 

5.3.

Массивы указателей..........................................................................

56

 

5.4.

Динамическое размещение массивов..............................................

57

6.

Директивы препроцессора ..........................................................................

60

 

6.1.

Директива #include............................................................................

60

 

6.2.

Директива #define..............................................................................

60

 

6.3.

Директива #undef ..............................................................................

62

7.

Функции ........................................................................................................

63

 

7.1. Определение и вызов функций........................................................

63

 

7.2. Время жизни и область видимости объекта...................................

73

 

7.3.

Объявления функций........................................................................

79

 

7.4.

Инициализация глобальных и локальных переменных................

79

3

1. Элементы языка СИ

1.1. Используемые символы

Множество символов используемых в языке СИ можно разделить на пять групп.

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

 

Таблица 1

Прописные буквы

A B C D E F G H I J K L M N

 

латинского алфавита

O P Q R S T U V W X Y Z

 

Строчные буквы

a b c d e f g h i j k l m n

 

латинского алфавита

o p q r s t u v w x y z

 

Символ

_

 

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

 

 

2. Группа прописных и строчных букв русского алфавита и арабские цифры (табл.2).

 

Таблица 2

Прописные буквы

А Б В Г Д Е Ж З И К Л М Н О П Р

 

русского алфавита

С Т У Ф Х Ц Ч Ш Щ Ы Ь Э Ю Я

 

Строчные буквы

а б в г д е ж з и к л м н о п р

 

русского алфавита

с т у ф х ц ч ш щ ъ ы ь э ю я

 

Арабские цифры

0 1 2 3 4 5 6 7 8 9

 

 

 

 

3. Знаки нумерации и специальные символы (табл. 3). Эти символы используются с одной стороны при описании процесса вычислений, а с другой - для передачи компилятору определенного набора инструкций.

 

 

 

Таблица 3

Символ

Наименование

Символ

Наименование

 

,

запятая

( )

круглые скобки

 

.

точка

[ ]

квадратные

 

 

 

 

скобки

 

;

точка с

{ }

фигурные скобки

 

 

 

4

 

 

 

запятой

 

 

:

двоеточие

<

меньше

?

вопросительн

>

больше

 

ый знак

 

 

!

восклицатель

~

тильда

 

ный знак

 

 

|

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

#

номер (решетка)

 

черта

 

 

+

плюс

%

процент

-

минус

&

амперсанд

*

звездочка

=

равно

 

 

"

кавычки

/

дробная черта

'

апостроф

\

обратная дробная

^

поразрядное

 

черта

 

исключающее или

4.Управляющие и разделительные символы. К той группе символов относятся: пробел, символы табуляции, перевода строки, возврата каретки, новая страница и новая строка. Эти символы отделяют друг от друга объекты, определяемые пользователем, к которым относятся константы и идентификаторы. Последовательность пробелов рассматривается компилятором как один символ.

5.Кроме выделенных групп символов в языке СИ широко используются так называемые, управляющие последовательности, т.е. специальные символьные комбинации, используемые в функциях ввода и вывода информации. Управляющая последовательность включает символ обратной дробной черты ( \ ) (обязательный первый символ) и комбинацию латинских букв или цифр (табл.4).

 

 

Таблица 4

Управляющая

Наименование

Шеснадцате-

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

 

ричное

 

 

значение

\a

Звонок

007

\b

Возврат на шаг

008

\t

Горизонтальная табуляция

009

\n

Переход на новую строку

00A

\v

Вертикальная табуляция

00B

\r

Возврат каретки

00D

\f

Перевод формата

00C

\"

Кавычки

022

5

\'

Апостроф

027

\\

Обратная дробная черта

05C

\0ddd

Символ набора кодов ЭВМ в

 

 

восьмеричном представлении

 

\0xddd

Символ набора кодов ЭВМ в

 

 

шестнадцатеричном представлении

 

Последовательности вида \0ddd и \0xddd (здесь d обозначает цифру) позволяют представить символ из набора кодов ЭВМ как последовательность восьмеричных или шестнадцатеричных цифр соответственно. Например, символ возврата каретки может быть представлен различными способами:

\r - общая управляющая последовательность,

\015 - восьмеричная управляющая последовательность,

\x00D - шестнадцатеричная управляющая последовательность. Обратите внимание Если обратная дробная черта предшествует

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

Например: символ \h представляется символом h в строковой или символьной константе.

Кроме определения управляющей последовательности, символ обратной дробной черты ( \ ) используется также как символ продолжения. Если за символом обратной дробной черты ( \ ) следует символ перехода на новую строку( \n ), то оба символа игнорируются, а следующая строка является продолжением предыдущей. Это свойство может быть использовано для записи длинных строк.

1.2. Константы

Константами называются фиксированные величины, значения которых задаются в программе. В языке СИ разделяют четыре типа констант: целые константы, константы с плавающей точкой, символьные константы и строковые литералы.

Целая константа - это десятичное, восьмеричное или шестнадцатеричное число, имеющее целое значение и представленное в одной из следующих форм: десятичной, восьмеричной или шестнадцатеричной.

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

6

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

Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр (в шестнадцатеричной системе счисления используется следующий набор цифр: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

 

 

Таблица 5

 

Примеры целых констант

Десятичная

Восьмеричная

Шестнадцатеричная

 

константа

константа

константа

 

16

020

0x10

 

127

0117

0x2B

 

240

0360

0xF0

 

Если требуется сформировать отрицательную целую константу, то используют знак "-" перед записью константы (который будет называться унарным минусом).

Пример 1:

-0x2A, - 088, -16 .

Каждой целой константе присваивается тип, определяющий вид преобразований, которые должны быть выполнены, если константа используется в выражениях.. Для того чтобы любую целую константу определить типом long, достаточно в конце константы поставить букву "l"

или "L".

Пример 2:

5l, 6l, 128L, 0105L, OX2A11L.

Константа с плавающей точкой - десятичное число, представленное в виде действительной величины с десятичной точкой или экспонентой. Формат имеет вид:

[+/-][ цифры ].[ цифры ] [ Е|e [+|-] цифры ] .

Число с плавающей точкой состоит из целой и дробной части и (или) экспоненты. Константы с плавающей точкой могут представляться с удвоенной точностью (имеют тип double). Для определения отрицательной

7

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

Пример 3:

115.75, 1.5Е-02, -0.025, .075, -0.85Е02

Символьная константа представляется символом, заключенным в апострофы. Управляющая последовательность рассматривается как одиночный символ и ее допустимо использовать в символьных константах. Значением символьной константы является числовой код символа. Символьные константы имеют тип int и при преобразовании типов дополняются знаком.

Пример 4:

' ' - пробел , 'A' - буква A .

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

Пример 5:

"Си - хороший язык",

"1.2E+03 - это то же самое, \n что и 1200 ".

Отметим, что все управляющие символы, кавычка ( " ), обратная дробная черта ( \ ) и символ новой строки в строковом литерале и в символьной константе представляются соответствующими управляющими последовательностями (например, для занесения символа ( “ ) внутри литерала его необходимо записать в виде ( \” )). Каждая управляющая последовательность представляется как один символ. Например, при печати литерала "1.2E+03 - это то же самое, \n что и 1200 " его часть "1.2E+03 - это то же самое, " будет напечатана на одной строке, а вторая часть " что и 1200 " на следующей строке.

В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью ( \0 ).

Строковый литерал имеет тип char[]. Это означает, что строка рассматривается как массив символов.

8

Обратите внимание: число элементов массива равно числу символов в строке плюс 1, так как нулевой символ (символ конца строки) также является элементом массива. Например, пустой строковый литерал “” рассматривается как массив из одного элемента – нуль-символа.

1.3. Идентификатор

Идентификатор - это имя программного объекта. Для образования идентификаторов могут быть использованы строчные или прописные буквы латинского алфавита, цифры и знак подчеркивания ( _ ). Первым символом идентификатора может быть буква или знак подчеркивания, но не цифра. Два идентификатора, для образования которых используются совпадающие строчные и прописные буквы, считаются различными.

Пример 6:

abc, ABC,

A128B,

a128b,

x_5,

X_5 .

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

Обратите внимание: компилятор допускает любое количество символов в идентификаторе, хотя значимыми являются первые 31 символ.

1.4. Ключевые слова

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

Приведем список ключевых слов: asm, auto

break

case, char, const, continue default, do, double

else, enum, extern float, for

goto if, int

9

long

register, return

short, signed, sizeof, static, struct, switch tupedef

unsigned, union void

while

Кроме того в рассматриваемой версии реализации языка СИ, зарезервированными являются следующие слова:

_asm, fortran, near, far, cdecl, huge, paskal, interrupt .

Ключевые слова far, huge, near позволяют определить размеры указателей на области памяти. Ключевые слова _asm, cdelc, fortran, pascal служат для организации связи с функциями, написанными на других алгоритмических языках, а также для использования команд языка ассемблера непосредственно в теле разрабатываемой программы на языке СИ.

Обратите внимание: ключевые слова не могут быть использованы в качестве идентификаторов.

1.5. Комментарии

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

Пример 7 :

/* комментарий к программе */ /* начало алгоритма */

или /* комментарий можно записать в следующем виде, однако

надо

быть осторожным, чтобы внутри последовательности, которая игнорируется компилятором, не попались операторы программы, которые также будут игнорироваться */

10