Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.doc
Скачиваний:
7
Добавлен:
22.09.2019
Размер:
812.03 Кб
Скачать

МИНИСТЕРСТВО СЕЛЬСКОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ

ФГОУ ВПО "Кубанский государственный аграрный университет"

Факультет прикладной информатики

Кафедра системного анализа и обработки информации

Мурлин Алексей Георгиевич

Программирование

Курс лекций

Краснодар

2012

Мурлин А.Г.

Программирование: Курс лекций. – Краснодар: КубГАУ, 2012. – 64с.

Содержание

1 Лексические основы языка Си/Си++ 5

1.1 Лексемы Си/Си++ 5

1.2 Типы данных 6

1.2.1 Объявление переменной 6

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

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

1.2.4 Данные с плавающей точкой (вещественные типы) 9

1.3 Знаки операций 10

1.3.1 Разновидности выражений в СИ/СИ++ 10

1.3.2 Разновидности операций в СИ++ 10

1.3.3 Простое присваивание 13

1.3.4 Составное присваивание 13

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

1.4 Структура и компоненты программы на языке СИ 14

1.5 Организация ввода-вывода в стиле СИ 15

1.6 Ввод, вывод данных в стиле СИ++ 17

1.6.1 Манипуляторы и форматирование ввода-вывода 18

1.7 Математические функции 20

2 Алгоритм. Элементы структурного программирования 22

2.1 Понятие алгоритма 22

2.2 Основные требования к алгоритмам 24

2.3 Элементы структурного программирования 26

3 Программирование алгоритмов линейной структуры 28

4 Алгоритмы и программы ветвящейся структуры. Условный оператор if. Переключатель switch 31

4.1 Алгоритмы и программы ветвящейся структуры 31

4.1.1 Условный оператор if 31

4.1.2 Логические операции 32

4.2 Примеры составления алгоритмов и программ с использованием условного оператора If 33

4.3 Переключатель switch 35

5 Алгоритмы и программы циклической структуры 38

5.1 Понятие цикла. Разновидности циклов 38

5.2 Цикл с параметром в СИ/СИ++ 39

5.3 Оператор while 40

5.4 Оператор do while 41

5.5 Оператор continue 42

6 Регулярные типы данных. Массивы 43

6.1 Понятие регулярного типа 43

6.2 Алгоритмы сортировки массивов 46

6.3 Постановка задачи сортировки и методы её решения 46

6.4 Алгоритм прямого упорядочения (Алгоритм сортировки выбором элемента) 48

6.5 Алгоритм попарного сравнения соседних элементов («пузырьковая» сортировка) 49

6.6 Алгоритм сортировки выбором элемента 50

6.7 Методы доступа к элементам массивов, использование указателей 50

6.8 Организация многомерных массивов. Указатели на многомерные массивы 52

7 Функции в Си/Си ++ 54

7.1 Описание и определение функции 54

7.2 Вызов функции 56

7.3 Передача параметров в функцию 57

7.4 Описание прототипа функции 58

7.5 Функция с переменным количеством параметров 59

7.6 Понятие сигнатуры функции 60

7.7 Подставляемые (встраиваемые) функции 60

7.8 Передача параметров в главную функцию 60

7.9 Рекурсивные вызовы функции 61

7.10 Примеры составления функций 62

8 Указатели 65

8.1 Понятие указателя 65

8.2 Инициализация указателей 66

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

8.4 Ссылки 69

9 Структуры (struct) 70

10 Динамические структуры данных 72

11 Динамические массивы 84

12 Функции и массивы 86

13 Указатели на функции 88

14 Файлы в Си/СИ++ 90

14.1 Файловый ввод/вывод с помощью потоков 90

14.2 Дополнительные функции файлового ввода/вывода 91

14.3 Режимы файлов 93

14.4 Двоичные файлы 94

14.5 Произвольный доступ к файлам 95

Список использованных источников 97

1Лексические основы языка Си/Си++

1.1Лексемы Си/Си++

Алфавит языка СИ включает буквы английского алфавита от A до Z и от a до z. Арабские цифры от 0 до 9. Специальные символы:

+ – / * . , : ; ( ) [ ] { } $ @ # ^ = < >&

Символ подчёркивания ­_ , считающийся буквой.

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

Служебные слова являются зарезервированными и переназначать их действие нельзя. Их нельзя использовать в качестве идентификаторов. Например: switch, struct, for, while. Служебные слова будут вводиться по ходу изучения языка.

Идентификатором называется последовательность цифр и букв, а также специальных символов, при условии, что первой стоит буква или специальный символ. Для образования идентификаторов могут быть использованы строчные или прописные буквы латинского алфавита. В качестве специального символа может использоваться символ подчеркивание (_). Два идентификатора для образования которых используются совпадающие строчные и прописные буквы, считаются различными. Например: abc, ABC, A128B, a128b .

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

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

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

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

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

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

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

Строка символов”

Символы разделители используются для отделения одних выражений от других (;), меток от операторов, переменных от типов (:).

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

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

/* начало алгоритма */

или

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

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

Неправильное определение комментариев.

/* комментарии к алгоритму /* решение краевой задачи */ */

или

/* комментарии к алгоритму решения */ краевой задачи */

Также можно использовать комментарии в стиле СИ++, который начинается двумя символами //. При этом каждая новая строка такого комментария должна начинаться с этих символов. Всё что написано слева от этих символов в строке компилятором игнорируется.

//комментарий в стиле СИ++

1.2Типы данных

1.2.1Объявление переменной

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

Объявления переменной имеет следующий формат:

[спецафикатор-класа-памяти] спецификатор-типа

описатель [=инициатор] [,описатель [= инициатор] ]...

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

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

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

Спецификатор класса памяти - определяется одним из четырех ключевых слов языка СИ: auto, extern, register, static, и указывает, каким образом будет распределяться память под объявляемую переменную, с одной стороны, а с другой, область видимости этой переменной, т.е., из каких частей программы можно к ней обратиться.

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

Ключевые слова для определения основных типов данных

Целые типы: Вещественные типы:

char float

int double

short long double

long

signed

unsigned

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

Примеры:

const double A=2.128E-2;

const B=286; (подразумевается const int B=286)

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

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

Тип Размер памяти в байтах Диапазон значений

char 1 от -128 до 127

int 2 от -32768 до 32767

short 2 от -32768 до 32767

long 4 от -2 147 483 648 до 2 147 483 647

unsigned shar 1 oт 0 до 255

unsigned int 2 от 0 до 65535

unsigned short 2 от 0 до 65535

unsigned long 4 от 0 до 4 294 967 295

Отметим, что ключевые слова signed и unsigned необязательны. Они указывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый. В случае отсутствия ключевого слова unsigned целая переменная считается знаковой. В том случае, если спецификатор типа состоит из ключевого типа signed или unsigned и далее следует идентификатор переменной, то она будет рассматриваться как переменная типа int. Например:

unsigned int n;

unsigned int b;

int c; (подразумевается signed int c );

unsigned d; (подразумевается unsigned int d );

signed f; (подразумевается signed int f ).

Отметим, что модификатор-типа char используется для представления символа (из массива представление символов) или для объявления строковых литералов. Значением объекта типа char является код (размером 1 байт), соответствующий представляемому символу. Для представления символов русского алфавита, модификатор типа идентификатора данных имеет вид unsigned char, так как коды русских букв превышают величину 127.

Следует сделать следующее замечание: в языке СИ не определено представление в памяти и диапазон значений для идентификаторов с модификаторами-типа int и unsigned int. Размер памяти для переменной с модификатором типа signed int определяется длиной машинного слова, которое имеет различный размер на разных машинах. Так, на 16-ти разрядных машинах размер слова равен 2-м байтам, на 32-х разрядных машинах соответственно 4-м байтам, т.е. тип int эквивалентен типам short int, или long int в зависимости от архитектуры используемой ПЭВМ. Таким образом, одна и та же программа может правильно работать на одном компьютере и неправильно на другом. Для определения длины памяти занимаемой переменной можно использовать операцию sizeof языка СИ, возвращающую значение длины указанного модификатора-типа.

Например:

a = sizeof(int);

b = sizeof(long int);

c = sizeof(unsigned long);

d = sizeof(short);

Отметим также, что восьмеричные и шестнадцатеричные константы также могут иметь модификатор unsigned. Это достигается указанием префикса u или U после константы, константа без этого префикса считается знаковой.

Например:

0xA8C (int signed );

01786l (long signed );

0xF7u (int unsigned );