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

Алгоритмизация и программирование. Учебное пособие для студентов направления подготовки 09.03.02 Информационные системы и технологии

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

Знаки логических операций:

&& логическое И;

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

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

Знаки операций автоинкремента и автодекремента:

++ знак операции автоинкремента – увеличение операнда на единицу;

– – знак операции автодекремента – уменьшение операнда на единицу.

Знаки операции присваивания:

= операция присваивания (например, = 6);

+= или –= присваивание со сложением или вычитанием (например, += 5 эквивалентно = + 5);

*= или /= присваивание с умножением или делением (например, /= 2 эквивалентно = /2);

%= присваивание с нахождением остатка (например, % = 3 эквивалентно

= %3).

Операторы делятся на четыре группы основных управляющих конструкций:

операторы следования – операторы простой последовательности действий;

условные конструкции – операторы ветвления;

циклические конструкции – операторы циклов;

безусловные конструкции – операторы перехода.

Каждому аргументу соответствует своя спецификация преобразования, которая начинается с символа процента (%), после которого стоит буква, указывающая тип данных:

%d – десятичное целое число;

%f – вещественное число типа float или double;

%c – символ;

%s – строка;

%p – указатель;

%u – беззнаковое целое число;

%o – целые числа в восьмеричной системе счисления;

%x – целые числа в шестнадцатеричной системе счисления;

%e – вещественное число в экспоненциальной форме.

31

Управление перемещением курсора на экране и выполнение некоторых других функций при помощи управляющих кодов (escape-последовательностей) осуществляется специальным набором символов, которые начинаются с символа обратной наклонной черты (\):

\n – перемещение курсора в начальную позицию следующей строки;

\t – перемещение курсора в следующую позицию табуляции экрана;

\r – перемещение курсора к началу той же строки без перехода на следующую;

\b – передвижение курсора только на одну позицию влево.

Приведем пример программы, в которой используются простые операторы.

Задача 1. Вычислите арифметические действия (сумму, разность, произведение и частное) двух целых чисел 6 и 2.

Математическая модель и описание алгоритма решения. Пусть – первое число, / – второе число, 0 – их сумма, 1 – разность, 2 – произведение, – частное. В данной задаче переменные и / задаются (вводить их не нужно, они определены сразу), а переменные 0, 1, 2 и только объявляются. Обратите внимание, если , / – целые, то их сумма 0, разность 1 и произведение 2 тоже всегда целые величины, но частное – не обязательно.

Если / не является делителем числа , то значение частного // будет вещественным. Решение задачи состоит в поочередном выполнении четырех арифметических дейст-

вий, а затем выводе значений результата действий на экран.

Вначале составим программу с использованием директивы #include <stdio.h>.

32

Текст программы к задаче 1.

--------------------------------------------------------------------------------------------------

#include <stdio.h>

int main ()

{

int x = 6; int y = 2; /* определение переменных*/

int s, r, p;

 

float c;

/* объявление переменных*/

s = y + x;

 

r = x - y;

/* операторы */

p = x*y;

 

c = x/y;

printf(" Sum of numbers: s = %d \n Number difference: r = %d", s, r); printf(" \n Product of numbers: p = %d \n Quotient of numbers: c = %f", p, c);

return 0;

}

--------------------------------------------------------------------------------------------------

В компиляторе языка С++ этот компьютерный код представлен на рис. 11.

Рис 11. Программный код задачи 1 с директивой #include <stdio.h>

А теперь изменим описание программы с учетом использования директивы #include

<iostream>.

33

Текст программы к задаче 1.

-------------------------------------------------------------------------------------------------

#include <iostream> using namespace std;

int main()

{

int x = 6; int y = 2; /* определение переменных*/

int s, r, p;

 

float c;

/* объявление переменных*/

s = y + x;

 

r = x - y;

/* операторы */

p = x*y;

 

c = x/y;

cout << " Sum of numbers: s = " << s << "\n"; cout << " Number difference: r = " << r << "\n"; cout << " Product of numbers: p = " << s << "\n"; cout << " Quotient of numbers: c = " << r << "\n";

return 0;

}

-------------------------------------------------------------------------------------------------

Обратите внимание, существенное отличие в написании текста программы с учетом использования директивы #include <stdio.h> и #include <iostream> заключается в описании вывода переменных суммы s, разности r, произведения p и частного с.

Использование набора символов "\n" во втором тексте программы позволяет перемещать курсор в начальную позицию следующей строки. Это необходимо для лучшего визуального восприятия результатов вычислений.

В компиляторе языка С++ этот компьютерный код представлен на рис. 12.

Рис 12. Программный код задачи 1 с директивой #include <iostream>

34

Результат реализации программы представлен на рис. 13:

Рис 13. Результат решения задачи 1

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

Задача 2. Введите переменные 34, , 5 и вычислите значение функции 0 = 345 + 67. Математическая модель и описание алгоритма решения. В данной задаче переменные

34, , 5 являются вещественными и вводятся пользователем, а переменная s объявляется и вычисляется по формуле. Вывод на экран надписи «Enter the initial velocity v0, acceleration a and time t, separated by a space» с помощью функции prinf() предупреждает, что переменные необходимо ввести через пробел строго по порядку: 34, , 5.

Для вычисления значения 0 специальных математических функций не требуется, достаточно использовать операцию умножения. Составим программу с использованием директивы #include <stdio.h>.

Текст программы к задаче 2.

----------------------------------------------------------------------------------------------------

#include <stdio.h> int main ()

{float v0, a, t, s;

printf (" Enter the initial velocity v0, acceleration a and time t, separated by a space: \n");

scanf("%f%f%f", &v0, &a, &t); s = v0 * t + a * t * t / 2; printf("s=%f", s);

return 0;

}

---------------------------------------------------------------------------------------------------

35

В компиляторе языка С++ этот компьютерный код представлен на рис. 14.

Рис 14. Программный код задачи 2

Пользователю необходимо ввести значения переменных (рис. 15) в следующем порядке: вначале начальную скорость 34, затем ускорение и в конце – время 5. Каждое введённое значение должно быть разделено пробелами:

Рис 15. Введение переменных пользователем в задаче 2

Для примера работы программы пользователь ввёл значения:

34

= 5,

= 2,

 

5 = 10.

В этом случае значение

 

 

 

2 ∙ 10

∙ 10

 

5

 

= 5 ∙ 10 +

= 50 + 100 = 150.

0 = 345 + 2

 

2

 

Результат реализации программы на рис. 16:

Рис 16. Результат решения задачи 2

36

Глава 4. ОПЕРАТОР ПРОСТОЙ

ПОСЛЕДОВАТЕЛЬНОСТИ ДЕЙСТВИЙ

§ 1. Функции ввода/вывода данных.

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

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

словами языка. Производные (определяемые) получаются на основе базовых и делятся на скалярные:

перечисления;

указатели;

ссылки,

иструктурные:

массивы;

структуры;

объединения;

классы.

Вкомпьютере данные хранятся в двоичных кодах. Например, число может кодироваться 1, 2, 4 или 8 байтами, в зависимости от того, к какому типу оно относится.

Классификация базовых типов данных приведена в таблице 5.

Табл. 5 Базовые типы данных

Типы данных

Назначение

Размер, байт

Диапазон значений

bool

для логического

1

false, true

значения

 

 

 

char

для символа

1

-128 … +127

wchar_t

для символа

2

-32768 … +32767

из расширенного набора

 

 

 

int

для целого значения

4

-2147483648 … +2147483647

float

для значения

4

±3,4·10-38 … ±3,4·10+38 (7 цифр)

 

с плавающей точкой

 

 

double

для значения

8

±1,7·10-308 … ±1,7·10+308

с плавающей точкой

(15 цифр)

 

удвоенной точности

 

 

 

 

37

Типы данных имеют особое значение в языке С++, так как он строго типизирован. Компилятор контролирует соответствие типов и не пропускает недопустимые операции. Поэтому строгое следование и применение необходимых типов данных позволяет исключать ошибки и повышает надежность программ. Чтобы структурировать информацию о типах данных, расположим их в виде дерева (рис. 17).

 

 

 

 

 

 

 

 

 

 

 

 

Типы данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Базовые

 

 

 

 

 

 

 

 

 

 

 

 

Производные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пустой (void)

 

 

 

 

скалярные

 

 

 

скалярные

 

 

структурные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

перечисления

 

 

массивы

 

 

 

 

 

 

 

 

 

 

вещественный

 

 

 

 

 

 

 

целочисленный

 

 

 

 

 

 

 

(enum)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(float, double)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

указатели (*)

 

 

структуры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(struct)

логический

 

 

 

символьный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

объединения

 

 

(bool)

 

 

(char, wchar_t)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ссылки (&)

 

 

(union)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

целый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

классы (class)

 

 

 

 

(short, int, long)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 17 Дерево классификации типов данных

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

Любая последовательность операторов, заключенная в фигурные скобки ({ }), представляет собой составной оператор (блок).

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

внешними устройствами: ввод (с внешних устройств в оперативную память) и вывод (из оперативной памяти на внешние устройства).

Напомним, что обмен данными реализуется с помощью библиотек функций ввода/вывода в #include<stdio.h> или #include<iostream>.

Для библиотеки <stdio.h> основными функциями форматного ввода/вывода являются

38

scanf() и printf().

Любая операция ввода-вывода – это операция обмена с файлами: чтение информации из файла или запись в файл. Аналогом внутреннего файла является поток – байтовая последовательность, передаваемая в процессе ввода-вывода. Поток должен быть связан с внешним устройством или файлом на диске.

Библиотека <iostream> определяет три стандартных потока:

входной поток cin;

выходной поток cout;

стандартный поток вывода сообщений об ошибках cerr.

Чтобы использовать эти потоки, необходимо в заголовке программы до функции main() прописать строку:

using namespace std;

Для выполнения ввода-вывода переопределены две операции поразрядного сдвига:

>> получить из входного потока

<< поместить в выходной поток

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

cout << значение; cout << n;

Возможно использование данных объектов многократно.

cout << "значение_1" << "значение_2" << ... << "значение_n";

Для ввода информации используют cin. Из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор.

39

cin >> идентификатор; int n;

cin >> n;

Возможно использование данных объектов многократно.

cin >> переменная_1 >> переменная_2 >> ... >> переменная_n;

Набирая данные на клавиатуре, значения для такого оператора должны быть разделены символами (пробел, \n, \t).

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

Обобщенный формат спецификации преобразования имеет вид:

% ширина_поля.точность спецификатор; Обязательными являются только два параметра:

% и спецификатор.

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

для целых чисел:

d – считывается значение аргумента в десятичной форме, преобразуется в тип int;

u – значение аргумента в десятичной форме без знака, в тип unsignedint;

o – значение аргумента в восьмеричной форме без знака, в тип unsignedint;

x – значение аргумента в шестнадцатеричной форме без знака, в тип unsignedint;

для вещественных чисел:

f – значение аргумента в форме с десятичной точкой, в тип float;

e – значение аргумента в экспоненциальной форме, в тип float;

для символьных данных:

c – значение аргумента символ;

s – значение аргумента строка символов;

для номера ячейки памяти (адреса):

p – значение аргумента указатель, т.е. адрес.

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]