Смекни!
smekni.com

Основы программирования на языке Си (стр. 4 из 27)

Этот операторвыводитнаэкрансообщение:

Выражение1 Выражение2 ... ВыражениеN

Последовательность операторов

cout << Выражение1;

cout << Выражение2;

...

...

cout << ВыражениеN;

13

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

пробелы илиновыестроки, тоихнужноуказатьявно, спомощьюсимволов" " и

"&bsol;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 << "&bsol;n";

}

else

{

cout << "В " << another_year << " вы еще не родились!&bsol;n";

}

Оператор ветвления (условныйоператор) "if...else..." выглядитпримерно

одинаково вовсехпроцедурныхязыкахпрограммирования. ВСи++ онназывается

просто оператором if, иегообщаяструктуратакова:

if ( условие )

{

Оператор1;

...

...

ОператорN;

}

else

{

ОператорN+1;

...

...

ОператорN+M;

}

Часть "else (иначе)" воператореif необязательна. Болеетого, еслипосле

"if ( условие )" стоиттолькоодиноператор, томожноопуститьфигурныескобкии

записать оператортак:

14

if ( условие )

Оператор1;

В программахусловныеоператорычастовстречаютсягруппами, например:

...

...

if (total_test_score < 50)

cout << "Вы не прошли тест. Выучите материал как следует.&bsol;n";

else if (total_test_score < 65)

cout << "Вы прошли тест со средним результатом.&bsol;n";

else if (total_test_score < 80)

cout << "Вы хорошо выполнили тест.&bsol;n";

else if (total_test_score < 95)

cout << "Вы показали отличный результат.&bsol;n";

else

{

cout << "Вы сдали тест нечестно!&bsol;n";

total_test_score = 0;

}

...

...

Приведенный фрагментпрограммыможетпоказатьсядовольносложным. Тем

не менее, онсоответствуетправиламСи++. Этолегкопонять, еслиобратитьсяксин-

таксической диаграммеоператораif (рис. 4).

В овальныхиликруговыхрамкахнасинтаксическихдиаграммахуказываются

элементы языка, которыебуквальнотакивоспроизводятсявисходномтекстепро-

грамм. Впрямоугольныхрамкахприведеныэлементы, требующиедальнейшегооп-

ределения, возможно, спомощьюдругихсинтаксическихдиаграмм. Набортакихдиа-

грамм служитформальнымописаниемсинтаксисаязыкапрограммирования.

Обратите внимание, чтонарис. 4 отсутствуетсимвол ";" иразделители "{}".

Эти элементыязыкавключенывопределение (исинтаксическуюдиаграмму) для

обобщенного понятия "операторязыкаСи++".

Рис. 4. Синтаксическая диаграммаоператораif.

При обработкеприведенногофрагментапрограммыкомпиляторСи++ трактует

весь текст, выделенныйнижеполужирнымшрифтом, какодиноператорпослеперво-

го словаelse.

...

...

if (total_test_score < 50)

cout << "Вы не прошли тест. Выучите материал как следует.&bsol;n";

else if (total_test_score < 65)

cout << "Вы прошли тест со средним результатом.&bsol;n";

else if (total_test_score < 80)

cout << "Вы хорошо выполнили тест.&bsol;n";

15

else if (total_test_score < 95)

cout << "Вы показали отличный результат.&bsol;n";

else

{

cout << "Вы сдали тест нечестно!&bsol;n";

total_test_score = 0;

}

...

...

8. Оформление исходного текста

Между текстомпрограммы, приведеннымвп.5 итекстом, которыйпоказан

ниже, длякомпилятораСи++ нетникакихразличий.

#include <iostream.h> int main() { int year_now, age_now, another_year,

another_age; cout << "Введите текущий год и нажмите ENTER.&bsol;n"; cin >>

year_now; cout << "Введите свой возраст (в годах).&bsol;n"; cin >> age_now;

cout << "Введите год, для которого вы хотите узнать свой возраст.&bsol;n"; cin

>> another_year; another_age = another_year - (year_now - age_now); if

(another_age >= 0) { cout << "В " << another_year << " году вам будет ";

cout << another_age << "&bsol;n"; } else { cout << "В " << another_year << "

вы еще не родились!&bsol;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.&bsol;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