C++ 歌手大奖赛计分系列

/*
 *歌手大奖赛计分系列
 *(1)在歌手大奖赛中,有10个评委为参赛的选手打分,分数为0~10分(运行时由人控制)。
 *    选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
 *(2)将计算选手成绩的功能(包括输入成绩、计算和显示结果)利用一个函数void calScore(int n)实现。
 *    为增大函数的适用面,有评委人数由函数的参数n决定(这样,在main函数调用时,需要将评委人数作为实参)。
 *(3)进一步完善(2)的程序。输入时,难免有录入错误发生,如果输入的成绩不在0-10之间,
 *   要求用户立即重新输入(在函数calScore中修改);
 *   一次运行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,
 *   提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输入的不是N或n,
 *   可以为下一位选手计算成绩(在main函数中进行控制即可)。
 */
void callScore(int n)
{
    cout<<"大赛有 "<<n<<"  位评委"<<endl;
    if(n<=0)
    {
        return;
    } 

    float *aScore = new float[n];
    int i=1; 

    while(i<=n)
    {
        cout<<"第 "<<i<<" 位评委的分数(0.00-10.00): "<<endl;
        cin>>aScore[i-1]; 

        // 出错处理,防止输入非数字字符。
        if (cin.fail()) 
        {
            cin.clear();
            cin.ignore();
            continue;
        }
        if(aScore[i-1] < 0 || aScore[i-1] > 10)
        {
            cout<<"输入的成绩不再0-10之间,重新输入!"<<endl;
            continue;
        }
        i++;
    } 

    //去掉一个最高分,去掉一个最低分
    float max = 0;
    float min = aScore[0];
    float sum = 0;
    float score = 0;
    for(int j=0;j<n;j++)
    {
        aScore[j] >= max?max=aScore[j]:max;
        aScore[j] >= min?min:min=aScore[j];
        sum+=aScore[j];
    } 

    //最后得分
    cout<<"去掉一个最高分: "<<max<<endl;
    cout<<"去掉一个最低分: "<<min<<endl; 

    score=(sum-max-min)*1.0/n;
    cout<<"选手最后得分: "<<score<<endl;
}
void main()
{
	char ch;
	while(true)
	{
		cout<<"按任意键计算选手的成绩,退出请选择N(n):";
		cin>>ch;
		if(ch=='N'||ch=='n')
		{
			break;
		}
		callScore(5);
	}
}
C++ 歌手大奖赛计分系列_第1张图片



你可能感兴趣的:(C++,函数,C++开发,歌手大奖赛,深入体验)