
- •Сведения об авторах
- •1. Знакомство с языком С++
- •1.1 Первая программа на С++
- •1.2 Среда программирования Qt Creator
- •2. Общие сведения о языке С++
- •2.1 Алфавит языка
- •2.2 Данные
- •2.2.1 Символьный тип
- •2.2.2 Целочисленный тип
- •2.2.3 Вещественный тип
- •2.2.4 Логический тип
- •2.2.5 Тип void
- •2.3 Константы
- •2.4 Структурированные типы данных
- •2.5 Указатели
- •2.6 Операции и выражения
- •2.6.1 Операции присваивания
- •2.6.2 Арифметические операции
- •2.6.3 Логические операции
- •2.6.4 Операции отношения
- •2.6.5 Условная операция
- •2.6.6 Операция преобразования типа
- •2.6.7 Операция определения размера
- •2.6.8 Операции с указателями
- •2.7 Стандартные функции
- •2.8 Структура программы
- •2.9 Ввод и вывод данных
- •2.9.1 Функции ввода - вывода
- •2.10 Задачи для самостоятельного решения
- •2.10.2 Операции целочисленной арифметики.
- •2.10.3 Встроенные математические функции
- •3. Операторы управления
- •3.1 Основные конструкции алгоритма
- •3.2 Составной оператор
- •3.3 Условные операторы
- •3.3.1 Условный оператор
- •3.3.2 Оператор варианта
- •3.4 Операторы цикла
- •3.4.1 Оператор цикла с предусловием
- •3.4.2 Оператор цикла с постусловием
- •3.4.3 Оператор цикла с параметром
- •3.4.4 Операторы передачи управления
- •3.5 Решение задач с использованием циклов
- •3.6 Задачи для самостоятельного решения
- •3.6.1 Разветвляющийся процесс. Вычисление значения функции.
- •3.6.2 Разветвляющийся процесс. Попадание точки в плоскость.
- •3.6.3 Разветвляющийся процесс. Пересечение линий и решение уравнений.
- •3.6.4 Циклический процесс. Вычисление значений функции
- •3.6.6 Циклический процесс. Последовательности произвольных чисел
- •3.6.7 Циклический процесс. Работа с цифрами в числе
- •3.6.8 Вложенные циклы
- •4. Использование функций при программировании на С++
- •4.1 Общие сведения о функциях. Локальные и глобальные переменные
- •4.2 Передача параметров в функцию
- •4.3 Возврат результата с помощью оператора return
- •4.4 Решение задач с использованием функций
- •4.5 Рекурсивные функции
- •4.6 Перегрузка функций
- •4.7 Шаблоны функций
- •4.8 Область видимости переменных в функциях
- •4.9 Функция main(). Параметры командной строки
- •4.10 Задачи для самостоятельного решения
- •4.10.1 Применение функций при работе с последовательностями чисел
- •4.10.2 Применение функций для вычислений в различных системах счисления
- •4.10.3 Применение функций для решения нелинейных уравнений
- •5. Массивы
- •5.1 Статические массивы в С(С++)
- •5.1.1 Описание статических массивов
- •5.1.2 Основные операции над массивами
- •5.2 Динамические массивы в С(С++)
- •5.2.1 Функция malloc
- •5.2.2 Функция calloc
- •5.2.3 Функция realloc
- •5.2.4 Функция free
- •5.2.5 Операторы new и delete
- •5.3 Основные алгоритмы обработки массивов
- •5.3.2 Вычисление суммы элементов массива
- •5.3.3 Вычисление произведения элементов массива
- •5.3.4 Поиск максимального элемента в массиве и его номера
- •5.3.5 Удаление элемента из массива
- •5.3.6 Сортировка элементов в массиве
- •5.3.6.1 Сортировка методом «пузырька»
- •5.3.6.2 Сортировка выбором
- •5.3.6.3 Сортировка вставкой
- •5.4 Указатели на функции
- •5.5 Совместное использование динамических массивов, указателей, функций в сложных задачах обработки массивов
- •5.6.1 Основные операции при работе с массивами
- •5.6.2 Применение функций для обработки массивов.
- •5.6.3 Работа с группами элементов в массиве
- •5.6.4 Сортировка элементов массива
- •6. Статические и динамические матрицы
- •6.1 Статические матрицы С(С++)
- •6.2 Динамические матрицы
- •6.2.1 Использование указателей для работы с динамическими матрицами
- •6.2.2 Использование двойных указателей для работы с динамическими матрицами
- •6.3 Обработка матриц в С(С++)
- •6.4 Решение некоторых задач линейной алгебры
- •6.5 Задачи для самостоятельного решения
- •6.5.1 Основные операции при работе с матрицами
- •6.5.2 Работа со строками и столбцами матрицы
- •6.5.3 Решение задач линейной алгебры
- •7. Организация ввода-вывода в C++
- •7.1.2 Использование манипуляторов форматирования
- •7.2 Работа текстовыми файлами в C++
- •7.2.1 Запись информации в текстовый файл
- •7.2.2 Чтение информации из текстового файла
- •7.3 Обработка двоичных файлов
- •8. Строки в языке С++
- •8.1 Общие сведения о строках в С++
- •8.2 Операции над строками
- •8.3 Тип данных string
- •8.4 Задачи для самостоятельного решения
- •9. Структуры в языке С++
- •9.1 Общие сведения о структурах
- •9.2 Библиотеки для работы с комплексными числами
- •9.3 Задачи для самостоятельного решения
- •9.3.1 Структуры. Операции над комплексными числами
- •9.3.2 Работа с библиотекой комплексных чисел

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
28 |
||
p1=p1+3; |
//Увеличение значения адреса на 3*8=24 |
|
|
|
//(размер типа double), в |
результате |
|
|
//указатель сместиться на |
три ячейки, |
|
|
//размером double каждая. |
|
|
Вычитание двух указателей определяет сколько переменных данного типа размещается между указанными ячейками. Разность двух указателей это разность их значений, деленная на размер типа в байтах. Так разность указателей на третий и нулевой элементы массива равна трем, а на третий и девятый – шести. Суммирование двух указателей не допускается.
Операции инкремента и декремента, соответственно, увеличивают или уменьша-
ют значение адреса: double *p1;
float *p2;
int *i; |
//Увеличение значения адреса на 8. |
|||
p1++; |
||||
p2++; |
//Увеличение |
значения адреса |
на |
4. |
i++; |
//Увеличение |
значения адреса |
на |
2. |
К указателям так же применимы операции отношения ==, !=, <, >, <=, >=. Иными словами указатели можно сравнивать. Например, если i указывает на пятый элемент массива, а j на первый, то отношение i>j истинно. Кроме того, любой указатель
всегда можно сравнить на равенство с нулем. Однако, все эти утверждения верны, если речь идет об указателях ссылающихся на один массив. В противном случае результат арифметических операций и операций отношения будет не определен.
2.7Стандартные функции
ВC++ определены стандартные функции над арифметическими операндами13. В таблице 2.8 приведены некоторые из них.
|
Таблица. 2.8. Стандартные математические функции |
|||
Обозначение |
|
Действие |
|
|
|
|
|
|
|
abs(x) |
|
Модуль целого числа x |
|
|
fabs(x) |
|
Модуль вещественного числа x |
||
sin(x) |
|
Синус числа x |
|
|
cos(x) |
|
Косинус числа x |
|
|
tan(x) |
|
Тангенс числа x |
|
|
atan(x) |
|
Арктангенс числа x, |
x (−π |
; π ) |
|
|
|
2 |
2 |
acos(x) |
|
Арккосинус числа x |
|
|
asin(x) |
|
Арксинус числа x |
|
|
exp(x) |
|
Экспонента, ex |
|
|
log(x) |
|
Натуральный логарифм, (x>0) |
|
|
log10(x) |
|
Десятичный логарифм, (x>0) |
|
|
sqrt(x) |
|
Корень квадратный, (x>0) |
|
13 Работа с математическими функциями возможно только при подключении директивы math.h (п. 2.6)

Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
29 |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обозначение |
Действие |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
pow(x,y) |
|
|
|
|
Возведение числа x в степень y |
|
|||||
ceil(x) |
|
|
|
|
Округление числа x до ближайшего |
||||||
|
|
|
|
|
|
|
|
|
|
большего целого |
|
floor(x) |
|
|
|
|
Округление числа x до ближайшего |
||||||
|
|
|
|
|
|
|
|
|
|
меньшего целого |
|
Примеры записи математических выражений с использованием встроенных функ- |
|||||||||||
ций представлены в таблице 2.9. |
|
|
|||||||||
|
|
|
|
|
|
|
Таблица. 2.9. Примеры записи математических выражений |
||||
|
Математическая запись |
Запись на языке С++ |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
√(a+b) |
|
|
|
|
pow((a+b)*(a+b),1./3) |
|
|||||
3 |
2 |
|
|
|
|
|
pow(pow(a+b,2),1./3) |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
cos4 (x ) |
|
|
|
|
pow(cos(x), 4) |
|
|||||
e2x |
|
|
|
|
exp(2*x) |
|
|||||
e |
5sin( 2 ) |
|
|
|
|
exp(5*sin(x/2)) |
|
||||
|
|
x |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
sin2 (√ |
|
) |
|
|
|
|
pow(sin(sqrt(x)),2) |
|
|||
x |
|
|
|
|
|
||||||
ln( x−2 ) |
|
|
|
|
log(fabs(x-2)) |
|
|||||
logb a |
|
|
|
|
log(a)/log(b) |
|
|||||
lg( x2+1) |
|
|
|
|
log10(x*x+1)/log10(4) |
|
|||||
|
lg(4) |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
sin( x2+ y2)+cos |
(x2 + y2 ) |
+√ |
|
|
z=x*x+y*y; |
|
|||||
x2 + y2 |
|
||||||||||
|
|
||||||||||
|
|
|
|
|
|
2 y |
sin(z)+cos(z)/(2*y)+sqrt(z); |
|
|||
Определенную |
проблему представляет применение функции pow(x,y). При |
программировании выражений, содержащих возведение в степень, надо внимательно проанализировать значения, которые могут принимать х и y, так как в некоторых слу-
чаях возведение х в степень y невыполнимо.
Так, ошибка возникает, если х – отрицательное число, а y – дробь. Предположим,
что y – правильная дробь вида |
k |
. Если знаменатель m четный, это означает вычис- |
m |
ление корня четной степени из отрицательного числа, а значит, операция не может быть выполнена. В противном случае, если знаменатель m нечетный, можно воспользоваться выражением z = –pow(fabs(x),y). Например, вычисление кубического корня из
вещественного числа можно представить командой:
z=(x<0) ? -pow(fabs(x),(double) 1/3) : pow(x,(double) 1/3);
2.8Структура программы
Программа на языке С++ состоит из функций, описаний и директив процессора. Одна из функций должна обязательно носить имя main. Элементарное описание
функции имеет вид:
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
30 |
тип_результата имя_функции (параметры)
{
оператор1;
оператор2;
…
операторN;
}
Здесь, тип_результата – это тип того значения, которое функция должна вычислить (если функция не должна возвращать значение, указывается тип void), имя_функции – имя, с которым можно обращаться к этой функции, параметры – список аргументов функции (может отсутствовать), оператор1, оператор2, …, операторN – операторы, представляющие тело функции, они обязательно заключают-
ся в фигурные скобки и каждый оператор заканчивается точкой с запятой. Как правило программа на С++ состоит из одной или нескольких, не вложенных друг в друга функций.
Основному тексту программы предшествуют директивы процессора, которые в
общем виде выглядят так:
#include <имя_файла>
Каждая такая строка дает компилятору команду присоединить программный код, который хранится в отдельном файле с расширением .h. Такие файлы называют файлами заголовков. С их помощью можно выполнять ввод-вывод данных, работать с математическими функциями, преобразовывать данные, распределять память и многое другое. Например, описание стандартных математических функций находится в заголовочном файле math.h.
Общую структуру программы на языке С++ можно записать следующим образом:
директивы процессора описание глобальных переменных
тип_результата main(параметры) {описание переменных главной функции;
операторы главной функции;
}
тип_результата имя1(параметры1) {описание переменных функции имя1;
операторы1;
}
тип_результата имя2(параметры2) {описание переменных функции имя2;
операторы2;
}
.....................................
тип_результата имяN(параметрыN) {описание переменных функции имяN;
операторыN;
}
По месту объявления переменные в языке Си можно разделить на три класса: локальные, глобальные и формальные параметры функции.
Локальные переменные объявляются внутри функции и доступны только в ней. Например:
int main() |
//В функции main определена |
{ float s; |