2016-08-31 3 views
-2

Я начинаю на C++, и я делаю этот пример кода операторов присваивания. Я не знаю, что я здесь делаю неправильно.Операторы присваивания C++ Beginner

#include <iostream> 

using namespace std; 
int main() 
{ 
    int x = 200; int y = 100; 
    x += y; cout << x << endl; //x += y; // x = x + y, x = 200 + 100, output 300. 
    x -= y; cout << x << endl; //x -= y; // x = x - y, x = 200 - 100, output 100. 
    x /= y; cout << x << endl; //x /= y; // x = x/y, x = 200/100, output 2. 
    x %= y; cout << x << endl; //x % y; // x = % y, x = 200 % 100, output 0. 
    return 0; 
} 

я получаю результаты для

x -= y = 200 
x /= y = 2 
x %= y = 2 

когда его предполагают, чтобы быть

x -= y = 100 
x /= y = 2 
x %= y = 0 

его на самом деле сложением предыдущих результатов. Как остановить код от добавления результата к следующей строке? Благодаря!

+4

Вы предполагаете 'x' сбрасывает обратно в 200 после каждой команды, но это не делает. –

+0

Остановитесь, чтобы он накопил результаты. '- =', '+ =', '/ =' и '% =' - все операторы накопления, которые присваивают результат операции перед '=' переменной слева. – jaggedSpire

+0

ваше первое присваивание - 'x + = y', так что следующий' x - = y' приводит к 'x == 200'. Нет «сложения» результатов, вы просто продолжаете присваивать 'x', если это не то, что вам нужно, тогда просто не делайте этого ... – user463035818

ответ

1

Вы ожидаете исходное значение x и y должны храниться вечно, но это не так. Задания, такие как x += y; или x = x + y;, изменяют значение переменных (в этом случае x, то есть тот, который находится слева от знака равенства). Предыдущее значение перезаписывается и, следовательно, теряется.

Если вы не хотите изменять исходные значения, вы должны либо присвоить результат другим переменным (например, один из которых называется temp, который вы можете перезаписывать каждый раз), или вы не назначаете его на все, и вы просто отправляете на cout результат расчета.

В качестве примера с переменной TEMP:

int x = 200; int y = 100; int temp; 
temp = x + y; cout << temp << endl; //temp = x + y, temp = 200 + 100, output 300. 
temp = x - y; cout << temp << endl; //temp = x - y, temp = 200 - 100, output 100. 

Или, покончив с переменными полностью:

cout << x + y << endl; // 200 + 100, output 300 
cout << x - y << endl; // 200 - 100, output 100 

Другим способом, чтобы увидеть, что переменные будут перезаписаны (ну, в данном случае это только x), чтобы объявить их как const:

const int x = 200; const int y = 100; 

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

2

Каждый раз, когда вы выполняете задание, как x += y;, оно меняет значение x.

x += y; 

эквивалентно

x = x + y; 

Что означает назначение. Значение x меняется. Сейчас 300. То же самое происходит и для последних заданий.

Примечание:, если вы не хотите изменять значение x и y, лучше выполнять назначения в другой переменной.

int x = 200, y = 100, t; 
t = x + y; cout << t << endl; 
t = x - y; cout << t << endl; 
t = x * y; cout << t << endl; 
t = (int) x/y; cout << t << endl; 
3

Когда x и y являются переменными и U является операция x U= y эквивалентна:

x = x U y; 

что означает, что исходный переменный модифицируются и присваиваются с результатом.

Вы код эквивалентен:

x = x + y; 
cout << x << endl; // x is now 300 
x = x - y; 
cout << x << endl; // x is now 200 
x = x/y; 
cout << x << endl; // x is now 2 
x = x % y; 
cout << x << endl; // x is now 2 

Если вы хотите, чтобы не изменить x вы хотите можете сохранить x во временной переменной или просто распечатать результат:

int x = 200; 
int y = 100; 
cout << x - y << endl; // x unchanged 
cout << x + y << endl; // x unchanged 
cout << x/y << endl; // x unchanged 
cout << x * y << endl; // x unchanged 

Или:

int x = 200; 
int x = 100; 
int result = x + y; 
cout << result << endl; 
result = x - y; 
cout << x << endl; 
result = x/y; 
cout << result << endl; 
result = x % y; 
cout << result << endl; 

Примечание: поскольку = оператор возвращает значение после назначения cout << x += y << end может компилировать и распечатать назначенное значение.

3

Как упоминалось в комментариях в коде, результат x += y эквивалентно x = x + y, что означает, что значение x изменится. Поэтому неудивительно, что новое значение x, 300, используется в следующем математическом задании.

Если вы хотите этого избежать, подумайте о сохранении результата x + y другой переменной.

int x = 200; 
int y = 100; 
int x_addition = x + y; 
std::cout << x_addition << std::endl; 

Или, если его использование используется только при отображении результата добавления, сделайте все в одной строке.

int x = 200; 
int y = 100; 
std::cout << x + y << std::endl; 
0

Вы не рассчитывали на операции сложения дорожит

x=200,y=100;  
x+=y;//x=200+100=300,x=300,y=100 
x-=y;//x=300-100=200,x=200,y=100  

Здесь вы забываете, что есть Сложения РАБОТЫ Перед вычитанием

1

Попробуйте сбросить й обратно в 200 после каждого задания. Как это:

#include <iostream> 

using namespace std; 
int main() 
{ 
    int x = 200; int y = 100; 
    x += y; cout << x << endl; 
    x = 200; 
    x /= y; cout << x << endl; 
    x = 200; 
    x %= y; cout << x << endl; 
    return 0; 
} 
1

Вы используете операторы накопления, чтобы изменить значение «x».

x += y; // x = 200 + 100 = 300 
x -= y; // x = 300 - 100 = 200 
x /= y; // x = 200/100 = 2 
x %= y; // x = 2 % 100 = 2 

Вместо этого вы могли бы сделать:

int x = 200; 
    int y = 100; 
    cout << x + y << endl; 
    cout << x - y << endl; 
    cout << x/y << endl; 
    cout << x % y << endl; 

Или:

int x = 200; 
    int y = 100; 
    int result; 

    result = x + y; 
    cout << result << endl; 

    result = x - y; 
    cout << result << endl; 

    result = x/y; 
    cout << result << endl; 

    result = x % y; 
    cout << result << endl; 
Смежные вопросы