Я не знаю, как написать среднюю оценку с переменными

#c

#c

Вопрос:

Я пытаюсь автоматически установить количество заданных переменных, например:

 char subject1[30];
char subject2[30];
char subject3[30];
float grade1;
float grade2;
float grade3;

cout << "Type in your first subject: "  ;
cin >> subject1;
cout << "Type in your second subject: ";
cin >> subject2;
cout << "Type in your third subject: ";
cin >> subject3;

cout << "Type in your grade for: " << subject1 << " :";
cin >> grade1;
cout << "Type in your grade for: " << subject2 << " :";
cin >> grade2;
cout << "Type in your grade for: " << subject3 << " :";
cin >> grade3;


float sum = grade1   grade2   grade3;
float average = (sum / 3);


cout << "AVERAGE GRADE";
cout << "************************************" << endl;
cout << subject1 << grade1 << endl;
cout << subject2 << grade2 << endl;
cout << subject3 << grade3 << endl;
cout << "====================================" << endl;
cout << "Average: " << average << endl;

return 0;
  

Код, который вычисляет это, работает, но мне было интересно, как мне выставить 3 оценки, введенные пользователем. Таким образом, мне не нужно редактировать вычислительную часть каждый раз, когда я добавляю другой предмет. Я не уверен, хорошо ли я объяснил, что я имел в виду, но я надеюсь, что вы понимаете.

Комментарии:

1. Скорее всего, вы ищете либо массивы, либо какие-то динамически распределяемые контейнеры, такие std::vector как для лучшего хранения информации о предмете / оценке, либо такие, которые могут быть указаны во время выполнения. Кроме того, циклы могут быть использованы для уменьшения дублирования кода для работы с ранее упомянутыми контейнерами. Я бы рекомендовал посмотреть их, поскольку они являются основными концепциями для программирования практически на любом языке.

2. И <алгоритм> может избежать ручного цикла.

3. @LemonDrop Большое вам спасибо за отзыв! Должным образом учтено!

Ответ №1:

Простым решением было бы сохранить все в vector (это предпочтительнее в большинстве случаев по сравнению с тем, char array который вы использовали), а затем просто выполнить цикл для количества предметов, которые у вас есть.

 #include <vector>   // need to inlcude this to be able to use vector
#include <iostream>

const int numSubjects = 3;

std::vector<std::string> prefix{"first", "second", "third"};
std::vector<std::string> subjects(numSubjects);
std::vector<float> grades(numSubjects);

for(int i = 0; i < numSubjects; i  ) {
    std::cout << "Type in your " << prefix[i] << " subject: ";
    std::cin >> subjects[i];
    std::cout << "Type in your grade for " << subjects[i] << ": ";
    std::cin >> grades[i];
}

//afterwards do the calculations
  

Обратите внимание, что я инициализировал векторы размером numSubjects , таким образом, вы можете получить доступ к индексам вектора и записать их с помощью [] оператора. Если вы не инициализируете vector размер, то его можно использовать push_back() для вставки элементов.

Комментарии:

1. Это здорово! Но, к сожалению, я все еще нахожусь в процессе изучения синтаксиса и не до конца понимаю написанный вами код. Думаю, мне следует попробовать сделать что-нибудь попроще. Есть какие-либо предложения о том, что я должен делать как новичок тогда?

2. @AlenNikolaus Не волнуйся, это не так сложно, как может показаться. В зависимости от того, насколько вы уже привыкли к структурам данных, вы могли бы посмотреть документацию для std::vector . Просто немного поиграйте с этим и посмотрите, что вы можете сделать. Также, если есть что-то конкретное, что неясно, просто дайте мне знать, и, возможно, я смогу дать лучшие указания.

3. Ну, «int i» меня сбивает с толку. Не совсем уверен, что это такое, и Google тоже не очень помогает

4. int это просто стандартный тип целого числа. В вашей оригинальной программе вы использовали float тип с плавающей запятой. Итак, для оценки, которую вы правильно использовали float , поскольку оценки не всегда являются целыми числами и могут иметь десятичную часть. Для вещей, которые могут и всегда будут целыми числами, такими как индекс в цикле, который вы обычно используете int .

5. Я не уверен, что вы имеете в виду, говоря «вы можете получить доступ к индексам вектора и записать их с помощью оператора []». Где мне использовать оператор []?