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

Алгоритмизация и программирование на языке С++. Ч.1. Учебник

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
5. Ввод-вывод данных
в Python) применяется способ форматирования, который ис­пользует похожий синтаксис.
Этот способ форматирования предполагает включение в
программу функций
printf()
и
scanf()
. Для их использования
необходимо добавить в текст программы такое описание:
#include <stdio.h>
Приведем пример программы с вводом и выводом в стиле
классического С.
#include <stdio.h>
int main() {
int In; scanf(" %d", &In); printf("\n%6d", In);
// Не работает, scanf(" %d", In);
char c; scanf(" %c", &c); printf("\n%c %d\n", c, c);
61
}
Результат выполнения приведен на рис. 5.7.
Рис. 5.7. Программа с вводом целого и символьного значения
В приведенном примере введено целочисленное значение
Y
123 и символ
. После ввода выведен сам символ и его код.
62
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
Обратим внимание, что при использовании функции
к имени вводимых значений требуется добавлять символ
scanf()
&
. Это означает, что указывается не имя переменной, а указатель на нее. С этим понятием познакомимся подробнее позже.
scanf
Формат функции
:
int scanf(char *format, ...)
Ее первым параметром является строка формата. Далее записывается список ввода – имена переменных с символом амперсанд.
В строке формата указываются символы-спецификаторы:
d
– десятичное целое число;
о
– восьмеричное целое число;
u
– десятичное целое число без знака;
x
– шестнадцатеричное целое число;
с, С
– однобайтный символ;
е, f, g
h l
стоять символ
– вещественные числа.
d
Перед спецификаторами
, указывающий на тип , указывающий на тип
, о, u, x могут стоять символы:
short
;
long
.
Так же перед символами-спецификаторами
l
, указывающий, что это тип
е, f
double
(а не
и g может
oat
).
Приведем еще один пример ввода, в котором в одной ин­струкции вводятся три значения: целочисленное, веществен­ное и символьное. Но они записываются в разных строках.
int I; oat F; char C; scanf(" %d\n %f\n %c", &I, &F, &C); printf("\n %d %f %c", I, F, C);
Этот пример показывает, что в строке формата
scanf
мо­гут располагаться специальные символы, в данном случае – комбинация (перевод строки).
 
Исходный текст программы на любом языке програм­мирования высокого уровня содержит записи конструкций языка, которые выполняются последовательно. Но многие алгоритмы предполагают выполнение альтернативных дей­ствий в зависимости от тех или иных условий. При этом мо­жет быть три случая.
1. Разветвление (рис. 6.1). Применяется, когда в зави­симости от условия нужно выполнить либо одно, либо другое действие. Действие 1 или Действие 2 может в свою очередь содержать несколько этапов.
Рис. 6.1. Типовая структура «Разветвление»
В языке разветвление реализуется так:
if (условие)
{
// Инструкции1 – действия, которые выполняются, если условие истинно
}
else
{
64
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
// Инструкции2 – действия, которые выполняются, если условие ложно
}
2. Обход (рис. 6.2). Частный случай разветвления, когда одна ветвь не содержит никаких действий.
Рис. 6.2. Типовая структура «Обход»
В С++ ему соответствует такая языковая конструкция:
if (условие)
{
// Инструкции-действия, которые выполняются, если условие истинно
}
3. Множественный выбор (рис. 6.3). Является обобщени­ем разветвления, когда в зависимости от значения перемен­ной (I) выполняется одно из нескольких действий: при I = 1 выполняется действие S1, при I = 2 выполняется действие S2 и т.д.
Этому случаю соответствует инструкция множественного
switch
выбора
. Приведем его общую форму записи.
switch (/*переменная или выражение*/)
{
case /*константное выражение1/*:
6. Инструкции выбора
{
/*группа инструкций*/;
break; }
case /*константное выражение2*/:
{
/*группа инструкций*/;
break; } //. . . default: {
/*группа инструкций*/;
} }
65
Рис. 6.3. Типовая структура «Множественный выбор»
В этой инструкции после ключевого слова
switch
записы­вается имя переменной или выражение. Оно вычисляется и выполняется группа действий, записанных после слова
case
с совпадающим значением (константное выражение). Если
66
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
ни одной из значений не совпало с вычисленным значением, то выполняется группа действий, записанных после
default
.
Рассмотрим пример.
#include <iostream>
using namespace std;
int main(){
setlocale(LC_CTYPE, "rus");
int q;
cout << " 1 – Зеленый " << endl; cout << " 2 – Синий " << endl; cout << " 3 – Красный " << endl;
cin >> q;
switch ( q ) { case 1: {
cout << "Зеленый " << endl;
break; } case 2: {
cout << "Синий " << endl;
break; }
case 3: {
cout << "Красный " << endl;
break; } default:
6. Инструкции выбора
67
{
cout << "Не верный ввод" << endl;
} } }
Результат при разных входных данных из допустимого списка приведен на рис. 6.4, при вводе значения, не совпада­ющего ни с одним из константных значений, – на рис. 6.5.
Рис. 6.4. Результат работы программы с инструкцией
множественного выбора
Рис. 6.5. Результат работы программы с множественным
выбором с особым случаем
Если убрать из программы
break
, то при вводе 1 получим
сообщение о неверном выборе (рис. 6.6).
То есть выполняются все группы инструкций, начиная с
case
той, которая расположена после строки
с совпадающим
константным выражением.
Опишем подробнее, что такое условие. Возможны только два результата проверки условия: оно может быть истинно
68
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
или ложно (
true
или
false, 1
или 0, Да или
Нет
). В С++ условие интерпретируется как число. При этом нулевое значение со­ответствует не выполнению условия (значение ложно,
false
Нет). А любое другое значение – выполнению условия (зна-
true
чение истинно,
Рис. 6.6. Результат работы программы с множественным
, Да).
выбором без
break
Приведем пример. Здесь вводятся два числа, а затем прове­ряется, можно ли поделить первое на второе [31]. Понятно, что отрицательный результат получается, если второе число 0.
int a, b;
cout << "Введите два числа: ";
cin >> a >> b; if(b) cout << a/b << '\n';
else cout << "На нуль делить нельзя.\n";
А вот другой пример, в котором в условии записано целое число, которое интерпретируется как Истина.
if ( 2 ) cout << " 2 true " << endl;
Такой фрагмент кода выведет
" 2 true "
.
В условиях С++ используется операции сравнения (отно­шения): Равно == Не равно != Строго больше >
,
6. Инструкции выбора
Строго меньше < Нестрого больше >= Нестрого меньше <=
Логические операции связывают простые операции срав­нения. В языке С++ существует три таких операции: И (&&); ИЛИ (||); НЕ, или логическое отрицание (!=).
Приведем табл. 6.1 значений этих трех операций.
Таблица 6.1
Таблица истинности логических операций
A
1 1 0 0
Название Обозначение
1 0 1 0
B
69
Отрицание Логическое «и» Логическое «или»
Примечание. 1 –
true
, 0 –
false
!A
A && B
A ׀׀ B
).
F F 1 1 1 0 0 0 1 1 1 0
Для логической операции И из двух операций сравне­ния значение будет истинным только в том случае, когда оба сравнение истинны. Для логической операции ИЛИ из двух операций сравнения значение будет ложным только в том случае, когда оба сравнения ложны.
Например, такое выражение с условием в С++ получит зна- чение ложное
(2>1) && (1>2)
. А такое выражение
(2>1) || (1>2)
будет истинным.
Теперь рассмотрим несколько примеров использования условных конструкций.
Сначала покажем, как вывести большее из двух чисел. В этом примере максимальное значение вычисляется двумя способами. В первом случае используется обход, а во вто­ром – разветвление.
70
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
oat a1, a2, Max; // Разветвление a1=1.0; a2=2.0; cout << "a1= " << a1 << " a2= " << a2 << endl;
if (a1>a2)
Max=a1;
else
Max=a2; cout << "Max= " << Max << endl << endl;
// Обход a1=1.0; a2=–2.0; cout << "a1= " << a1 << " a2= " << a2 << endl; Max=a1; if (a2>Max) Max=a2; cout << "Max= " << Max << endl;
Результат приведен на рис. 6.7.
Рис. 6.7. Максимум из двух вещественных чисел
Теперь найдем минимальное из трех чисел:
// Разветвление
int x,y,z; int Min;
x=-1; y=2; z=3; // Варианты тестовых данных // 1) x=-1; y=2; z=3; // 2) x=1; y=-2; z=3; // 3) x=1; y=2; z=-3;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]