Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Лекции по C++ ОККТ "Сервер" [12].pdf
Скачиваний:
124
Добавлен:
02.05.2014
Размер:
1.04 Mб
Скачать

Одесский

колледж

компьютерных

технологий

С++

Конспект

лекций Часть I

Одесса, 2003

Одесский колледж компьютерных технологий "СЕРВЕР"

Дорогой друг!

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

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

Пользовательский курс - позволит освоить основные принципы работы с компьютером. Вы сможете работать с операционной системой Windows 98,

пакетом Microsoft Office (Word, Excel, Access) и различными файловыми ме-

неджерами. С этого курса должен начинать каждый!!!.

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

Основы программирования – продолжение курса «Начала программирования». Изучаются все приемы традиционного программирования. Этот курс – основа будущего программиста.

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

вание операционных систем Windows NT и Linux. Этот курс основывается на знании курса «Системный оператор»

Объектно-ориентированное программирование – является расширением курса «Основы программирования». Изучается методы разработки программ в среде Windows.

Издательско-графические системы – изучаются мощные инструменты для создания графических публикаций CorelDraw , Photoshop , 3D MAX и др. Бухгалтерский учет на компьютере – изучается бухгалтерия и ее ведение с помощью программы 1С бухгалтерия.

Web-дизайн – Вы сможете разработать свою собственную интернетстраницу на профессиональном уровне.

Мы надеемся, что данное методическое пособие поможет тебе войти в мир компьютерных технологий и стать профессионалом. А мы тебе в этом поможем..

Желаем тебе успешной учебы и успехов! Специалисты и преподаватели Одесского колледжа компьютерных технологий "СЕРВЕР"

2

Одесский колледж компьютерных технологий "СЕРВЕР"

 

Содержание

 

Введение......................................................................................................

4

Переменные, основные типы и операции над ними. Ввод/вывод..........

5

Управление выводом информации на экран..........................................

13

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

14

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

14

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

17

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

19

Цикл с предусловием (while)........................................................................................

20

Цикл с постусловием (do while) ...................................................................................

21

Цикл с параметром (for)................................................................................................

21

Операторы передачи управления.................................................................................

23

Случайные числа...........................................................................................................

24

Вложенные циклы.........................................................................................................

25

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

26

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

29

Динамические массивы............................................................................

35

Многомерные массивы ............................................................................

35

Строки........................................................................................................

37

Типы пользователя...................................................................................

46

Переименование типов.................................................................................................

46

Перечисления (enum) ....................................................................................................

47

Структуры (struct).....................................................................................

47

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

50

Приложение...............................................................................................

58

Рекомендуемая литература......................................................................

62

3

Одесский колледж компьютерных технологий "СЕРВЕР"

Введение.

Написание хороших программ требует ума, вкуса и терпения.

Б. Страуструп

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

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

Вот что написал о важности дисциплины программирования создатель С++ Б. Страуструп: «Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые. С++ был разработан так, чтобы дать возможность разумным образом структурировать большие программы так, чтобы для одного человека не было непомерным справляться с программами в 25 000 строк. Существуют программы гораздо больших размеров, однако те, которые работают, в целом, как оказывается, состоят из большого числа почти независимых частей, каждая из которых намного ниже указанных пределов».

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. С таким умыслом первоначально задумывался C. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко. С таким умыслом предварительно задумывались средства, добавленные к C для создания C++.

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

4

Одесский колледж компьютерных технологий "СЕРВЕР"

Переменные, основные типы и операции над ними. Ввод/вывод.

Пример 1. Рассмотрим программу: #include <iostream.h> main() {

cout << "Hello, world\n";

}

Строка #include сообщает компилятору, чтобы он включил заголовочный файл iostream.h, в котором описана команда вывода на экран cout. Строка - это последовательность символов, заключенная в двойные кавычки, \n является символом новой строки1. Выводимые символы состоят из Hello, world и перевода строки.

cout << - вывод данных на экран. main() { ... }

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

Для того чтобы программа выдала результат, необходимо преобразовать её в код понятный компьютеру, т.е. в «0» и «1». Для этого служит компилятор. Чтобы откомпилировать Вашу программу выберите пункт меню «Compile» > «Compile» или нажмите F9. Если Вы не допустили синтаксических ошибок, о чём укажет компилятор в специальном окне, можно запускать программу на выполнение: меню «Run» > «Run» или нажмите Ctrl+F9. Чтобы просмотреть результаты работы программы, нажмите Alt+F5. Если же при компиляции были обнаружены ошибки, то все они будут указаны в окне

Message.

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

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

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

С++ имеет такие правила для идентификаторов:

в именах допускаются только латинские буквы, цифры и знак '_'.

1 Перечень специальных символов находится в Приложении

5

Одесский колледж компьютерных технологий "СЕРВЕР"

имя не должно содержать пробелов; если нужно имя из нескольких слов, их разделяют знаками подчеркивания '_', или андерлайнами

(underline).

имя не может начинаться с цифры.

прописные и строчные (большие и маленькие) буквы трактуются как разные. То есть, MAMA это не то же самое, что mama.

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

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

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

Символы // начинают комментарий, который заканчивается в конце строки, на которой они появились. Этот способ наиболее полезен для коротких комментариев.

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

#include<iostream.h> main() {

cout << "Звонок!\a\t Звонок!\a\t Звонок!\a";

}

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

int inch;

определяет, что inch имеет тип int (inch является целой переменной). Описание задает тип, который определяет правильное использование имени или выражения. Например, в данном случае для переменной inch, как для целой переменной, определены такие операции, как +, -, * и /.

Все переменные в программе должны быть описаны. При описании можно задать переменной начальное значение, это называется инициализа-

цией, например:

 

int a=1;

//целая переменная a

Char s, sf = 'f';

//символьные переменные s и sf, инициали-

зация относится только к sf

 

6

Одесский колледж компьютерных технологий "СЕРВЕР"

Float t = 0.22;

// вещественная переменная t

Целые типы:

Стандартные типы:

 

Int (целый) – позволяет хранить целые числа от 0 до 65535, занимает 2 байта.

Char (символьный) – для символов из набора ASCII (как правило, 1 байт)

Wchar_t (расширенный символьный) – для работы с символами, для кодировки которых недостаточно 1 байта, например, Unicode. Строковые константы этого типа записываются с префиксом L, например, L"Gates"

Bool (логический) – значения true – истина (любое число, кроме 0) и false – ложь (0); при преобразовании к целому типу true имеет значе-

ние 1.

Вещественные типы (типы с плавающей точкой):

Float (вещественный) – позволяет хранить числа 65535.65535, занимает 4 байта (2 байта до запятой и 2 после)

Double (вещественный с двойной точностью) – для больших чисел, за-

нимает 4 байта до запятой и 4 после.

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон стандартных типов:

Short (короткий)

Long (длинный)

Signed (знаковый)

Unsigned (беззнаковый)

Пример использования спецификаторов типа: short int, unsigned int. Кроме перечисленных, к основным типам языка относится тип void, но множество значений этого типа пусто. Пустой тип не занимает ни одного

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

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

1.Любые операнды типа char, unsigned char или short преобразуются к типу int по правилам:

char расширяется нулем или знаком в зависимости от умолчания для char;

unsigned char расширяется нулем;

signed char расширяется знаком;

short, unsigned short и enum при преобразовании не изменяются.

7

Одесский колледж компьютерных технологий "СЕРВЕР"

Затем любые два операнда становятся либо int, либо f I oat, double

или 1ong double.

2.Если один из операндов имеет тип long double, то другой преобразуется к типу long double.

3.Если один из операндов имеет тип double, то другой преобразуется к ти-

пу double.

4.Если один из операндов имеет тип float, то другой преобразуется к типу float.

5.Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long.

6.Иначе, если один из операндов имеет тип long, то другой преобразуется к типу long.

7.Иначе, если один из операндов имеет тип unsigned, то другой преобразуете к типу unsigned.

8.Иначе оба операнда должны иметь тип int.

Кроме переменных в программе могут использоваться константы. Их значение, в отличие от переменных, не может изменяться после инициализации. Чтобы описать константу, нужно перед её типом написать const:

const int n = 10; const float pi = 3.14; const char plus = '+';

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

Чтобы придать переменной какую-то информацию, используется знак =. Например:

A=5;

T='W';

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

С=10;

// константа

D=C;

// переменная

F=A - 3;

// выражение

Часто бывает так, что нужно сделать какое-то действие с самой переменной, например, прибавить к ней число:

А=А+5;

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

Можно присваивать по цепочке: int a=b=c=d=21;

8

Одесский колледж компьютерных технологий "СЕРВЕР"

При этом всем переменным a, b, c, d присваивается одинаковое значение 21.

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

ше):

 

double d = 1;

// вещественной переменной d задаётся целое значение 1

int i = 1;

// i – целая переменная

d = d + i;

// целая переменная i преобразуется к вещественному типу и

 

//результат сложения присваивается d

i = d + i;

// d приводится к целому и целая сумма присваивается I

Сложные операции присваивания (+=): ко второму операнду прибавляется первый, результат записывается в первый операнд. Аналогично –=, *= и т.д. Например

a+=b – то же самое, что a=a+b.

Программа на языке С++ состоит из функций, описаний и директив препроцессора. Как уже было сказано, одна из функций должна иметь имя main().

Директивы препроцессора начинаются со знака # (например, #include). Особенность их в том, что это команды для компилятора, а не самой программы. То есть, они используются при создании программы и влияют на ход ее выполнения.

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

a = b*3+c; d=(a+0.12)/6;

s=(t*sin(x)-1.05e4)/((2*k+2)*(2*k+3));

При этом очень важно указать, куда попадает результат – он должен быть либо присвоен какой-то переменной, либо выведен на печать. Следующая запись бессмысленна:

В+5;

поскольку компилятор сам не догадается, где эту сумму хранить.

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

+ (плюс, унарный и бинарный)

-(минус, унарный и бинарный)

* (умножение)

/(деление)

9

Одесский колледж компьютерных технологий "СЕРВЕР"

Математические функции (описаны в заголовочном файле <math.h>):

Ceil

Округление вверх

ceil(2.5)=3

floor

Округление вниз

floor(2.5)=2

sin

синус

Угол задаётся

cos

косинус

в радианах

tan

тангенс

 

abs

Модуль целого числа

 

fabs

Модуль дробного числа

 

fmod(x,y)

Остаток от деления x на y

fmod(3,2)=1

Pow(x,y)

Возведение в степень x y

Pow(2,3)=8

sqrt

Квадратный корень

 

Значения переменным можно задавать не только в тексте программы во время её написания, а и вводить с клавиатуры уже на этапе выполнения. В С++ для этого используется cin:

 

cin >> <переменная, в которую выполняется ввод>;

cin >>a

//позволяет ввести с клавиатуры букву, число или строку

 

//(зависит от того, какого типа переменная a).

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

Рассмотрим некоторые их них.

Операции уменьшения и увеличения на 1 (++ и --) :

Запись: x++ означает то же самое, что запись x=x+1. Запись: x-- означает x=x-1.

Операции уменьшения и увеличения на 1 имеют две формы записи:

Префиксная (операция перед операндом) – сначала изменяется операнд, а потом его значение становится результирующим значением выражения. Пример: ++d.

Постфиксная (операция после операнда) – значением выражения является исходное значение операнда, после чего он изменяется. При-

мер: d++.

Операция деления (/) применима к операндам арифметического типа.

Если оба операнда целочисленные, результат операции округляется до целого числа, в противном случае тип результата определяется правилами преобразования. Операция остатка от деления (%) применяется только к целочисленным операндам. Например: 7/2 есть 3; 7%2 равно 1.

Описание переменной, кроме типа и класса памяти, явно или по умолчанию задает ее область действия. Класс памяти и область действия

10

Одесский колледж компьютерных технологий "СЕРВЕР"

зависят не только от собственно описания, но и от места его размещения в тексте программы.

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

Область действия идентификатора — это часть программы, в ко-

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

Класс памяти определяет время жизни и область видимости про-

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

Время жизни может быть постоянным (в течение выполнения программы) и временным (в течение выполнения блока).

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

Для задания класса памяти используются следующие спецификато-

ры:

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

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

11

Одесский колледж компьютерных технологий "СЕРВЕР"

static статическая переменная. Время жизни — постоянное. Инициализируется один раз при первом выполнении оператора, содержащего определение переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными и локальными. Глобальные статические переменные видны только в том модуле, в котором они описаны.

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

int a;

 

// 1 глобальная переменная а

int main(){

 

 

int b;

// 2 локальная переменная b

extern int x;

// 3 переменная х определена в другом месте

static int с;

// 4 локальная статическая переменная с

а = 1;

// 5

присваивание глобальной переменной

int a;

// 6

локальная переменная а

а = 2;

// 7

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

::а - 3;

// 8

присваивание глобальной переменной

return 0;

 

 

}

 

 

int x = 4;

 

//9 определение и инициализация х

В этом примере глобальная переменная а определена вне всех блоков. Память под нее выделяется в сегменте данных в начале работы программы, областью действия является вся программа. Область видимости — вся программа, кроме строк 6-8, так как в первой из них определяется локальная переменная с тем же именем, область действия которой начинается с точки ее описания и заканчивается при выходе из блока. Переменные b и с — локальные, область их видимости — блок, но время жизни различно: память под b выделяется в стеке при входе в блок и освобождается при выходе из него, а переменная с располагается в сегменте данных и существует все время, пока работает программа.

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

Имя переменной должно быть уникальным в своей области действия (например, в одном блоке не может быть двух переменных с одинаковыми

именами).

 

int а;

// глобальная переменная

int main(){

 

static int b = 1;

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

int c;

// локальная переменная

12