Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Составные операторы, или блоки



Формат - или синтаксис - написания оператора for может показаться чересчур ограниченным, поскольку тело цикла должно состоять из всего лишь одного операто­ра. Это весьма неудобно, если вы хотите, чтобы тело цикла включало несколько опе­раторов. C++ предлагает синтаксис, позволяющий поместить в тело цикла любое количество операторов. Трюк заключается в использовании пары фигурных скобок, с помощью которых конструируется составной оператор, или блок . Блок состо­ит из пары фигурных скобок с заключенными между ними операторами и синтаксиче­ски воспринимается как один оператор. Например, в листинге ниже фигурные скобки применяются для комбинирования трех отдельных операторов в единый блок. Это позволяет в теле цикла организовать вывод приглашения пользователю, прочитать его ввод и выполнить вычисления. Программа вычисляет текущую сумму вводимых значений, и это является удобным случаем для использования операции +=.

#include < iostream>

int main()

{

using namespace std;

cout < < " The Amazing Accounto will sum and average ";

cout < < " five numbers for you.\n";

cout < < " Please enter five values: \n";

double number;

double sum = 0.0;

for (int i = 1; i < = 5; i++)

{ // block starts here

   cout < < " Value " < < i < < ": ";

   cin > > number;

   sum += number;

} // block ends here

cout < < " They sum to " < < sum < < endl;

cout < < " and average to " < < sum / 5 < < ".\n";

 

getchar();

getchar();

return 0;

}

 

Предположим, что вы сохранили отступы, но удалили фигурные скобки:

for (int i = 1; i < = 5; i++)

cout « " Value " < < i < < ": ";

cin » number; sum += number;

 

Компилятор игнорирует отступы, поэтому в тело цикла попадет только первый оператор. То есть цикл напечатает пять приглашений и ничего более. После заверше­ния цикла программа перейдет к выполнению последующих строк, читая и суммируя только одно значение.

Если вы опре­деляете новую переменную внутри блока, она будет существовать только во время вы­полнения операторов этого блока. Когда поток выполнения покидает блок, такая пе­ременная уничтожается. Это значит, что переменная известна только внутри блока.

 

#include < iostream>

int main()

{

int x = 20;

{ // начало блока

  int у = 100;

  cout < < x < < endl; // нормально

  cout < < у < < endl; // нормально

} // конец блока

cout < < x < < endl; // нормально

cout < < у < < endl; // ошибка!

return 0;

}

 

Как вы уже видели, блок позволяет помещать два и более оператора там, где син­таксис C++ разрешает лишь один. Операция запятой (, ) делает то же самое с выраже­ниями, позволяя вставлять два выражения туда, где синтаксис C++ допускает только одно.

++j, —i // два выражения воспринимаются как одно

// для удовлетворения требований синтаксиса

Запятая — это не всегда операция. Например, запятая в следующем объявлении служит для разделения имен в списке объявляемых переменных:

int i, j; //здесь запятая — разделитель, а не операция

 

#include < iostream>

#include < string>

int main()

{

using namespace std;

cout < < " Enter a word: ";

string word;

cin > > word;

// physically modify string object

char temp;

int i, j;

for (j = 0, i = word.size() - 1; j < i; --i, ++j)

{                  // start block

   temp = word[i];

   word[i] = word[j];

   word[j] = temp;

}                  // end block

cout < < word < < " \nDone\n";

 

getchar();

getchar();

return 0;

}

 

 

 



Выражения отношений

Компьютеры — это нечто большее, чем неутомимые обработчики чисел. Они так­же умеют сравнивать значения, и эта их способность лежит в основе автоматическо­го принятия решений. В C++ эту возможность реализуют операции отношений. В C++ доступны шесть операций отношений для сравнения чисел.

Поскольку символы пред­ставлены своими ASCII-кодами, эти операции можно также применять и для срав­нения символов. Они не работают со строками в стиле С, но работают с объектами класса string.

Каждое сравнивающее выражение возвращает булевское (типа bool) значение true, если сравнение истинно, и false — в противном случае, поэтому дан­ные операции хорошо подходят для применения в проверочных условиях циклов. (Старые реализации оценивали истинные выражения как 1 и ложные — как 0.)

Этими шестью операциями отношений исчерпываются все возможности, преду­смотренные в C++ для сравнения чисел.

 

 

 

 


 


Цикл while

Цикл while - это цикл for, у которого удалены инициализирующая и обновляю­щая части; в нем имеется только проверочное условие и тело:

while (проверочное_условие)

тело

 

Сначала программа вычисляет выражение проверочное_условие в скобках. Если выражение дает в результате true, программа выполняет оператор (или операторы), содержащийся в теле цикла. Как и в случае с циклом for, тело состоит из единст­венного оператора либо блока, определенного фигурными скобками. После того, как завершено выполнение тела, программа возвращается к проверочному условию и за­ново вычисляет его. Если условие возвращает ненулевое значение, программа снова выполняет тело.

Этот цикл проверки и выполнения продолжается до тех пор, пока проверочное условие не вернет false.

Если вы хотите в ко­нечном итоге прервать цикл, то в теле цикла должно происходить нечто такое, что повлияет на выражение проверочного условия. Например, цикл может увеличивать значение переменной, используемой в проверочном условии, либо читать новое зна­чение, вводимое с клавиатуры. Подобно for, цикл while является циклом с входным условием. То есть, если проверочное условие оценивается как false в самом начале, то программа ни разу не выполнит тело цикла.

 

 

В листинге представлен пример работы цикла while. Цикл проходит по всем символам строки и отображает их ASCII-коды. По достижении нулевого символа цикл завершается. Эта техника прохода по символам строки до нулевого ограничителя является стандартным методом обработки строк в C++. Поскольку строка содержит маркер конца, программа часто не нуждается в явной информации о длине строки.

 

 

#include < iostream>

const int ArSize = 20;

int main()

{

using namespace std;

char name[ArSize];

 

cout < < " Your first name, please: ";

cin > > name;

cout < < " Here is your name, verticalized and ASCIIized: \n";

int i = 0; // start at beginning of string

while (name[i]! = '\0')

{

   cout < < name[i] < < ": " < < int(name[i]);

 cout < < endl;

   i++; // don't forget this step

}

 

getchar();

getchar();

return 0;

}


Поделиться:



Последнее изменение этой страницы: 2019-04-09; Просмотров: 68; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.021 с.)
Главная | Случайная страница | Обратная связь