Лекция 1. Основы алгоритмизации и программирования на Си (1153708), страница 3
Текст из файла (страница 3)
В первую очередь выполняются операции ранга 1, во вторую ранга 2, и т. д. Операции одного ранга выполняются последовательно,направление выполнения операций (ассоциативность) - справа налево() или слева направо () - указано в третьем столбце. Если один итот же знак операции встречается в таблице дважды, то первое егопоявление (с меньшим рангом) соответствует унарной операции, авторое - бинарной.11Таблица 3. Операции Си.Ранг Обозначение Название операцииоперации1() []круглые и квадратные скобки->косвенный выбор компонентаструктурированного объектапрямой выбор компонента структу.рированного объекта (см. п.3.2)2!логическое отрицаниепоразрядное инвертирование внутреннего двоичного кодаунарный плюс и минус+ инкремент (увеличение на 1)++декремент (уменьшение на 1)-взятие адреса&взятие содержимого (см.
п.1.5.3)*приведение к типу(тип)определение размера в байтахsizeof3* /%4+ -5<< >>6< <= > >=7==!=Ассоциативностьарифметическое умножение и делениеполучение остатка от делениянацелоарифметические сложение и вычитаниепоразрядного сдвигаотношения (меньше, меньше илиравно и т. д.)отношения (равно, неравно)8&Поразрядная конъюнкция9^Поразрядное исключающее "или"10|Поразрядная дизъюнкция11&&конъюнкция (логическое "и")12Ранг Обозначение Название операцииоперации12||дизъюнкция (логическое "или")13?14=операция=15,Ассоциативностьусловная операцияприсваиваниесоставное присваиваниеоперация "запятая"Рассмотрим особенности некоторых операций.
Заметим, чтоскобки в языке Си в ряде случаев рассматриваются как бинарные операции. Так, например, например, квадратные скобки при указании индексов элемента массива и круглые скобки при обращении к функции(подробнее с этим можно ознакомиться в [2], с.42).Унарная операция инкремент (увеличение на единицу или автоувеличение) имеет две формы: префиксную (++имя_переменной) ипостфиксную (имя_переменной++). В случае префиксной формы увеличение значения операнда происходит до его использования, в случае постфиксной - после. Для лучшего понимания различия этих формполезно проанализировать 2 фрагмента программы:int i=1,c;1-й фрагмент2-й фрагментс=2*i++;/*”=” – знак присваивания*/с=2*++i;/*в результате i равно 2, с равно 2*//* i равно 2, с равно 4*/Аналогично существуют префиксная и постфиксная формы декремента.
Заметим, что операции инкремент и декремент могут использоваться не только в выражениях, но и как самостоятельный оператор, увеличивающий или уменьшающий переменную на единицу.Операция sizeof вычисляет размер в байтах для типа операнда.Она имеет две формы: sizeof (выражение) и sizeof (тип). Она использует в том случае, когда нужно построить алгоритм, обрабатывающийвыражения различных типов.Операция (тип) выражение осуществляет приведение выражения к типу, указанному в скобках.Заметим, что Си допускает использование в выражении операндов различных типов (в отличии, например, от Паскаля, где строго от-13слеживается соответствие типов операндов и операций). Однако, длятого, чтобы воспользоваться такой свободой, надо хорошо знать правила автоматического преобразования типов и иметь некоторый опытпрограммирования.
Начинающим программистам рекомендуется безкрайней необходимости не использовать операнды различных типов впределах одного выражения и использовать для явного преобразования типов операцию (тип).Если говорить о числовых типах, то в Си строго выдерживаетсяправило: если в выражении все операнды одного типа, то и результатимеет тот же тип. Поэтому при делении двух целых операндов получается целый результат. Например, значением выражения 5/2 будет 2 (ане 2.5). Для получения вещественного результата надо использоватьвещественные операнды (5.0/2.0).В Си в качестве знака присваивания используется символ "=".Этот символ часто называется простым присваиванием в отличие отприсваивания составного (см., например, [2]) Операция присваиванияимеетвид:имя переменной=выражение;Операция предполагает вычисление значения выражения, стоящего справа от знака присваивания, и запись его в ячейку, соответствующую переменной, имя которой стоит слева от этого знака.
Результатом операции присваивания считается новое значение переменной. Чаще всего операция присваивания используется как самостоятельный оператор, обеспечивающий запись в ячейку новогозначения. Именно как оператор (и только как оператор) присваиваниесуществует в большинстве алгоритмических языков.В Си, однако, присваивание является не только оператором, но иоперацией (см. таблицу 3, операции ранга 14). Рассмотрение его какоперации делает допустимой в отличии, например, от Паскаля цепочку: a=b=c=d=0, в результате которой все переменные, начиная с самойправой, получают значение 0 (или, конечно, любое другое значение).Заметим, что в Си значение локальной (т.е. описанной в некоторой функции, в том числе и main) переменной считается неопределенным (фактически в ней хранится некоторое "мусорное" значение), еслиэто значение не задано каким-либо способом (присваиванием, вводом,14или инициализацией при описании).
В Си существуют также статические переменные (см. п.2.4), значения которых при описании обнуляются (если, только, конечно, они не инициализируются другими значениями).1.3. Операторы преобразования данных1.3.1. Общие положенияК операторам преобразования данных относятся: оператор присваивания, с помощью которого осуществляются все преобразованиявнутренних данных, операторы ввода и вывода.Оператор присваивания был рассмотрен в п.1.2.5, когда рассматривали операцию присваивания.
В этой части пособия будут рассмотрены операторы вывода и ввода.Под вводом понимается процесс передачи данных с внешнихустройств в память компьютера, под выводом - передачи данных изпамяти компьютера на внешние устройства. Ввод и вывод являютсяважнейшими операторами, так как с их помощью осуществляется общение пользователя с программой. Без операторов вывода программавообще не имеет права на существование: если она ничего не сообщает пользователю, то зачем она нужна?Вводу подлежат исходные данные. Это переменные, начальныезначения которых меняются от одного выполнения алгоритма к другому. Выводятся, естественно, результаты программы. Соответствующие данные называются выходными данными.
Все остальные данныеназываются промежуточными. Разделение данных на исходные, выходные и промежуточные называется классификацией данных пофункциональному признаку. Определение, какие данные будут исходными, а какие выходными, является первым и важнейшим этапом разработки алгоритма и программы.В стандарте языка Си отсутствуют средства ввода-вывода. Этиоперации реализуются с помощью функций, находящихся в библиотеках языка Си, поставляемых в составе конкретной системы программирования. В примере рис. 1 инструкция #include <stdio.h> нужна дляподключения одной из библиотек ввода-вывода системы программирования Borland C++ 3.1.15Последовательность значений на входном (или выходном)устройстве в Си принято называть потоком.В этом разделе пособия мы рассмотрим только операторы вводас клавиатуры и вывода на экран.
Работа с внешней памятью (файламина магнитных дисках) будет рассмотрена в третьей части пособия. Извсего множества операторов ввода-вывода языка Си рассмотрим операторы форматного ввода-вывода.Начинающим с нуля, возможно, будет трудно воспринимать этотматериал. Тогда стоит воспользоваться более простыми5 операторамиввода-вывода, относящимися, однако, не к языку Си, а его расширению Си++. Чтобы использовать их, надо в начале программы поместить директиву препроцессора#include <iostream.h>Эти операторы в простейшем случае имеют вид:cin >> имя_переменной;cout << выражение;здесь cin - стандартный поток ввода (обычно ввод с клавиатурыкомпьютера), cout - стандартный поток вывода (обычно вывод наэкран монитора), >> и << - операции "взять из" и "передать в"; легковидеть, что направление стрелок указывает направление передачиданных.Применяя эти операторы, простейшую программу рис. 1 можнопереписать следующим образом:#include <iostream.h>void main(){int a,b,c;/*описание трех целых переменных*/cout << "Введите a и b\n"; /*приглашение к вводу a и b*//* \n - переход к следующей строке экрана - см.