- •Лабораторная работа №2 Программирование ветвящихся алгоритмов.
- •Лабораторное задание
- •Теоретические сведения.
- •Условный оператор if
- •Полная блок-схема оператора if
- •Сокращенная блок-схема оператора if
- •Оператор выбора switch.
- •Блок-схема селективного оператора.
- •Тернарная операция ветвления.
- •Блок-схема тернарного (условного) оператора.
- •Ввод-вывод текста.
- •Проблема русификации текстов.
- •Примеры программирования.
- •Вопросы.
- •Варианты заданий. Требования к оформлению ввода-вывода.
Тернарная операция ветвления.
Тернарная операция имеет три операнда, её форма :
выражение1 ? выражение2 : выражение3
Последовательность выполнения операции следующая:
выражение1 сравнивается с нулем ;
если выражение1 не равно нулю, то вычисляется выражение2 и его значение является результатом операции.
если выражение1 равно нулю, то вычисляется выражение3, и его значение является результатом операции.
Заметим, что вычисляется один из операндов после знака ?, но не оба.
Блок-схема тернарного (условного) оператора.
Пример: Переменной max присваивается максимальное значение из двух переменных а и b.
max = (a<=b) ? b : a;
Согласно общим правилам языка С сначала будет выполняться выражение справа от знака присваивания, то есть тернарный оператор (a<=b) ? b : a, который выполняет следующие действия:
если (a<=b), то возвращается b (результат равен b)
иначе возвращается a (результат равен a)
полученный результат пересылается (записывается) в переменную max
Если в условной операции операнд2 и операнд3 являются адресными выражениями, то тернарная операция может стоять слева от знака присваивания:
Пример:
a< b? a:b = c*x+d;
В данном примере значение выражения c*x+d присваивается меньшей из переменных a , b, если a<b, то вычисляется выражение a = c*x+d, иначе b = c*x+d
В заключении приведем таблицу приоритетов операций языка С. Операции расположены по убыванию их приоритетов, таким образом, самый высокий приоритет имеют операции ( ) [ ] -> . , а самый низкий – операция «запятая»
Вид операции |
Знак операции |
Ассоциативность |
Первичные |
( ) [ ] -> . |
слева направо |
Унарные |
! ~ - + ++ -- (type) * & sizeof |
справа налево |
Мультипликативные |
* / % |
слева направо |
Аддитивные |
+ - |
слева направо |
Сдвиги |
<< >> |
слева направо |
Отношения |
< <= > >= == != |
слева направо |
Побитовые |
& ^ | |
слева направо |
Логические |
&& || |
слева направо |
Тернарная (условная) |
? : |
справа налево |
Присваивание |
= |
справа налево |
Запятая |
, |
слева направо |
Ввод-вывод текста.
В первой лабораторной работе мы познакомились с функциями классического С:
printf() (вывод на экран) и scanf() (ввод с клавиатуры)
Сейчас на примерах рассмотрим функции ввода-вывода языка С++ :
cout - поток вывода (экран)
cin - поток ввода (клавиатура)
Пример: Вывести на экран числовую информацию с комментариями
#include "stdafx.h"
#include <iostream> // библиотека ввода-вывода С++
using namespace std;
void main()
{ int i=10;
double pi=3.14;
cout<<"output data : i="<<i<<"\tpi="<<pi<<endl;
cin>>i;
}
После запуска программы, на экране увидим:
output data : i=10 pi=3.14
В отличии от функции printf(), cout не требует явного указания типов данных
(он определяет их автоматически). Управляющие последовательности \n, \t и т. п. можно использовать, заключив их в «кавычки». Элемент endl делает ту же работу, что \n, то есть переводит курсор на новую строку.
cin>>i; вводит данные с клавиатуры, в данном случае используется для задержки после выполнения программы, если этого не сделать, то мы не успеем посмотреть результат — экран очень быстро закроется.
Эту (или подобную ей по функциям) строку необходимо писать в конце всех ваших программ.
Пример: Ввести вещественное число с клавиатуры, провести вычисления и вывести результат на экран
#include "stdafx.h"
#include <iostream> // библиотека ввода-вывода С++
using namespace std;
void main()
{ int r;
double pi=3.14, rez ;
cout<< endl<<"r="; // вывод «приглашения»
cin>>r; // ввод с клавиатуры в переменную r
rez=2*pi*r;
cout<<"rez="<<rez<<endl; // вывод результата с комментариями
cin>>r;
}