1

在你的作业 1 中,你将编写一个程序来生成你班上所有学生的成绩,并计算分布。假设如下:

(1) 你班的学生人数是[131, 162]之间的随机数。(2) 每个学生的成绩是[10, 100]之间的一个随机整数。(3) 如果等级在[10, 59],字母等级为F;如果等级在[60, 74],字母等级为C;如果等级在[75, 84],字母等级为B;如果等级在[85, 100],字母等级为A。 (4) 你应该计算最高等级(点等级,不是字母等级)和最低等级(点等级)。(4) 对于您的最终输出,请打印以下内容: -- 有(4) 对于您的最终输出,请打印以下内容: --我班<-- A 的 B 的 CS F——最高等级是!-- 最低等级是 * *!

请注意,您需要替换这些*替换为您从程序中生成的数字。可以在附件中找到示例输出的屏幕截图;请注意,其中的数字只是随机生成的。

我很难完成这个作业的第一部分,你必须在指定的范围内生成 # 名学生。

这就是我正在做的

    int randomN;
randomN = rand()% 31+131;

它显然给了我一个数字。我在实现时遇到的问题是将这个数字放入一个从 1 到出现的随机数的数组中。我以前用过 MATLAB,在那里你会做类似 x = 1:randomN 的事情,它会生成一个数组。我如何在 C++ 上做到这一点?如果你必须使用循环,你能给我一些提示吗?谢谢你。

4

3 回答 3

0

创建一个在给定范围内生成随机数的函数。您可以在网上找到很多,尽管您似乎几乎拥有它:

//return random number from min to max, 
//but not including max, i.e in range [min,max)
int randN(const int min, const int max)
{ 
  return rand() % (max-min)+min; 
}

以上在随机性方面存在一些问题,但对于这个项目来说不是一个大问题。现在您可以像这样调用该函数:

//generate random number from 10 to 100
const int randomGrade = randN(10,101); 
const int randomNumberOfStudents = randN(131,163); 
于 2013-06-02T23:47:29.380 回答
0

想出一个伪代码算法:

  1. 计算N131-162 之间的学生人数
  2. A分配一个大小为 ,的数组N
  3. 对于 i=0-(N-1),生成g10-100 之间的等级
  4. A[i] = g;

或在代码中:

//assumes that you have a helper method `myRandomGen` that takes 
//a min and max value
int numberOfStudents = myRandomGen(131,162);
int* grades = new int[numberOfStudents];
for(int i = 0; i < numberOfStudents; ++i) {
   grades[i] = myRandomGen(10,100);
}


// do something with the array, then free up the memory
delete[] grades;
于 2013-06-03T00:01:42.987 回答
-1
int randomN = rand() % 32 + 131;
std::vector<int> grades;

for (int i = 0; i < randomN; ++i)
    grades.push_back(rand() % 91 + 10);
于 2013-06-02T23:43:00.793 回答