#include <iostream>
int main() {
float x;
float y;
// Можно записать float x, y; однако современные стилистики не рекомендуют такую запись.
std::cout << "x = ";
std::cin >> x;
std::cout << "y = ";
std::cin >> y;
float d2 = x*x + y*y;
if ((d2 <= 4.0*4.0) && (d2 >= 2.0*2.0)) {
std::cout << "You win!" << std::endl;
} else {
std::cout << "You loose." << std::endl;
}
return 0;
}
Логические операции:
1) && — логическое “и”
2) || — логическое “или”
3) ! — отрицание “не”
Пусть мы хотим найти модуль x:
if (x < 0) {
y = -x;
} else {
y = x;
}
Однако гораздо удобнее в таких случаях использовать тернарный условный оператор:
y = (x < 0) ? -x : x;
Здесь перед знаком вопроса стоит условие, после знака вопроса — то, что выполнится, если условие истинно, после знака двоеточия — то, что выполнится, если условие ложно.
Рассмотрим задачу: пользователь вводит номер дня, а мы выводим название дня по номеру.
int day;
std::cout << "Number of day: " << std::endl;
std::cin >> day;
if (day == 1) {
std::cout << "Mon";
}
else if (day == 2) {
std::cout << "Tue";
}
else if (day == 3) {
std::cout << "Wen";
}
Расписывать все условия в таком случае будет придется довольно долго, поэтому лучше использовать конструкцию switch:
switch(day) {
case 1: std::cout << "Mon";
case 2: std::cout << "Tue";
case 3: std::cout << "Wen";
case 4: std::cout << "Thr";
case 5: std::cout << "Fry";
case 6: std::cout << "Sat";
default: std::cout << "Sun";
}
Однако, если мы запустим этот код, и введем, например, число 3, то на экран выведется не только “Wen”, но и “Thr”, “Fry”, “Sat”, “Sun”. Это происходит, т.к. switch продолжает выполнять все, что следует после истинного значения. Чтобы этого не происходило, необходимо ставить оператор break.
switch(day) {
case 1: std::cout << "Mon"; break;
case 2: std::cout << "Tue"; break;
case 3: std::cout << "Wen"; break;
case 4: std::cout << "Thr"; break;
case 5: std::cout << "Fry"; break;
case 6: std::cout << "Sat"; break;
default: std::cout << "Sun";
}
Чтобы программа не прекращала действие после одного ввода числа, зациклим ее. Для этого есть конструкция do {} while().
do {
// тело цикла выполнится хотя бы один раз
switch(day) {
case 1: std::cout << "Mon";
case 2: std::cout << "Tue";
case 3: std::cout << "Wen";
case 4: std::cout << "Thr";
case 5: std::cout << "Fry";
case 6: std::cout << "Sat";
default: std::cout << "Sun";
}
std::cout << std::endl;
} while (day != 0);
// если условие истинно, то тело выполнится еще раз.
// Так до тех пор, пока условие не станет ложным
Рассмотрим еще несколько конструкций для циклов:
while (условие) {
// действия пока условия верны.
}
for ( инициализация; условие; действия в конце шага) {
// команды внутри цикла.
}
// при этом любую часть цикла for можно пропустить. Например, допустим такой цикл:
for (;;) {
// команды внутри цикла.
}
// он будет выполняться бесконечно.
На самом деле наличие 3-х конструкций избыточно. Следующие 3 цикла эквивалентны:
while (условие) {
команда;
}
for (; условие; ) {
команда;
}
for (; условие; команда);
Пусть нам нужно посчитать сумму заданного ряда:
#include <iostream>
#include <cmath>
int main() {
const double eps = 1e-6;
// const говорит о том, что переменную eps изменять нельзя. Это константная переменная.
double x;
std::cout << "Input x = ";
std::cin >> x;
double s = 0;
double ai = x;
while ( ai > eps || ai < -eps) {
s += ai; // вместо записи x = x + ai.
ai *= -x * x / (2 * i + 2) * (2 * i + 3);
++i; // вместо записи i += 1.
}
std::cout << "S = " << s << " (" << i << " steps)" << std::endl;
std::cout << "sin(x) = " << sin(x) << std::endl;
return 0;
}