Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1 курс / метод указания / Информатика. Основы программирования на С++. Учебное пособие.doc
Скачиваний:
142
Добавлен:
08.06.2015
Размер:
2.15 Mб
Скачать
    1. 4.2. Инкремент, декремент и составные операции

присваивания

Для сокращения записи операторов итерационного вида в С++предусмотрен ряд специальных операций. К ним относятся инкремент, декремент и составные операции присваивания. Их часто применяют в циклах.

Инкремент(++) – автоувеличение переменной на единицу. Он имеет две формы: префиксную и постпрефиксную.

Префиксный инкремент(++x) – увеличение значения операнда (х) на единицу до его использования.

Например:

intx=1;inty=++x; // в результатеy=2.

Постпрефиксный инкремент(х++) - увеличение значения операнда (х) на единицу после его использования.

Например:

intx=1;intz=x++; // в результатеz=1.

Декремент(--) – автоматическое уменьшение переменной на единицу. Он так же, как и инкремент, имеет две формы: префиксную и постпрефиксную.

Составные операцииприсваивания содержат два разных знака операций, один из которых (второй слева) является простым оператором присваивания (=). Наиболее часто используемые арифметические составные операции и их эквиваленты приведены в табл. 4.1.

В С++можно использоватьмножественное присваиваниедля однотипных переменных. Оно часто применяется для сокращения записи начальных установок.

Например: z=y=x=0.

Таблица 4.1

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

Знак операции

Вид операции

Пример

Эквивалент

* =

Умножение с присваиванием

х*=2

x=х*2

/ =

Деление с присваиванием

x/=5-y

x=x/(5-y)

+ =

Сложение с присваиванием

x+=y

x=x+y

- =

Вычитание с присваиванием

x-=y+0.5

x=x-(y+0.5)

Пример. Вычислить значение гиперболического синусаshxс заданной точностьюepsс помощью разложения в бесконечный ряд:

.

Вычисление заканчивается, когда абсолютная величина очередного члена ряда, прибавляемого к сумме, станет меньше eps.

. . . . . . . . . . . .

double y,x,s;

cin>>x;

y=s=x; //множественное присваивание

for (int i=0; fabs(y)>eps; i++)

{ y*=pow(x,2)/(2*i+2)/(2*i+3); //очередной член ряда

s+=y;

if (i>500) //проверка на зацикливание

{cout<<"\n Ряд расходится!";

break;

}

}

cout<<"\n Значение s="<<s;

. . . . . . . . . . . .

Пример 1. Найти значение степенного ряда

Вычисление осуществлять до выполнения условия .

В основе алгоритма лежит рекуррентная формула расчета следующего члена ряда по предыдущему: .

Для решения данной задачи можно использовать циклы, реализуемые операторами whileиdo(лист. 4.1).

Листинг 4.1. st_rydpp

#include <iostream.h>

#include <math.h>

void main()

{

float x,y,z,eps;

cout<<"Задайте точность вычислений eps=";cin>>eps;

cout<<"Введите переменную x=";cin>>x;

while (fabs(x)>=1) // Цикл проверки правильности ввода

{

cout<<"Введите переменную x в диапазоне |x|<1";

cout<<"\nx=";cin>>x;

}

const int MaxIter=100; //Ограничитель количества итераций

y=z=x; //Множественное присваивание

int i=1; //Задание параметра цикла

do

{

z*=-x*i/(i+1); //Определение члена ряда

y+=z; //Текущая сумма ряда

i++; //Модификация параметра цикла

if(i>MaxIter) //Проверка зацикливания

{cout<<"\nРяд расходится!";

break;

}

}

while (fabs(z)>=eps); //Условие выхода из цикла

cout<<"y="<<y<<" при x="<<x<<" eps="<<eps;

}