Управление порядком выполнения команд с помощью оператора if — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Управление порядком выполнения команд с помощью оператора if

2017-12-12 162
Управление порядком выполнения команд с помощью оператора if 0.00 из 5.00 0 оценок
Заказать работу

В нескольких последних строках программы (до строки "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 (условие)" стоит только один оператор, то можно опустить фигурные скобки и

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

 

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";

 

 


 

else if (total_test_score < 95)

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

Else

{

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

total_test_score = 0;

}

...

...

 

 

Массивы

 

Назначение массивов

В программировании часто возникают задачи, связанные с обработкой боль-

ших объемов данных. Для постоянного хранения этих данных удобно пользоваться

файлами. Например, в программе для ввода и сортировки длинных числовых списков

данные можно ввести с клавиатуры один раз и сохранить в файле для последующего

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

представления больших объемов данных внутри программ. Для этой цели в Си++

часто применяются массивы – простейшая разновидность структурных типов дан-

ных (о более сложных структурах данных будет говориться в следующих лекциях).

Массив – это набор переменных одного типа ("int", "char" и др.). При объявле-

нии массива компилятор выделяет для него последовательность ячеек памяти, для

обращения к которым в программе применяется одно и то же имя. В то же время мас-

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

 

 

1.1 Объявление массивов

Оператор описания массива имеет следующий синтаксис:

<тип данных><имя переменной>[<целое значение>];

Допустим, в программе требуется обрабатывать данные о количестве часов, от-

работанных в течении недели группой из 6-ти сотрудников. Для хранения этих дан-

ных можно объявить массив:

int hours[6];

или, лучше, задать численность группы с помощью специальной константы:

const int NO_OF_EMPLOYEES = 6;

int hours[NO_OF_EMPLOYEES];

Если подобные массивы будут часто встречаться в программе, то целесообраз-

ноопределитьновыйтип:

const int NO_OF_EMPLOYEES = 6;

typedef int Hours_array[NO_OF_EMPLOYEES];

Hours_array hours;

Hours_array hours_week_two;

В любом из трех перечисленных вариантов, в программе будет объявлен мас-

сив из 6 элементов типа "int", к которым можно обращаться с помощью имен:


hours[0]


hours[1]


hours[2]


hours[3]


hours[4]


hours[5]


Каждое из этих имен является именем элемента массива. Числа 0,..., 5 назы-

ваются индексами элементов. Отличительная особенность массива заключается в том,

что его элементы – однотипные переменные – занимают в памяти компьютера после-

довательные ячейки памяти (рис. 1).

 


 

Рис. 1.. Расположение элементов массива в оперативной памяти (направление

сверху вниз соответствует возрастанию адресов ячеек памяти).

 

 

1.2 Использование элементов массивов в выражениях

С элементами объявленного массива можно выполнять все действия, допусти-

мые для обычных переменных этого типа (выше был приведен пример целочисленно-

го массива, т.е. типа "int"). Например, возможны операторы присваивания наподо-

бие:

hours[4] = 34;

hours[5] = hours[4]/2;

или логические выражения с участием элементов массива:

if (number < 4 && hours[number] >= 40) {...

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

щью циклов "for" или "while". В программе 1.1 в цикле у оператора запрашивается

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

естественной может показаться нумерация сотрудников от 1 до 6, а не от 0 до 5, но

необходимо помнить, что индексация массивов в Си++ начинается с 0. Поэтому про-

грамма 1.1 вычитает 1 из порядкового номера сотрудника, чтобы вычислить индекс

соответствующего элемента массива.

 

#include <iostream.h>

 

const int NO_OF_EMPLOYEES = 6;

typedef int Hours_array[NO_OF_EMPLOYEES];

 

int main()

{

Hours_array hours;

int count;

 

for (count = 1; count <= NO_OF_EMPLOYEES; count++)

{

cout << "Сколько часов отработал сотрудник";

cout<< " номер " << count << "?: ";

cin>> hours[count - 1];

}

 

return 0;

 

Программа 1.1.

 

В типичном сеансе работы программа 1.1 выведет на экран подобные сообщения:


Сколько

Сколько

Сколько

Сколько


часов

часов

часов

часов


отработал

отработал

отработал

отработал


сотрудник

сотрудник

сотрудник

сотрудник


номер

номер

номер

номер


1?:

2?:

3?:

4?:



 
}


 

Сколько часов отработал сотрудник номер 5?: 38

Сколько часов отработал сотрудник номер 6?: 37

На рис. 2. показано состояние целочисленного массива после ввода этих данных.

 

 

Рис. 2.. Состояние массива после присвоения значений его элементам.

 

Полезно разобраться, что произошло бы, если бы в программе 1.1 внутри цикла

"for" в операторе "cin..." отсутствовало бы вычитание 1 из переменной "count".

Компилятор Си++ (в отличие, например, от Паскаля) не обнаруживает ошибки выхо-

да за пределы массива, поэтому участок памяти компьютера с массивом и сразу за

ним оказался бы в состоянии, показанном на рис. 3.

 

 

Рис. 3.. Ошибка выхода за пределы массива.

 

Другими словами, значение "37" было бы размещено в ячейке памяти, доста-

точной для хранения целого числа, которая расположена сразу после массива "hours".

Это чрезвычайно нежелательная ситуация, потому что компилятор может зарезерви-

ровать эту ячейку памяти для другой переменной (например, для переменной

"count").

Массивы могут быть любого типа, не обязательно типа "int". Ниже приведена

программа 1.2, в которой символьный ("char") массив применяется для печати собст-

венного исходного файла на экране в обратном порядке.

 

#include <iostream.h>

#include <fstream.h>

 

const int MAX_LEN = 1000;

typedef char File_array[MAX_LEN];

 

int main()

{

char character;

File_array file;

int count;

ifstream in_stream;

 

in_stream.open("prg6_1_2.cpp");

in_stream.get(character);

for (count = 0;!in_stream.eof() && count < MAX_LEN; count++)

{

file[count] = character;

 

 
 


 

in_stream.get(character);

}

in_stream.close();

 

while (count > 0)

cout<< file[--count];

 

return 0;

 

Программа 1.2.

 

В заголовке цикла "for" обратите внимание на условие "... && count < MAX

...", специально предусмотренное для предотвращения выхода за пределы массива.

 

 


Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.047 с.