显示与数组中最大数字相关的名称
Displaying the name related to the highest number in the array
我正在空白,想不出如何显示数组中等级最高的人的姓名。这是我的代码,除了显示最高等级的名称外,它还起作用,当它到达该部分时它会崩溃。
#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];
希望这能解决您的问题。
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 数组/c++中的大量数字
- 遍历并行数组以确定C++中的最大数字
- 整数区间(或 int 数组)中每个数字的出现次数
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 获取 2D 数组 c++ 中的所有数字对
- 为什么使用数组元素查找最大数字的程序不起作用?
- 如何从向量或数组中选择最常见的数字?(前五名)C++
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 以十为基数的数字到布尔数组,该数组要求二进制/基数为 2 的数字
- C++ 检查结果数组中有多少次数字
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 如何在C++中有效地将数字值重新分配给字符数组
- 查找数组中的最小数字
- 查找数组中重复(重复)数字的索引
- 我必须找到给定数组中所有数字的周期,就像有很多解决方案,但数组的大小是 10^5
- 类、数字/数组或对象中的对象