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

1й курс / Konspekt_lektsiy_Informatika_2

.pdf
Скачиваний:
1
Добавлен:
12.06.2023
Размер:
350.61 Кб
Скачать

1

Тема №2. ПРОГРАММИРОВАНИЕ НА С++

2.1. Базовые средства языка

Язык С был создан в 1972 году во время работы над операционной системой UNIX. С++

язык объектного-ориентированного программирования.

Для выполнения программы на ПК ее необходимо перевести машинный (двоичный) код, с которым работает процессор. Перевод в машинный код осуществляется специальными программами – трансляторами, которые делятся на два класса:

·интерпретаторы переводят каждый оператор программы в машинный код, операторы выполняются процессором по мере перевода;

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

ВС++ в качестве транслятора обычно выступает компилятор, поэтому процесс перевода программы в машинный код называетсякомпиляцией программы. Наиболее распространен-

ными компиляторами С++ являются Dev C++ и Visual Studio.

2.1.1. Основные понятия языка

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

·прописные, строчные латинские буквы;

·арабские цифры от 0 до 9;

·

специальные знаки:. , : ; | [ ] ( ) { } + – / % * \ ‘ ? < = > ! & # ~ ^

·

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

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

Оператор задает законченное описание определенного действия. Операторы делятся на исполняемые и неисполняемые.

Исполняемые операторы задают действия над данными. Неисполняемые операторы служат для описания данных.

Программа – объединенная единым алгоритмом последовательность операторов. Каждый оператор программы завершается ;. Можно записывать несколько операторов в одну строку.

Идентификатор – имя программного объекта или переменной. Имя состоит из латинских букв, цифр и символа подчеркивания. Прописные и строчные буквы различаются:

ABC, abc, Abc – разные имена.

Имя должно начинаться с буквы или знака подчеркивания и не содержать пробелов. Имя не должно совпадать с ключевыми словами языка. Недопустимые имена:

9bc ® bc9 или _9bc, count mas ® count_mas

Комментарий – это поясняющий текст к программе, который игнорируется компилятором. Начинается с символов // и заканчивается переходом на новую строку:

//Это комментарий

или заключается в скобки:

/* Это комментарий */

2.2. Типы данных С++

Данные, которые обрабатываются программой, хранятся в оперативной памяти компью-

тера в виде переменных и констант.

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

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

2

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

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

Типы данных языка С++ делятся на основные и составные.

Основные типы данных С++: char – символьный,

int – целый,

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

double – вещественный с двойной точностью, bool – логический,

void – без типа (бестиповый).

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

называют составными типами данных.

Спецификаторы типов данных С++: short – короткий;

long – длинный; signed – знаковый;

unsigned – беззнаковый.

Различают описание переменных (определение их типа) и инициализацию переменных

(присвоение им начальных значений).

Оператор описания переменных в С++ имеет вид:

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

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

2.2.1. Символьный тип данных – char

Используется для хранения одного символа и обычно занимает в памяти1байт. Напри-

мер,

char c, str; // описаны символьные переменные c и str

При использовании в выраженияходиночного символа, его необходимо заключить в одинарные кавычки. Например, 'a', 'b', '+', '3'.

Последовательность символов – строка, при использовании в выражениях заключается в двойные кавычки: "Hello!".

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

По умолчанию все целые типы считаются знаковыми, т.е. спецификатор signed можно не указывать.

Тип

Диапазон

Размер

int

-32768…32767

4 байта

unsigned int

0…65535

4 байта

short int

-32768…32767

2 байта

long int

-2147483648…2147483647

4 байта

long long int

–263 …(263–1)

8 байт

unsigned long int

0 … 4294967295

4 байта

Пример описания целочисленных переменных: int a, b, c;

unsigned long int A, B, C;

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

3

2.2.3. Вещественные типы данных – float, double

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

Число с плавающей точкой представлено в экспоненциальной форме mE±p ® m×10p

где m – мантисса (целое или дробное число с десятичной точкой), p – порядок (целое число).

Например, 3.2E-6 = 3.2×10-6 =0.0000032

Длина мантиссы определяет точность числа, а длина порядка его диапазон. Спецификатор типа long перед именем типаdouble указывает, что под величину отво-

дится 10 байт.

 

Тип

Диапазон

Размер

float

 

3.4Е-38…3.4E+38

4

байта

double

1.7Е-308…1.7E+308

8

байт

long

double

3.4Е-4932…3.4E+4932

10 байт

Пример описания вещественных переменных: double x1, x2, x3;

float X, Y, Z;

2.2.4. Логический тип данных – bool

Переменная типа bool может принимать только два значенияtrue (истина) или false (ложь). Любое значение не равное нулю интерпретируется какtrue, а при преобразовании к целому типу принимает значение равное 1. Значение false представлено в памяти как 0.

Пример описания логических переменных: bool F, T;

2.2.5. Тип данных – void

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

2.3. Константы в языке С++

Константа это величина, которая не изменяет своего значения в процессе выполнения программы. Оператор описания константы имеет вид:

сonst тип_данных имя = значение;

Например:

const float PI=3.14159;

Константа может быть определена до главной функции. В этом случае применяется директива #define:

#define PI 3.141592653

2.4. Операции и выражения

Выражение задает порядок выполнения действий над данными и состоит из операндов (констант, переменных, обращений к функциям), круглых скобок и знаков операций (табл. 2.1). Операции делятся на унарные () и бинарные (а+b).

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

 

 

4

 

 

Таблица 2.1. Основные операции языка С++

Операция

 

Описание

 

 

Унарные операции

++

 

инкремент (увеличение значения на 1)

--

 

декремент (уменьшение значения на 1)

!

 

логическое отрицание

-

 

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

+

 

унарный плюс

&

 

взятие адреса

*

 

разадресация

 

 

Бинарные операции

+,

сложение, вычитание

*

 

умножение

/, %

целочисленное деление, остаток от деления

<,

>

меньше, больше

<=

 

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

>=

 

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

==

 

равно

!=

 

не равно

&&

 

логическое И

||

 

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

=

 

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

*=

 

умножение с присваиванием

/=

 

деление с присваиванием

+=

 

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

-=

 

вычитание с присваиванием

%=

 

остаток от деления с присваиванием

2.4.1. Оператор присваивания

Инициализация переменных выполняется с помощью оператора присваивания, который имеет вид:

имя_переменной = значение;

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

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

b=3; a=b;

c=c+1;

a=a*3;

c=a+2*b;

Пример 1. Пусть в переменной а хранится число 3, в переменной b число 5. Поменять местами значения переменных а и b.

Для решения задачи понадобится дополнительная перемен-

ная c.

// Шаг 1.

с=3

с=a;

a=b;

// Шаг

2.

a=5

b=c;

// Шаг

3.

b=3

Если в операторе присваивания левая и правая часть этопе-

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

В С++ существует возможность присваивания нескольким переменным одного и того же

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

5

значения. Такая операция называется множественным присваиванием:

имя1=имя2=…=имяN=значение;

Например, a=b=c=3.14159/6;

Операции +=, –=, *=, /= называют составным присваиванием. В таких операциях при вычислении выражения стоящего справа используется значение переменной из левой части. Например:

x+=p; //Увеличение x

на p ®

x=x+p.

x-=p; //Уменьшение x

на p ®

x=x-p.

x*=p;

//Умножение x на p

®

x=x*p.

x/=p;

//Деление x на

p

®

x=x/p.

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

При записи выражений на С++ необходимо учитывать приоритет выполнения арифме-

тических операций. Операции одного

уровня выполняются последовательно друг за другом

(слева на право).

 

 

 

 

 

 

Математическая запись

 

Запись на языке С++

 

 

2 × a + b × (c + d )

 

2*a+b*(c+d)

 

 

 

3 × a + b

 

 

 

 

 

(3*a+b)/(c+d)

 

 

 

c + d

 

 

 

 

 

 

 

 

 

 

 

3a - 2b2

 

 

 

 

 

(3*a-2*b*b)/(c*d)

 

 

 

c × d

 

 

 

 

 

 

(3*a-2*b)/c/d

 

 

 

3 × a

 

 

 

 

 

3*a/(2*c)

 

 

 

2 × c

 

 

 

 

 

 

 

 

 

 

(b - a)2

 

-

a2 +1

 

 

(b-a)*(b-a)/(c+1/(d-2))-

 

 

 

c +

1

 

b2 + cd

 

(a*a+1)/(b*b+c*d)

 

 

 

 

 

 

 

 

 

d - 2

 

 

 

 

 

 

 

 

 

 

 

 

2.4.3. Операции целочисленной арифметики

Операция целочисленного деления / возвращает целую часть частного (дробная часть отбрасывается) в том случае если она применяется к целочисленным операндам, в противном случае выполняется обычное деление:

int a; a=11;

® a/4 =

2

float b; b=11; ® b/4 =

2.75

или 11/4 = 2,

11./4 = 2.75.

Операция остаток от деления % применяется только к целочисленным операндам:

11%4 = 3.

 

 

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

Логические операции ||, &&, ! выполняются над логическими значениями true (исти-

на) и false (ложь).

>=, <, <=, ==, != является логическое значение

 

Результатом операции отношения >,

true (истина) или false (ложь). Например:

 

 

 

Математическая запись

 

Запись на языке С++

 

 

x ≥ 5

 

x >= 5

 

 

a = 1

 

a == 1

 

 

y ≠ 0

 

y != 0

 

 

1.5 ≤ z ≤ 2.5

 

(z >=1.5) && (z <= 2.5)

 

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

6

2.4.5. Операция преобразования типа

Для приведения выражения к другому типу данных в С++ существует операция преобра-

зования типа:

(тип) выражение;

Например, в результате действий x=5;

y=x/2; z=(float) x/2;

переменная y примет значение равное2 (результат целочисленного деления), а переменная z

=2.5.

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

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

sizeof (тип) или sizeof выражение

Например:

 

int a,b,c,d;

//В перем. a будет значение 4

a=sizeof(int);

b=sizeof(double);

//В перем. b будет значение 8

c=sizeof 4/2;

//В перем. c будет значение 2

d=sizeof 4./2;

//В перем. d будет значение 4

2.5.Стандартные функции

ВC++ определены стандартные функции над арифметическими операндами (табл. 2.2). Работа с математическими функциями возможна только при подключении директивы math.h.

#include <math.h>

 

 

 

 

 

 

 

 

 

 

 

Таблица 2.2. Математические функции

 

 

 

 

 

 

 

 

Обозначение

 

 

 

Действие

 

 

 

 

abs(x)

 

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

 

 

 

 

 

 

 

fabs(x)

 

Модуль вещественного числа

 

 

 

 

sin(x)

 

Функция синус

 

 

 

 

 

 

 

 

cos(x)

 

Функция косинус

 

 

 

 

 

 

 

 

tan(x)

 

Функция тангенс

 

 

 

 

 

 

 

 

atan(x)

 

Арктангенс х в диапазоне -p/2 до p/2

 

 

 

 

exp(x)

 

Экспонента, ex

 

 

 

 

 

 

 

 

log(x)

 

Натуральный логарифм (

 

 

)

 

 

 

 

 

 

 

 

 

 

 

 

x>0

 

 

 

 

 

log10(x)

 

Десятичный логарифм (

 

)

 

 

 

 

 

 

 

 

 

 

 

 

 

x>0

 

 

 

 

 

 

sqrt(x)

 

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

x≥0

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pow(x,y)

 

x в степени y

 

 

 

 

 

 

 

 

round(x)

 

округление вещественного x до ближайшего целого

 

 

 

 

 

 

 

Примеры записи математических выражений

 

 

 

 

 

3

(a + b)2

 

pow((a+b)*(a+b),1./3) или pow(pow(a+b,2),1./3)

cos3(x)

 

 

 

cos(x)*cos(x)*cos(x)

или

 

pow(cos(x), 3)

5sin

æ x

ö

 

 

 

 

 

 

 

 

 

ç

 

 

÷

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

è 2

ø

 

 

exp(5*sin(x/2))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sin

 

2x

 

sin(sqrt(2*x))

 

 

 

 

 

ln | x - 2 |

log(fabs(x-2))

 

 

 

 

 

log3 (x2 +1)

log(x*x+1)/log(3)

 

 

 

 

 

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

7

sin(x2 +)cos

x2

 

 

+

x2 + y2

sin(x*x)+cos(x*x/(2*y))+sqrt(x*x+y*y);

2 × y

 

 

 

 

Особого внимания требует применение функцииpow(x,y), которая возводит х в степень y.

Ошибка возникает, если х отрицательное число, а y дробь. Предположим, что y – правильная дробь вида k/m.

k

x m = m xk

Если знаменатель m четный, это означает вычисление корня четной степени из отрицательного числа, а значит, операция не может быть выполнена. В противном случае, если знаменатель m нечетный, можно воспользоваться выражением

z=–pow(fabs(x),y).

Тема №3. ПРОГРАММИРОВАНИЕ НА С++

3.1. Структура программы

Программа на С++ может состоять из одной или нескольких функций.

Каждая функция состоит из строки заголовка и тела функции, которое заключаются в фигурные скобки {}.

тип имя_функции (параметры) //Заголовок функции

{

операторы_функции; //Тело функции

}

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

имя_функции – идентификатор, по которому происходит обращение к функции(вызов функции);

параметры – список аргументов функции (может отсутствовать). Тело функции условно делится на две части:

описательную – операторы, определяющие все переменные, которые будут использоваться в функции;

исполнимую – операторы, реализующие алгоритм решения задачи.

Программе всегда должна содержать главную функцию с именемmain. Функции в программе не должны быть вложенными друг в друга.

В общем случае программа на С++ включает в себя директивы процессора, описания и функции.

Директивы процессора располагаются вначале программы(перед функциями) и задаются в виде:

#include <имя_файла>

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

Общая структура программы на языке С++:

#include //директивы процессора #define //описание переменных и констант //описание функций

тип имя_функции1(параметры1)

{

операторы_тела_функции1;

}

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

8

..................

тип main(параметры)

{

операторы_тела_главной_функции;

}

По месту объявления (описания) переменные делятся на локальные и глобальные. Локальные переменные объявляются внутри функции и доступны только в ней. Глобальные переменные описываются до всех функций и доступны из любого места программы.

3.1.1. Начало работы в Dev-C++

В компиляторе Dev-C++ для создания консольной программы необходимо выполнить команду:

File – New – Project – Console Application

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

#include <cstdlib> //Директива процессора #include <iostream> //Директива процессора using namespace std;

//Заголовок главной функции

int main(int argc, char *argv[])

{//Начало тела функции

…; //Операторы описания переменных …; //Исполняемые операторы тела функции

//Операторы задающие паузу при завершении //работы программы

system("PAUSE"); return EXIT_SUCCESS;

}//Конец тела функции

Текст программы сохраняется в файле *.cpp.

Для использования в операторах ввода/вывода русских букв необходимо :

1)добавить директиву процессора

#include <Windows.h>

2)в начало тела функции main добавить операторы

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

3)запустить программу на выполнение;

4)в заголовке окна консоли вызвать контекстное меню и выбрать команду «Свойства»;

5)в окне команды «Свойства» на вкладке «Шрифт» выбрать шрифт

Lucida Console

3.1.2. Начало работы в MS Visual Studio

Для работы с пакетом запуститьMicrosoft Visual Studio. Затем выполнить следующие действия:

1. Создать проект (команда Файл – Создать – Проект).

1.1.Выбрать «Консольное приложение Win32 Visual C++».

1.2.Ввести имя проекта, например, Lab2_1 (все файлы проекта будут помещены в папку

стаким же именем).

1.3.Выбрать расположение проекта, для этого нажать кнопку «Обзор» и открыть папку

Рабочий стол ® Students ® Имя группы ® Личная папка (Фамилия).

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

9

1.4.В окне «Мастер приложений Win32» нажать кнопку «Готово».

1.5.В результате в окне редактораMicrosoft Visual Studio будет создана заготовка будущей программы, аналогичная Dev-C++ (вместо main будет _tmain).

2.В область директив процессора добавить строки

#include <iostream> using namespace std;

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

return 0;

добавить оператор system("PAUSE");

4.Для использования в операторах ввода/вывода русских букв в начало тела функции main добавить оператор

setlocale(LC_ALL, “Russian”);

3.2. Ввод и вывод данных

Ввод-вывод данных в языке С++ может осуществляться двумя способами.

1.С помощью функций ввода-вывода в стиле С.

2.С помощью объектов библиотеки классов С++.

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

3.2.1. Функции ввода-вывода

Для использования функций ввода-вывода, программа должна содержать директиву

#include <stdio.h>

которая содержит описание функций scanf/printf. Функция вывода

printf(строка_вывода, [список_выводимых_переменных]);

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

ке_вывода, в соответствии со списком_выводимых_переменных.

Строка_вывода записывается в двойных кавычках и содержит текст и спецификаторы, которые будут выводиться на экран.

В простейшем случае операторprintf позволяет выводить обычный текст. Например, оператор:

printf("Literal text.");

выведет на экран текст: Literal text.

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

Спецификатор форматов – это набор символов, который начинается символом% и управляет форматированием выводимого значения переменной. Имеет вид:

%[ширина][.точность]тип

где тип указывает на тип выводимой переменной и может принимать следующие значения: d – десятичное int со знаком;

f – десятичное float со знаком; с – одиночный символ;

s – строка символов.

ширина – количество позиций отводимых под значение в поле вывода(включает все символы выводимого значения). Если указанное количество позиций недостаточно, то поле вывода расширяется до минимально необходимого. Незаполненные позиции заполняются пробелами;

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

10

точность количество знаков после десятичной точки, при этом

ширина ≥ точность+2.

Параметры ширина и точность в спецификаторе могут отсутствовать. Например, пусть х=2.51, тогда оператор:

printf("x=%f",x);

выведет на экран значение х в виде:

х=2.510000

При форматном выводе оператор:

 

printf("x=%4.2f",x);

х=2.51

выведет на экран значение х в виде:

Кроме того, строка форматов может содержать специальные символы:

\n

перевод на новую строку;

 

\t

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

 

Например, пусть х=2.51 и y=3.1 тогда оператор: printf("Result \n x=%4.2f \t y=%3.1f \n",x,y);

выведет на экран:

Result

x=2.51 y=3.1

Спецификаторы формата в строке вывода оператораprintf должны точно соответствовать типу и количеству переменных в списке выводимых переменных!

Функция ввода

scanf(строка_форматов, список_адресов_вводимых_переменных);

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

Строка_форматов записывается в двойных кавычках, и содержит только спецификаторы формата (см. функцию printf), соответствующие переменным из списка ввода, и разделители (пробел, \t, \n).

Переменные в списке ввода обязательно записываются со знаком& – амперсант (операция – взятие адреса). Исключение составляют только имена массивов.

Например, оператор scanf("%f",&x);

требует ввести значение вещественной переменной .хПосле ввода числа необходимо нажать клавишу Enter.

В случае если одна функция scanf используется для ввода значений нескольких перемен-

ных,

scanf("%f %f",&x,&y);

то числа можно вводить через пробел и завершать ввод клавишей Enter.

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

Например, printf("Input x = "); scanf("%f",&x);

Пример 3.1 (лабораторная работа 2.1). Для заданного значения x вычислить

y = sin( 1.2x )- ex+1.5 + ln(1+ | x |) .

cos x + 2x3

Текст программы (для Dev-C++):

//Директива подключения функций scanf/printf

#include <stdio.h>

//Директива подключения математических функций

#include <math.h> using namespace std;

Конспект лекций по «Информатике»

Ó Ефименко К.Н.

Соседние файлы в папке 1й курс