显示与数组中最大数字相关的名称

Displaying the name related to the highest number in the array

本文关键字:数字 数组 显示      更新时间:2023-10-16

我正在空白,想不出如何显示数组中等级最高的人的姓名。这是我的代码,除了显示最高等级的名称外,它还起作用,当它到达该部分时它会崩溃。

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
const int STUDENTS = 5;
string studentGrade[STUDENTS] = { "Amanda Baynes", "Victor Hughes", "Scott Collins", "Lori Macbeth ", "Manny Lopez  " };
int grades[STUDENTS], count, highest;
highest = grades[0];
for (count = 0; count < STUDENTS; count++)
{
    cout << "Enter score for student " << (studentGrade[count]) << ": ";
    cin >> grades[count];
}
cout << endl;
for (count = 0; count < STUDENTS; count++)
{
    for (count = 0; count < STUDENTS; count++)
        cout << studentGrade[count] << setw(10) << right << grades[count] << endl;
}
for (count = 0; count < STUDENTS; count++)
{
    if (grades[count] > highest)
        highest = grades[count];
    studentGrade[count] = highest;
}
cout << "The highest score " << highest << " is obtained by " << studentGrade[count] << endl;

return 0;
}
studentGrade[count] = highest;
如果你试图向你的橡皮鸭

解释这行代码,你的橡皮鸭会问你一个问题。鉴于:

1)此行在循环的每次迭代中执行,它不在紧接前面的if语句中。

2)studentGrade是学生名字的数组,

3)highest是迄今为止的最高分。

你的橡皮鸭会希望你解释为什么你试图用迄今为止遇到的最高分替换每个学生的名字。你能回答这个问题吗?

除了这是错误的方法之外,首先,它甚至没有意义。

您不想用任何东西替换每个学生的名字。你只想知道哪个学生的分数最高。这些代码所做的只是找到最高分,但它没有跟踪哪个学生拥有它。

highest = grades[0];

这通过假设学生 #0 得分最高来开始滚动。这是一个非常合理和合乎逻辑的起点。但你也必须记住,分数最高的是学生#0。因此,您还必须跟踪它:

int highest_student=0;

现在,当您搜索最高分时,除了记录最高分外,您还必须记录哪个学生得分最高:

for (count = 0; count < STUDENTS; count++)
{
    if (grades[count] > highest)
    {
        highest = grades[count];
        highest_student = count;
    }
}

而现在,在结束时,得分最高的学生将是学生#highest_student

你的橡皮鸭不会再问你不舒服的问题(比如你到底想用什么来替换所有学生的名字)。

你用这条线跑掉了数组的末尾

cout << "The highest score " << highest << " is obtained by " << studentGrade[count] << endl;

当它到达此行时,count大于studentGrade数组的长度。

解决问题的最简单方法是使用一个单独的变量来跟踪与最高等级关联的名称。然后打印它而不是studentGrade[count](不确定你甚至想在这里做什么)。

同样highest = grades[0];这样初始化这个变量将导致未定义的行为(这里的思维过程是什么?),因为grades是未初始化的。您应该将其设置为某个具体值,例如 0 .

首先,请注意,在将成绩输入数组之前,您将grades[0]的值放入名为 highest 的变量中,这在某些情况下可能会被证明是错误的。

现在,考虑 if 语句

if (grades[count] > highest)
    highest = grades[count];
studentGrade[count] = highest; //this is a syntax error
                              //since base type of the array
                             //gradeStudent is String and that of
                            //variable highest is int

您确实在变量 highest 中获得了最高等级,但语句studentGrade[count] = highest首先在语法上不正确,其次,即使它在语法上是正确的,每次在循环中都会执行(因为它在 if 语句之外:您可能忘记将其放在 if 语句的大括号内),从而弄乱(试图弄乱)等级数组的值。

我建议使用以下逻辑:将相应数组中学生的姓名和成绩按顺序排列,获取成绩数组中最高值(即最高成绩)的index,即最高成绩所在的数组中的位置。获得最高分的学生的指数也是如此。

请考虑下面的代码。

/* get the input of grades in grades array */
highest = 0; //assuming that highest grade lies at index 0
for(count = 0; count < STUDENTS; count++){
    if(grades[count] > grades[highest])
        highest = count;
}
cout << "The student with the max grade is " << studentGrade[highest];

希望这能解决您的问题。