### 分组输出学生成绩等级

在编写应用程序时，经常会对一组数据进行统计。例如，给定一组学生成绩，按照不同的分数段统计出 A、B、C、D4 个等级，如图 1 所示。

图 1 等级描述

在程序中我们可以使用 if 语句轻而易举地判断出一个学生成绩属于哪一个等级，但是要将数据分组，输出如图 2 所示的形式，则需要花费一些心思了。

图 2 数据分组输出

下面我们来介绍实例的实现过程。

（1）创建一个控制台应用程序。

（2）定义一个 StatGrades 函数分组统计学生成绩。

void StatGrades(double dblGrades[], int nLen)

{

double *pALevel = new double[nLen]; //记录 A 级学生成绩

double *pBLevel = new double[nLen]; //记录 B 级学生成绩

double *pCLevel = new double[nLen]; //记录 C 级学生成绩

double *pDLevel = new double[nLen]; //记录 D 级学生成绩

int nAIndex = -1, nBIndex = -1, nCIndex = -1, nDIndex = -1; //记录每个等级的成绩数量

for(int i=0; i<nLen; i++) //遍历学生成绩

{

if (dblGrades[i] >= 85) //判断是否为 A 级

{

nAIndex++;

pALevel[nAIndex] = dblGrades[i];

}

else if (dblGrades[i] >= 75) //判断是否为 B 级

{

nBIndex++;

pBLevel[nBIndex] = dblGrades[i];

}

else if (dblGrades[i] >= 60) //判断是否为 C 级

{

nCIndex++;

pCLevel[nCIndex] = dblGrades[i];

}

else //判断是否为 D 级

{

nDIndex++;

pDLevel[nDIndex] = dblGrades[i];

}

}

//输出信息

if (nAIndex > -1) //输出 A 级的成绩

{

cout << endl << "A 级: ";

for(int j=0; j<=nAIndex; j++)

{

cout << pALevel[j] << " ";

}

}

if (nBIndex > -1) //输出 B 级的成绩

{

cout << endl << "B 级: ";

for(int j=0; j<=nBIndex; j++)

{

cout << pBLevel[j] << " ";

}

}

if (nCIndex > -1) //输出 C 级的成绩

{

cout << endl << "C 级: ";

for(int j=0; j<=nCIndex; j++)

{

cout << pCLevel[j] << " ";

}

}

if (nDIndex > -1) //输出 D 级的成绩

{

cout << endl << "D 级: ";

for(int j=0; j<=nDIndex; j++)

{

cout << pDLevel[j] << " ";

}

}

cout << endl;

delete [] pALevel; //释放堆空间

delete [] pBLevel;

delete [] pCLevel;

delete [] pDLevel;

}

（3）在 main 函数中定义一个数组表示学生成绩，然后调用 StatGrades 函数分组统计学生成绩。

int main(int argc, char* argv[])

{

//定义一组学生成绩

double dblGrades[10] = {87, 65, 57, 100, 89, 98, 76, 71, 64, 68};

StatGrades(dblGrades, 10); //调用 StatGrades 函数分组统计

return 0;

}

效果如图 3 所示。

图 3 运行结果