Арифметика Переменные



бет2/5
Дата29.09.2019
өлшемі71,67 Kb.
#48998
1   2   3   4   5
Байланысты:
с Нурик
с Нурик, с Нурик

Условная инструкция


Все ранее рассматриваемые программы имели линейную структуру: все инструкции выполнялись последовательно одна за одной, каждая записанная инструкция обязательно выполняется.

Допустим, мы хотим по данному числу x определить его абсолютную величину (модуль). Для этого необходимо нарушить линейную логику программы. Программа должна напечатать значение переменной x, если x>0 или же величину -x в противном случае. Линейная структура программы нарушается: в зависимости от справедливости условия x>0 должна быть выведена одна или другая величина. Соответствующий фрагмент программы на C++ имеет вид:

     double x;
     cin>>x;
     if (x>0)
     {
         cout<     }
     else
     {
         cout<<-x;
     }
     return 0;

В этой программе используется условная инструкция if (если). После слова if в обязательных круглых скобках указывается проверяемое условие (x>0). После этого в фигурных скобках идет блок (последовательность) инструкций, который будет выполнен, если условие истинно, в нашем примере это вывод на экран величины x. Затем идет слово else (иначе) и после него блок инструкций, который будет выполнен, если проверяемое условие неверно.

Итак, условная инструкция в C++ имеет следующий синтаксис:

       if (Условие)


     {
         
Блок инструкций 1
     }
     else
     {
         
Блок инструкций 2
     }


Блок инструкций 1 будет выполнен, если Условие истинно. Если Условие ложно, будет выполнен Блок инструкций 2.

В условной инструкции может отсутствовать слово else и последующий блок. Такая инструкция называется неполным ветвлением. Например, если дано число x и мы хотим заменить его на абсолютную величину x, то это можно сделать следующим образом:

     if (x<0)
     {
         x=-x;
     }

В этом примере переменной x будет присвоено значение -x, но только в том случае, когда x<0.


Вложенные условные инструкции


Внутри условных инструкций можно использовать любые инструкции языка C++, в том числе и условную инструкцию. Получаем вложенное ветвление – после одной развилки в ходе исполнения программы появляется другая развилка. Покажем это на примере программы, которая по данным ненулевым числам x и y определяет, в какой из четвертей координатной плоскости находится точка (x,y):

     double x,y;


     cin>>x>>y;
     if (x>0)
     {
         if (y>0)   // x>0, y>0
         {
             cout<<"Первая четверть"<         }
         else       // x>0, y<0
         {
             cout<<"Четвертая четверть"<         }
     }
     else
     {
         if (y>0)   // x<0, y>0
         {
             cout<<"Вторая четверть"<         }
         else       // x<0, y<0
         {
             cout<<"Третья четверть"<         }
     }

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


Операторы сравнения


В качестве проверяемого условия должно использоваться выражение логического типа bool. Переменные логического типа принимают два значения: true (истина) и false (ложь). Также любое целочисленное выражение можно трактовать, как логическое выражение, при этом нулевое целое число означает ложь, а ненулевое — истину. Таким образом, если вместо условия написать false или 0, то оно будет всегда ложно, если же указать true, 1 или любое ненулевое число, то условие будет истинно.

Как правило, в качестве проверяемого условия используется результат вычисления одного из следующих операторов сравнения:



<

Меньше — возвращает true, если первый операнд меньше второго. 

>

Больше — возвращает true, если первый операнд больше второго. 



<=

Меньше или равно. 

>=

Больше или равно. 



==

Равенство. Возвращает true, если два операнда равны. 

!=

Неравенство. Возвращает true, если два операнда неравны.



Например, условие x*x<2 означает "значение x*x меньше 2", а условие 2*x!=y означает "удвоенное значение переменной x не равно значению переменной y".

Будьте аккуратны: оператор == (два знака равенства) — это проверка на равенство двух выражений, а оператор = (один знак равенства) — это присваивание одной переменной значения выражения и использование его в условии оператора ветвления в большинстве случаев является ошибкой.

Логические операторы


Иногда нужно проверить одновременно не одно, а несколько условий. Например, проверить, является ли данное число четным , можно при помощи условия n%2==0 (остаток от деления n на 2 равен 0), а если необходимо проверить, что два данных целых числа n и m являются четными, необходимо проверить справедливость обоих условий: n%2==0 и m%2==0, для чего их необходимо объединить при помощи оператора && (логическое И): n%2==0 && m%2==0.

В C++ существуют стандартные логические операторы: логическое И, логическое ИЛИ, логическое отрицание.



Логическое И является бинарным оператором (то есть оператором с двумя операндами: левым и правым) и имеет вид && (два знака амперсанда). Оператор && возвращает true тогда и только тогда, когда оба его операнда имеют значение true.

Логическое ИЛИ является бинарным оператором и возвращает true тогда и только тогда, когда хотя бы один операнд равен true. Оператор "логическое ИЛИ" имеет вид || (два знака вертикальной черты).

Логическое НЕ (отрицание) является унарным (то есть с одним операндом) оператором и имеет вид ! (восклицательный знак), за которым следует единственный операнд. Логическое НЕ возвращает true, если операнд равен false и наоборот.

Пример:


     x && !y

Данное выражение означает "x И отрицание y" и равно true тогда и только тогда, когда x равно true, а y равно false.


Упражнения


  1. (A) Даны два целых числа. Напечатайте наибольшее из них.

  2. (B) Даны два целых числа. Программа должна вывести число 1, если первое число больше второго, число 2, если второе больше первого, или число 0, если они равны.

  3. (C) Даны три числа. Напечатайте наибольшее из них (программа должна вывести ровно одно целое число). Какое наименьшее число операторов сравнения (>, <, >=, <=) необходимо для решения этой задачи?

  4. (D) Даны три действительных положительных числа a, b, c. Определите, существует ли треугольник с такими сторонами. Если треугольник существует, выведите строку YES, иначе выведите строку NO.

  5. (E) Даны три целых числа. Определите, сколько среди них совпадающих. Программа должна вывести одно из чисел: 3 (если все совпадают), 2 (если два совпадает) или 0 (если все числа различны).

  6. (F) Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе – номер строки. Заданы две клетки. Определите, может ли шахматная ладья попасть с первой клетки на вторую за один ход. Входные данные: 4 целых числа от 1 до 8 каждое, первые два задают начальную клетку, вторые два задают конечную клетку. Начальные и конечные клетки не совпадают. Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую или NO в противном случае.

  7. (G) Решите ту же задачу для короля.

  8. (H) Решите ту же задачу для слона.

  9. (I) По заданному числу n от 1 до 365 определите, на какое число какого месяца приходится день невисокосного года с номером n. Программа получает на вход целое число n и должна вывести два числа: число месяца (от 1 до 31) и номер месяца (от 1 до 12), на которое приходится данный день.

  10. (J) Даны действительные числа a, b, c. Найдите все решения квадратного уравнения ax2+bx+c=0. Для вычисления квадратного корня используется функция sqrt, для использования которой необходимо в начале программы подключить заголовочный файл cmath. Формат входных данных: три действительных числа. Формат выходных данных: два действительных числа, если уравнение имеет два корня, одно действительное число – при наличии одного корня. При отсутствии действительных корней программа не выводит ничего.

  11. (K) Определите тип треугольника (остроугольный, тупоугольный, прямоугольный) с данными сторонами. Входные данные: три натуральных числа – стороны треугольника. Выходные данные: одно из слов rectangular для прямоугольного треугольника, acute для остроугольного треугольника, obtuse для тупоугольного треугольника или impossible, если входные числа не образуют треугольника.

  12. (L) По данному числу n<100 закончите фразу "На лугу пасется..." одним из возможных продолжений: "n коров", "n корова", "n коровы", правильно склоняя слово "корова". Программа должна вывести введенное число n и одно из слов (на латинице): korov, korova или korovy, например, 1 korova, 2 korovy, 5 korov. Между числом и пробелом должен стоять ровно один пробел.

  13. (M) Билет на одну поездку в метро стоит 15 рублей, билет на 10 поездок стоит 125 рублей, билет на 60 поездок стоит 440 рублей. Пассажир планирует совершить n поездок. Определите, сколько билетов каждого вида он должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретенных билетов – минимальна. Входные данные: количество поездок n. Выходные данные – три целых числа, равные необходимому количеству билетов на 1, на 10, на 60 поездок. Например, при вводе 129 программа должна вывести 0 1 2 (2 билета на 60 поездок и 1 билет на 10 поездок).

  14. (N) Решите предыдущую задачу при наличии следующих билетов: 1 поездка - 15 рублей, 5 поездок - 70 рублей, 10 поездок - 125 рублей, 20 поездок - 230 рублей, 60 поездок - 440 рублей. Если для какого-то данного n существует несколько способов приобретения билетов одинаковой стоимости, необходимо вывести ту комбинацию билетов, которая дает большее число поездок.

#include

using namespace std;


double x,y;

int main()

{

setlocale(LC_ALL, "rus");



cin>>x>>y;

if (x>y) {

std::cout<<"1";

}

else {std::cout<<"2";



}

if (x==y) {std::cout<<"0"<


Достарыңызбен бөлісу:
1   2   3   4   5




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет