【问题标题】:C ++ Calculating Max and Min with returning correlating namesC ++计算最大值和最小值并返回相关名称
【发布时间】:2016-02-05 09:05:48
【问题描述】:
#include <string>
#include <iostream>
using namespace std;

float CalcAvgClassGrade( int s1, int s2, int s3, int s4, int s5)

{
  float avg,sum;

  // Sum grades, and get avg
  sum = s1 + s2 + s3 + s4 + s5;
  avg = sum / 2;
  return avg;
}

string  getMax (int s1, int s2, int s3, int s4, int s5, string n1, string  n2, string n3, string n4, string n5)
{
  float max;
  string maxName;
    // Compares each grade to find the max
  max = s1;
  maxName = n1; 
     if(max <  s2)
       {max = s2;
     maxName = n2;
       }
    if(max <  s3)
       {max = s3;
     maxName = n3;
      }
    if (max <  s4)
     {max = s4;
       maxName = n4;
     } 
    if (max <  s5)
       {max = s5;
     maxName = n5;
    }


            return maxName; 

}

float getMin (int s1, int s2, int s3, int s4, int s5, string n1, string n2, string n3, string n4, string n5)
{

  float max;
  string minName;
    // Compares each grade to find the min
  min = s1;
  minName =  n1; 
    if(min <  s2)
      { min = s2;
        minName =  n2 ;} 
    if(min < s3)
      { min = s3;
    minName =  n3}
    if (min <   s4);
    { min = s4;
      minName =  n4}
    if (min <  s5)
      { min = s5;
    minName =  n5
}
  return minName; 


}



int main()
{
  string student1, student2, student3, student4, student5;
  int student1Grade, student2Grade, student3Grade, student4Grade, student5Grade;
  float class_avg; 
  // Enter Student Names;
  cout << "Enter Student Name: " ;
  cin >> student1;
  cout << "Enter Student Grade: " ;
  cin >> student1Grade;

  cout << "Enter Student Name: " ;
  cin >> student2;
  cout << "Enter Student Grade: " ;
  cin >> student2Grade;

  cout << "Enter Student Name: " ;
  cin >> student3;
  cout << "Enter Student Grade: " ;
  cin >> student3Grade;

  cout << "Enter Student Name: " ;
  cin >> student4;
  cout << "Enter Student Grade: " ;
  cin >> student4Grade;

  cout << "Enter Student Name: " ;
  cin >> student5;
  cout << "Enter Student Grade: " ;
  cin >> student5Grade;
6
  // Class AVG 
  classAvg = f_CalcAvgClassGrade(student1Grade, student2Grade, student3Grade, student4Grade, student5Grade,);

  cout << "Class average = "<< classAvg

  // MAX GRADE 

  classMax = s_getMax(student1Grade, student2Grade, student3Grade, student4Grade, student5Grade, student1, student2, student3, student4, student5)

  cout << classMax << " has the highest grade in the class"

 // Min Grade 

    classMin = s_Min(student1Grade, student2Grade, student3Grade, student4Grade, student5Grade, student1, student2, student3, student4, student5 )
 cout <<  classMin <<" has the lowest grade in the class"

    } 

我正在尝试构建一个程序来公布班级平均成绩、优等生和最差学生。我在编译器中遇到了很多错误。这是我第一次用 C++ 编码,所以我在学习语法时遇到了一些麻烦。任何人都可以找到任何错误吗?

【问题讨论】:

  • 您可以发布错误消息。突出的是一行中的流浪6,并且您没有使用您定义的函数的名称。此外,这不是您计算五个数字的平均值的方式。
  • 使用数组(向量)可能会有所帮助。

标签: c++ average


【解决方案1】:

我将您的代码包含在我的 IDE 中。向我显示以下错误: 缺少类型声明:

int myInt = 0;
myNotTypedVariable = myInt;

不起作用,因为您需要在构造变量之前定义变量的类型。之后进行值的分配。 正确:

int myInt = 0;
int myNowTypedVariable = myInt;

如果您使用较新的标准,例如 c++0x,您也可以使用:

auto myInt = 0;
auto myNowTypedVariable = myInt;

错误的返回类型:返回的变量类型必须与函数声明的返回类型匹配。

int function()
{
    return "";
}

正确的应该是这样的:

int function()
{
    return 1;
}

而且你缺少一些“;”作业后。

您的解决方案也很脆弱。只要您必须添加一个新学生,就我所见,您需要更改函数签名和这些函数的实现。您可能需要考虑使用列表。 您的“字符串”是标准库的一部分,因此您也应该能够使用向量。 示例如何使用矢量:

#include <vector>
#include <string>
using namespace std;
int function( const vector<string>& student_names )
{
    for(int i = 0; i < student_names.size(); ++i)
    {
        cout << "Student Name: " << student_names.at(i) << endl;
    }
    return student_names.size();
}
int main()
{
    vector<string> students;
    students.push_back("a");
    students.push_back("b");
    students.push_back("c");
    students.push_back("d");
    if(function(students) == 4)
    {
         return 0;
    }
    return 1;
}

std::vector 在这种情况下是一个模板,可以用于各种类型的存储。如果您需要整数列表,请写vector&lt;int&gt;

 vector<int> values;
 values.push_back(1);
 int value = var.at(0); 

将返回整数 1。

【讨论】:

    【解决方案2】:

    这是更正后的代码。错误已正确注释。

    #include <string>
    #include <iostream>
    using namespace std;
    
    float CalcAvgClassGrade(int s1, int s2, int s3, int s4, int s5)
    
    {
        float avg, sum;
    
        // Sum grades, and get avg
        sum = s1 + s2 + s3 + s4 + s5;
        avg = sum / 2;
        return avg;
    }
    
    string  getMax(int s1, int s2, int s3, int s4, int s5, string n1, string  n2, string n3, string n4, string n5)
    {
        float max;
        string maxName;
        // Compares each grade to find the max
        max = s1;
        maxName = n1;
        if (max <  s2)
        {
            max = s2;
            maxName = n2;
        }
        if (max <  s3)
        {
            max = s3;
            maxName = n3;
        }
        if (max <  s4)
        {
            max = s4;
            maxName = n4;
        }
        if (max <  s5)
        {
            max = s5;
            maxName = n5;
        }
    
    
        return maxName;
    
    }
    
    string getMin(int s1, int s2, int s3, int s4, int s5, string n1, string n2, string n3, string n4, string n5) //returnig float instead of string
    {
    
        float min;
        string minName;
        // Compares each grade to find the min
        min = s1; // min was not defined
        minName = n1;
        if (min <  s2)
        {
            min = s2;
            minName = n2;
        }
        if (min < s3)
        {
            min = s3;
            minName = n3; //should use semicolon to stop the statement 
        }
        if (min <   s4);
        { 
            min = s4;
            minName = n4;//should use semicolon to stop the statement
        }
        if (min <  s5)
        {
            min = s5;
            minName = n5;//should use semicolon to stop thestatement
        }
        return minName;
    
    }
    
    
    
    int main()
    {
        string student1, student2, student3, student4, student5;
        int student1Grade, student2Grade, student3Grade, student4Grade, student5Grade;
        float class_avg;
        // Enter Student Names;
        cout << "Enter Student Name: ";
        cin >> student1;
        cout << "Enter Student Grade: ";
        cin >> student1Grade;
    
        cout << "Enter Student Name: ";
        cin >> student2;
        cout << "Enter Student Grade: ";
        cin >> student2Grade;
    
        cout << "Enter Student Name: ";
        cin >> student3;
        cout << "Enter Student Grade: ";
        cin >> student3Grade;
    
        cout << "Enter Student Name: ";
        cin >> student4;
        cout << "Enter Student Grade: ";
        cin >> student4Grade;
    
        cout << "Enter Student Name: ";
        cin >> student5;
        cout << "Enter Student Grade: ";
        cin >> student5Grade;
        // 6 what is this ? 
            // Class AVG 
        float classAvg = CalcAvgClassGrade(student1Grade, student2Grade, student3Grade, student4Grade, student5Grade); //function name was wrong and classAvg was not defined. only 5 arguements will be accepted by this function so the use comma after fifth arguement will cause error
    
        cout << "Class average = " << classAvg; //should use semicolon to stop the statement
    
            // MAX GRADE 
    
        string classMax = getMax(student1Grade, student2Grade, student3Grade, student4Grade, student5Grade, student1, student2, student3, student4, student5); //function name was wrong and classMax was not defined. should use semicolon to stop the statement
    
        cout << classMax << " has the highest grade in the class"; //should use semicolon to stop the statement
    
            // Min Grade 
    
        string classMin = getMin(student1Grade, student2Grade, student3Grade, student4Grade, student5Grade, student1, student2, student3, student4, student5); //function name was wrong and classMin was not defined. should use semicolon to stop every statement
        cout << classMin << " has the lowest grade in the class"; //should use semicolon to stop the statement
    
    }
    

    主要错误已用代码注释。继续工作并改进。 万事如意

    【讨论】:

      【解决方案3】:

      使用数组(向量)和算法:

      #include <algorithm>
      #include <string>
      #include <iostream>
      #include <vector>
      
      float CalcAvgClassGrade(const std::vector<int>& grades)
      {
          const auto sum = std::accumulate(grades.begin(), grades.end(), 0);
          return static_cast<float>(sum) / grades.size();
      }
      
      std::string getMax(const std::vector<int>& grades, const std::vector<std::string>& names)
      {
          auto it = std::max_element(grades.begin(), grades.end());
          return *(names.begin() + std::distance(grades.begin(), it));
      }
      
      std::string getMin(const std::vector<int>& grades, const std::vector<std::string>& names)
      {
          auto it = std::min_element(grades.begin(), grades.end());
          return *(names.begin() + std::distance(grades.begin(), it));
      }
      
      int main()
      {
          std::vector<std::string> students(5);
          std::vector<int> studentGrades(5);
      
          for (int i = 0; i != 5; ++i)
          {
              // Enter Student Names;
              std::cout << "Enter Student Name: ";
              std::cin >> students[i];
              std::cout << "Enter Student Grade: ";
              std::cin >> studentGrades[i];
          }
          const float classAvg = CalcAvgClassGrade(studentGrades);
          std::cout << "Class average = " << classAvg << std::endl;
      
          const std::string classMax = getMax(studentGrades, students);
          std::cout << classMax << " has the highest grade in the class\n";
      
          const std::string classMin = getMin(studentGrades, students);
          std::cout << classMin << " has the lowest grade in the class\n";
      }
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 2020-12-23
        • 2015-10-29
        • 1970-01-01
        相关资源
        最近更新 更多