Этот операторвыводитнаэкрансообщение:
Выражение1 Выражение2 ... ВыражениеN
Последовательность операторов
cout << Выражение1;
cout << Выражение2;
...
...
cout << ВыражениеN;
13
приводит каналогичномурезультату. Еслимеждувыражениямитребуетсявставить
пробелы илиновыестроки, тоихнужноуказатьявно, спомощьюсимволов" " и
"\n" соответственно.
Числа, показанныевышевпримеревыдачинаэкранполужирным шрифтом, бы-
ли напечатаныпользователем. Впоказанномпримере оператор
cin >> year_now;
приводит ктому, чтопеременнойyear_now присваивается значение 2000. Этопроис-
ходит послетого, какпользовательнапечатает "2000" инажметклавишуEnter. В
программе естьещеместа, гдепеременнымприсваиваютсязначения, втом числе
оператор присваивания:
another_age = another_year - (year_now - age_now);
Операция "=" означает "присвоитьпеременной, стоящейслеваотзнакаравен-
ства, значение, указанноесправа". ПроверканаравенствовСи++ обозначается двой-
ным символом: "==".
7. Управление порядком выполнения команд с помощью оператора if
В несколькихпоследнихстрокахпрограммы (достроки "return 0") записано:
if (another_age >= 0)
{
cout << "В " << another_year << " году вам будет ";
cout << another_age << "\n";
}
else
{
cout << "В " << another_year << " вы еще не родились!\n";
}
Оператор ветвления (условныйоператор) "if...else..." выглядитпримерно
одинаково вовсехпроцедурныхязыкахпрограммирования. ВСи++ онназывается
просто оператором if, иегообщаяструктуратакова:
if ( условие )
{
Оператор1;
...
...
ОператорN;
}
else
{
ОператорN+1;
...
...
ОператорN+M;
}
Часть "else (иначе)" воператореif необязательна. Болеетого, еслипосле
"if ( условие )" стоиттолькоодиноператор, томожноопуститьфигурныескобкии
записать оператортак:
14
if ( условие )
Оператор1;
В программахусловныеоператорычастовстречаютсягруппами, например:
...
...
if (total_test_score < 50)
cout << "Вы не прошли тест. Выучите материал как следует.\n";
else if (total_test_score < 65)
cout << "Вы прошли тест со средним результатом.\n";
else if (total_test_score < 80)
cout << "Вы хорошо выполнили тест.\n";
else if (total_test_score < 95)
cout << "Вы показали отличный результат.\n";
else
{
cout << "Вы сдали тест нечестно!\n";
total_test_score = 0;
}
...
...
Приведенный фрагментпрограммыможетпоказатьсядовольносложным. Тем
не менее, онсоответствуетправиламСи++. Этолегкопонять, еслиобратитьсяксин-
таксической диаграммеоператораif (рис. 4).
В овальныхиликруговыхрамкахнасинтаксическихдиаграммахуказываются
элементы языка, которыебуквальнотакивоспроизводятсявисходномтекстепро-
грамм. Впрямоугольныхрамкахприведеныэлементы, требующиедальнейшегооп-
ределения, возможно, спомощьюдругихсинтаксическихдиаграмм. Набортакихдиа-
грамм служитформальнымописаниемсинтаксисаязыкапрограммирования.
Обратите внимание, чтонарис. 4 отсутствуетсимвол ";" иразделители "{}".
Эти элементыязыкавключенывопределение (исинтаксическуюдиаграмму) для
обобщенного понятия "операторязыкаСи++".
Рис. 4. Синтаксическая диаграммаоператораif.
При обработкеприведенногофрагментапрограммыкомпиляторСи++ трактует
весь текст, выделенныйнижеполужирнымшрифтом, какодиноператорпослеперво-
го словаelse.
...
...
if (total_test_score < 50)
cout << "Вы не прошли тест. Выучите материал как следует.\n";
else if (total_test_score < 65)
cout << "Вы прошли тест со средним результатом.\n";
else if (total_test_score < 80)
cout << "Вы хорошо выполнили тест.\n";
15
else if (total_test_score < 95)
cout << "Вы показали отличный результат.\n";
else
{
cout << "Вы сдали тест нечестно!\n";
total_test_score = 0;
}
...
...
8. Оформление исходного текста
Между текстомпрограммы, приведеннымвп.5 итекстом, которыйпоказан
ниже, длякомпилятораСи++ нетникакихразличий.
#include <iostream.h> int main() { int year_now, age_now, another_year,
another_age; cout << "Введите текущий год и нажмите ENTER.\n"; cin >>
year_now; cout << "Введите свой возраст (в годах).\n"; cin >> age_now;
cout << "Введите год, для которого вы хотите узнать свой возраст.\n"; cin
>> another_year; another_age = another_year - (year_now - age_now); if
(another_age >= 0) { cout << "В " << another_year << " году вам будет ";
cout << another_age << "\n"; } else { cout << "В " << another_year << "
вы еще не родились!\n"; } return 0; }
Отсутствие комментариев, пробелов, пустых строк и отступов делают эту
программу практическинепригоднойдлячтениячеловеком. Длявыработкихорошего
стиля программирования, конечно, требуется знатьнетолькоправилаоформления
текста программы, ноихследуетсоблюдатьссамогоначала. Приоформлениисобст-
венных программбудьтепоследовательныиделайтетак, чтобыотступыипробелы
отражали логическуюструктурувашихпрограмм.
Для переменныхследуетвыбиратьосмысленныеимена: имена "year_now",
"age_now", "another_year" и "another__age" лучше, чем "y_n", "a_n", "a_y" и
"a_a" инамноголучше, чем "w", "x", "y" и "z". Этоособенноважно, есливбудущем
ваши программымогутпотребоватьизмененияспомощьюдругихпрограммистов.
9. Сводка результатов
В даннойлекциикраткоинеформальнобылирассмотренынескольковажных
вопросов: переменныеитипыданных, вводивывод, оператор присваиванияиуслов-
ный оператор ("операторif"). Болеестрогоиподробноэтивопросыбудутрассмот-
рены впоследующихлекциях.
10. Упражнения
Для выполненияэтихупражненийтребуетсянекоторыйопытработысПКпод
управлением операционнойсистемыWindows 95/NT.
Упражнение 1
Изучите краткоеруководствопоVisual C++ в Приложении. Создайтепроектс
именем "AgeCalculator". СоздайтеисходныйфайлсименемAgeCalculator.cpp
16
и наберитевнемисходныйтекстпрограммы 5.1. Сохранитефайлнадискеидобавьте
его впроект. Соберитепроектизапуститепрограммунавыполнение.
Возможно, вывстретитесьсоследующимипроблемами:
1) В окне программы вместо русских букв выводятся какие-то странные символы.
Эта проблемаобъясняетсяразличиемтаблицкодировокWindows и DOS. В этих таблицах
русские буквырасположенывразныхместах. Консольныепрограммыприработеисполь-
зуют кодировкуDOS, атекстовыйредакторVisual C++ –кодировкуWindows. Поэтому
вам придетсядобавитьпреобразованиестроксрусскимибуквамиизкодировкиWindows
в кодировкуDOS.
Для этоговключитевпрограмму, послефайлаiostream.h, файлwindows.h с описа-
нием функцийоперационнойсистемыWindows:
#include <windows.h>
Перед функциейmain() создайте новуюфункциюсименем rus_str(), котораябудетвы-
полнять необходимоепреобразованиеспомощьюспециальнойфункцииWindows:
char* rus_str( char* str )
{
CharToOem( str, str );
return str;
}
Во всехстрокахпрограммы, гденаэкранвыдаютсясимвольныестрокисрусскимибук-
вами, укажитепреобразованиеэтихстрокспомощьюновойфункции, например:
cout << rus_str( "Введите текущий год и нажмите ENTER.\n" );
2) После завершения работы окно программы закрывается и не удается увидеть ре-
зультаты.
Для исправленияэтогонедостаткапрощевсегопредусмотретьвконцепрограммыввод
произвольного символа. Покапользовательненажметкакую-нибудьсимвольнуюклави-
шу ипотомEnter, окнопрограммыбудетоставатьсянаэкране. Дляэтогопотребуетсяза-
вести символьнуюпеременную (строкусописаниемэтойпеременнойрасположитепосле
строки сописаниемцелочисленныхпеременных):
char wait_char;
Перед строкойсоператоромвозврата "return 0" добавьтеоператордлявводасимвола
с клавиатуры:
cin >> wait_char;
Сравните результатыработысвоейпрограммыспримеромизлекции. Поэкс-
периментируйте надулучшениемилиизменениемформатавыводанаэкран.
Упражнение 2
Модифицируйте программу 5.1, чтобыприпревышениипеременной
"another_age" значения150 на экранвыводилосьсообщение:
Извините, но вы вряд ли доживете до [year] года!
Проверьте работусвоейпрограммыдлянесколькихразныхлет.
Упражнение 3
Измените программуизупр.2 так, чтобывнейучитывалисьигоды, имесяцы.
На экранпрограммадолжнавыводитьследующиесообщения:
Введите текущий год и нажмите ENTER.
2000
Введите текущий месяц (число от 1 до 12).
10
17
Введите свой возраст (в годах).
25
Введите месяц своего рождения (число от 1 до 12).
5
Введите год, для которого вы хотите узнать свой возраст.
2006
Введите месяц этого года.
6
Ваш возраст в 6/2006: 31 год и 1 месяц.
Программа должнавыдаватькорректныесообщениядляединственногоимно-
жественного числалетимесяцев, т.е. должнавыводитьнаэкран "25 лет и 1 ме-
сяц", но "24 года и 2 месяца".
Подсказка: В программе вам потребуются дополнительные переменные. Обязатель-
но добавьте их имена в оператор описания переменных. При вычислениях могут при-
годиться некоторые стандартные операции Си++:
Символ Операция Пример Значение
+ Сложение 3 + 5 8
- Вычитание 43 - 25 18
* Умножение 4 * 7 28
/ Деление 9/2 4
% Остаток приделе-
нии нацело
20 % 6 2
(Обратите внимание, что в приведенной таблице операция деления "/" применялась к
двум целым числам, поэтому результат – тоже целое число.)
Кроме арифметических операций, для проверки условий в операторе if вам могут
потребоваться некоторые логические операции.
Символ Операция Пример Значение
< меньше, чем 3 < 5 TRUE (истина)
<= меньше илиравно 43 <= 25 FALSE (ложь)
> больше, чем 4 > 7 FALSE