
** vcp1 ** 1.03.2004
Лекция 5. Операторы присваивания,
ввода-вывода и цикла
5.1 Операторы присваивания
Этот оператор имеет вид
имя = выражение ; (5.1)
Пример: a = 1. + sin(x) ;
Выражение состоит из любого количества чисел, переменных, операций,
функций. Оператор работает следующим образом.
1. Первой вычисляется правая часть с учетом приоритета скобок и операций.
При этом каждая операция будет выполняться с операндами одного типа.
Например, сложение 2 + 1.1 будет производиться как 2.+ 1.1 , т.е. целое
значение 2 перед сложением преобразуется в 2. , т.е. в вещественное.
2. Результат для правой части присваивается левой переменной с учетом ее
типа. При этом, если справа получено вещественное значение и оно
присваивается целой переменной, т.е. имеем оператор
целая переменная = вещественное значение,
то дробная часть справа отбрасывается.
Отсюда следует, что операторы
k = 1.9 ; k = (int) 1.9 ; k = int (1.9) ;
при целой переменной k приводят к одинаковому результату ( k= 1) .
Рассмотрим фрагмент программы с тремя операторами присваивания
из контрольной работы.
Int a, b ; float r ;
a =.9 ; b = a + .9 ; (5.2)
r = 9 / 10 + 9. / 10 + a ;
В результате выполнения этих операторов получим значения
a = 0, b = 0, r = 0.9 ,
хотя обычные арифметические операции с числами дают r = 2.7 . В связи с этим
рекомендуется обычно использовать вещественные переменные и числа( float,double),а целые ( int ) применять только в особых случаях,
например, для возведения в целую степень, для счетчиков, для номеров
или индексов элементов.
Cледует также помнить о погрешностях округления. Например, при вычислении
значения p=0.5 типаfloatможет быть получено любое из трех значений:
0.4999999, 0.5000000 или 0.5000001.
Язык С++ разрешает и более сложное множественное присваивание.
При этом в одном операторе используется несколько переменных, например,
a = b = 0 ;
В заключение этого раздела рассмотрим еще одно важное присваивание.
В описаниях типа переменным можно сразу присвоить начальные значения. Эти
значения заносятся в память при ее выделении, т.е. выполняется инициализация
переменных. Например, описания в ( 5.2) можно записать следующим образом:
int a , b = 0 ; float r = 0. ;
хотя в данном случае эти присваивания не нужны, т.к. они не используются:
значения b,rзаносятся в память при их вычислении.
5.2 Вывод на экран и ввод с экрана
Ввод-вывод в Си++ называется потоковым.
Для вывода информации используется поток cout, а для ввода -cin.
С имени coutначинается оператор вывода, а с имениcin- оператор ввода.
Для упрощения имена cout,cinможно воспринимать как команды
для вывода или ввода, хотя это и неправильно, т.к. это имена потоков.
Как включать данные в поток? Для этого используются операции обмена:
операция включения в поток << , т.е. вывода,
и операция извлечения из потока >> , т.е. ввода.
При вводе-выводе эти операции позволяют использовать
одно значение, но из них можно составлять цепочки.
В цепочках перечисляется, что выводится или вводится.
Примеры:
cin>>x; cout<<x; cout<<1234 << endl<< “ \n ”;
cout<< ”\n 1234 \n”; cout<< sin(x)+1 << endl;
cin>> mas[2]; cin>>masg[1][3];
cout<< ” DONE! \n” << “ x=”<< x; cout<< “ текст”<< endl
cout << “ *** получено \t “ << s1<<” ”<< x+sin(x) <<” in ” << 2 << endl ;
Элементом цепочки может быть переменная, выражение, константа,
в том числе и текстовая, элемент массива.
Текстовая константа - это любой текст в кавычках, символьная константа- это
символ в апострофах.
Для переменных и выражений выводятся их значения, а любые символы в
кавычках копируются ( без кавычек!) .
Слово endlв цепочках означает новую строку, т.е. делает то же самое,
чтo символы ‘\n’ или “ \n” , но использоватьendlудобнее,
хотя в обоих случаях нужно набрать 4 символа. Часто используется также
символ табуляции ‘ \t’ .
В отличие цепочек вывода, простые цепочки для ввода обычно
содержит только имена переменных, например,
cin >> d >> t >> z ; (5.3)
Оператор ввода с cinприостанавливает выполнение программы, т.к. он
читает данные с экрана. Пользователь должен ввести все значения в
соответствии со списком ввода и нажать клавишу <Enter>. Если количество
чисел на экране равно количеству элементов в списке, то выполнение
программы продолжается. Если их меньше, то после нажатия следует
продолжить ввод и опять нажать <Enter>. Переход на новую строку при вводе
происходит автоматически, т.е. элемент endlне нужен.
Разделителями данных на экране могут быть пробел или пробелы.
Например, для оператора ввода (5.3), если переменные описаны как
int d; float t, z ;
можно ввести следующую строку
1.99 0.011e-5 <Enter>
При считывании этих данных происходит присваивание значений переменным с
учетом преобразования типов, т.е. получим в программе
d = 1 t = .01 z = 1е-5
Обратите внимание на искажение значения dиз-за преобразования типа.
Заметим, что слова "ввод с экрана" используются для упрощения, а на самом
деле чтение происходит из специальной области памяти (буфера), в которую
переносятся данные после нажатия клавиши <ENTER>.
Как и другие объекты в C++ , потоки cin,cout“умны”, т.е. они знают, что делать при различных обращениях к ним. В отличие от языка Си, не нужна дополнительная информация о типах значений, которая обязательна для операторовprintf,scanf. Следовательно, ввод-вывод в С++ выполняется по-разному в зависимости от типа правого операнда операции включения в поток << и извлечения из потока >> .
Чем объясняется такая возможность? Тем, что операции << и >> имеют много вариантов для различных типов величин: int,long,char,float,doubleи т.д., причем конкретный вариант определяется автоматически по типу указанных значений.
Эти же операции используются при работе с файлами и будут рассматриваться позже.
Запрос, ввод, эхо-вывод
При выполнении программы нужно знать, что запрашивает каждый оператор
ввода , если ввод данных производится с экрана. Для этого перед каждым
оператором ввода используется подсказка. Подсказку составляет программист
в виде оператора вывода c произвольным текстом запроса на экране.
Пусть нужно ввести два числа: k,x.
cout << “ введите k,x = ” ; // - это подсказка (запрос),
cin>>k>>x; // - это ввод с экрана,
cout<< “ введеноk= ”<<k<< “x=” <<x<<endl; // - эхо-вывод
Обычно эхо- вывод направляется в файл, в который будут выводиться
результаты работы программы. Можно сделать два эхо-вывода: на экран
и в файл. Вывод в файл рассмотрим позже.
Указанную триаду ( запрос - ввод - эхо-вывод ) необходимо
использовать в любой задаче курсовой работы, если в ней есть указание
“дано” , т.е. должны вводиться исходные данные. Это связано с тем, что на
принтер будет выводиться содержимое файла с результатами, а не экрана. В
файле обязательно нужен заголовок задачи.