Вот код:
#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int score_one;
int score_two;
int score_third;
int final_score = score_one * score_two * score_third;
int main()
{
cout << "What was your first score?" << endl;
cin >> score_one;
cout << "What was your second score?" << endl;
cin >> score_two;
cout << "What was your third score?" << endl;
cin >> score_third;
cout << "Your average score is: " << final_score << endl;
return 0;
}
Первоначально я пытаюсь получить среднее значение, разделив три балла, но это не работает, как и моя арифметика. Он даже не умножает переменные. Я использую cin, чтобы получить числа. Не уверен, что мне не хватает.
это напоминает мне цитату Бэббиджа ... 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question.





В то время, когда вы присваиваете final_score, значения других оценок равны 0 (поскольку вы еще не присвоили им значения, и они являются глобальными). Затем вы считываете оценки, но никогда не обновляете final_score!
Вам нужно добавить это после того, как прочтете третью партитуру:
final_score = score_one * score_two * score_third;
Это обновит final_score.
Я бы также посоветовал держаться подальше от глобальных переменных. Я также предлагаю инициализировать ваши переменные при их объявлении, чтобы избежать ненужных значений.
Кроме того, вы на самом деле не рассчитываете среднее значение! Для этого вам нужно сложить свои значения и разделить на 3, поскольку всего у вас есть 3 значения. Но вы указали final_score как целое число, поэтому вы не сможете сохранить среднее значение с полной точностью. Предлагаю объявить как double.
С учетом всех этих изменений ваш код будет выглядеть так:
int main()
{
int score_one = 0;
int score_two = 0;
int score_third = 0;
double final_score = 0;
cout << "What was your first score?" << endl;
cin >> score_one;
cout << "What was your second score?" << endl;
cin >> score_two;
cout << "What was your third score?" << endl;
cin >> score_third;
final_score = (score_one + score_two + score_third) / static_cast<double>(3);
cout << "Your average score is: " << final_score << endl;
return 0;
}
+1 за то, что также указал, что оригинал не вычисляет среднее значение (я думаю, что все, включая меня, сосредоточились на фиксации порядка).
Чтобы закончить, вы должны проверить, что чтение прошло успешно.
Математика в C++ в целом работает не так, как математика. В математике вы определяете отношения типа total = x * y * z, которые всегда должны выполняться. В С ++ вы выполняете последовательные операции. Выражение total = x * y * z присваивает значение Текущий правой части левой стороне, и на этом связь между переменными заканчивается. Дальнейшие изменения любого из x, y или z никоим образом не повлияют на total (при условии, что эти переменные являются фундаментальными арифметическими типами, такими как int).
что такое static_cast <double> (3)? Я полностью новичок в C++, так что это может быть вне моей области прямо сейчас
Как именно умножить три числа, а затем разделить на 3 «среднее» чего-либо?
@ T.C. Ха! Хороший звонок - я это полностью упустил. Спасибо за улов! :)
@JonathanGarland взгляните на как работает целочисленное деление. А потом смотрите как ты можешь этого избежать.
Эту строку нужно переместить после, вы cin, в переменные в правой части уравнения.
int final_score = score_one * score_two * score_third;
cout << "Your average score is: " << final_score << endl;
Переменная каким-то образом не пересчитывается, когда эти переменные устанавливаются позже.
Эта часть
int final_score = score_one * score_two * score_third;
должен находиться внутри main() после последнего cin.
Вы уже получили некоторые ответы, но я хотел бы высказать другую точку зрения.
Мне кажется, что вы привыкли к такой программе, как Excel, где вы можете установить ячейку в формулу (например, произведение трех других ячеек), а затем, когда вы меняете любую из этих ячеек, продукт немедленно обновляется, автоматически. C++ (и вообще языки программирования) так не работает. Когда вы пишете строку вроде
int final_score = score_one * score_two * score_third;
вы устанавливаете правило нет, которое приведет к пересчету значения. Подход другой!
Программа выполняется от начала до конца (на практике сверху вниз), и каждый раз, когда вы присваиваете значение переменной (например, final_score), вы читаете текущее значение входных переменных. (здесь ваши три оценки), вычисляя результат (который в данном случае не определен, потому что вы не инициализировали ни одну из оценок), и присваивая его переменной только в этот раз. Вот и все. Если вы позже измените оценки, изменение нет автоматически отразится на вашем final_score. Если вы хотите, чтобы значение было пересчитано, вам придется сделать это вручную. Вот почему вы должны переместить эту строку после строк, которые читают ввод от пользователя, как говорили другие.
Вам действительно не следует использовать глобальные переменные глянь сюда, почему вам следует их избегать.
Далее, вместо того, чтобы делать using std::cin и т. д., Просто привыкните набирать его.
Наконец, используйте соответствующие флаги в вашем компиляторе, чтобы помочь вам обнаруживать ошибки. Компилятор должен быть вашим другом. Хороший компилятор скажет вам,
int score_one;
int score_two;
int score_third;
int final_score = score_one + score_two + score+third / 3;
Не инициализируется. Чтобы действительно достичь того, о чем вы думаете, вы можете использовать функцию, которая вернет двойное значение. И это выглядело бы примерно так
double doAverage(int score1, int score2, int score3)
{
return (score1 + score2 + score3) / 3.0;
}
Но это, вероятно, придет позже в вашей практике кодирования.
#include<iostream>
int main()
{
// Delare your variables here and initialize them to zero.
int score_one = 0;
int score_two = 0;
int score_third = 0;
double final_score = 0;
std::cout << "What was your first score?" << std::endl;
std::cin >> score_one;
std::cout << "What was your second score?" << std::endl;
std::cin >> score_two;
std::cout << "What was your third score?" << std::endl;
std::cin >> score_third;
// Take all scores and divide it. This is the important part since
// order matters in your code.
final_score = (score_one + score_two + score_third) / 3.0;
std::cout << "Your average score is: " << final_score << std::endl;
return 0;
}
Вы на правильном пути, вам просто нужно взглянуть на свой код и прочитать его вслух. Одна из лучших вещей, которые вы можете сделать в программировании, - это начать сверху и сказать: «Хорошо, где это ломается?» И следуйте за ним строка за строкой, чтобы понять это.
Вам понадобится () вокруг вашей суммы, иначе вы не получите среднего.
Спасибо, изменения внесены
Примечание: если бы эти переменные не были глобальными (глобальные переменные инициализированы для вас по умолчанию), скорее всего, компилятор смог бы сказать вам, что вы делаете неправильно. С включенным оптимизатором и несколькими дополнительными флажками предупреждения (
-O3 -pedantic -Wall -Wextra) вы могли бы получить несколько строк «предупреждение: 'score_one' используется в этой функции без инициализации»