
- •Часть 1
- •18 Сентября 2012 г., протокол № 1
- •Предисловие
- •§ 1. Основные понятия программы
- •1.2. Директива препроцессора #include
- •Структура программы
- •Комментарии
- •Ключевые слова, идентификаторы, переменные
- •§ 2. Ввод, вывод
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Операция присваивания
- •§ 4. Программирование ветвлений
- •4.1. Оператор if
- •4.2. Тернарная операция
- •4.3. Оператор выбора switch
- •Г л а в а 2 циклы
- •§ 1. Оператор while
- •§ 2. Оператор break
- •§ 3. Оператор do … while
- •§ 4. Оператор for
- •Г л а в а 3 Введение в массивы
- •§ 1. Основные понятия
- •§ 2. Способы определения массивов
- •§ 3. Вывод массива. Функции printf и cprintf
- •§ 4. Типы задач при работе с массивами
- •Упражнения и тесты
- •Г л а в а 4 модульное программирование. Функции
- •§1. Функции без результатов. Параметры-значения
- •1.1. Примеры. Правила оформления и вызова функций
- •Формальные и фактические параметры
- •Передача параметров по значению
- •§ 2. Функции типа void с результатами
- •2.1. Вычислeниe бeсконeчных сумм
- •2.2. Что такое ссылочный тип
- •2.3. Параметры ссылочного типа
- •§ 3. Функции, отличные от void. Оператор return
- •§ 4. Область действия имён. Локальные и глобальные имена
- •§ 5. Встраиваемые (inline) функции
- •§ 6. Параметры по умолчанию
- •§ 7. Перегрузка функций
- •7. Сравнение функций типа void и отличных от типа void.
- •Г л а в а 5 введение в объектно-оРиентированное программирование
- •§ 1. Первое знакомство с ооп
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Упражнения и тесты
- •Оглавление
- •3.1. Константы …………………………………………….………..….........…8
- •Упражнения и тесты …….………………..………………………….…………....19
- •Методы программирования:
- •Лекции, примеры, тесты
- •Пособие для студентов механико-математического факультета
- •В двух частях
- •Часть 1
3.4. Операция присваивания
1) В простейшем случае она похожа на присваивание языка Pascal:
переменная = выражение;. Вместо двух символов (:=) используется один “=”. Слева всегда записывается только переменная. Справа как частный случай выражения допускается одна константа (x=1) или только обращение к функции (y=abs(x)), или одна переменная (y=x).
2) Можно использовать так называемое многочисленное присваивание: П1=П2=…=Пn=Выражение;. Значение одного и того же выражения присваивается нескольким переменным П1,П2, …, Пn. Например, оператор R=r=v=x+y; трём переменным R, r и v присваивает одно и то же значение суммы.
3) Сокращённое присваивание в общем виде выглядит так.
Переменная = переменная операция выражение;, где слева и справа от знака = одна и та же переменная, можно записать: переменная операция = выражение;. Например, S=S+N; можно сократить: S += N;. Идентификатор переменной записывается один раз, между операцией и символом “=” не должно быть пробела. Преимущество такой записи в том, что не надо дважды повторять имя одной и той же переменной.
4) Для увеличения или уменьшения на единицу можно использовать операции инкремент (++) и декремент( - -). Эти операции могут стоять как перед операндом (префиксная), так и после него (постфиксная). Нельзя писать пробел между этими одинаковыми символами. Их можно использовать как самостоятельно, так и в выражении.
При самостоятельном использовании префиксная и постфиксная операции выполняются одинаково. Например, ++k; и k++; равносильны более простой и понятной записи k=k+1; или k+=1; Аналогично, number; и number ; равносильны number=number-1; или number-=1.
В выражениях префиксная и постфиксная операции различаются. В случае префиксной операции сначала изменяется значение переменной, перед которой стоит операция, а затем используется новое изменённое значение. Например, int X=2, Y=5, Result; Result= X*(++Y); или с учётом приоритета Result=X*++Y; выполняется так: сначала увеличивается значение Y и запоминается в этой же ячейке, то есть Y=Y+1, и при умножении используется новое значение Y, равное 6. В результате получим 2*6=12, то есть Result примет значение 12.
В случае постфиксной операции сначала используется старое значение переменной, после которой стоит операция, а затем оно изменяется. Например, пусть int X=2, Y=5, Result; Result= X*Y++; Сначала вычисляется произведение со старым значением Y, то есть Result примет значение 2*5=10, а затем значение Y увеличится и станет равным 6.
Пусть int X=2, Y=5, Result; Интерес представляет следующая запись: Result=X+++Y; Какая здесь операция — постфиксная для X или префиксная для Y? Это равносильно Result=(X++)+Y; то есть сначала выполняется сложение 2+5, а затем увеличивается X. В результате получим значение Result, равное 7, X примет значение 3, а Y не изменится. Во избежание риска в таком случае рекомендуется использовать скобки, то есть вторая запись надёжнее.
5) Ещё есть одна важная особенность присваивания, не обязательная для начинающих. Присваивание может быть частью другого оператора. Например, в компактной записи cout<<(R=a*10)<<endl; не надо дважды записывать один и тот же идентификатор R. Это равносильно R=a*10; cout<<R<<endl; Запись R=(W=a)*b; равносильна двум выражениям (операторам): W=a; R=W*b;
Замечание. Наличие отмеченных выше особенностей присваивания, тернарной операции (4.2) и других профессиональных возможностей является одной из причин того, что язык С, в том числе и С++, традиционно считается сложнее языка Pascal. Но на начальном этапе изучения такого рода особенности не обязательно использовать. Можно программировать проще, в стиле языка Pascal. Например, вместо Result= X*Y++; можно написать проще: Result= X*Y; Y=Y+1;.