课程设计2 歌手大赛计分系统

Copyright (c) 2016 烟台大学计算机与控制工程学院
All rights reserved.
文件名称:test.cpp
作者:何定钦
完成日期:2017年1月1日
题目描述:
    (1)在歌手大奖赛中,有n位评委为参赛的选手打分,分数为0~10分(运行时由人输入)。
    选手最后得分为:去掉一个最高分和一个最低分后其余分数的平均值。请编写一个程序,完成相关的功能。
    要求利用一个函数void calScore(int n),对一位选手成绩的输入成绩、计算和显示实现,其中n为评委人数。
    这样,在main函数调用时,需要将输入的评委人数n作为实参。
    (2) 进一步完善(1)的程序。输入时,难免有录入错误发生,如果输入的成绩不在0-10之间,
    要求用户立即重新输入(在函数calScore中修改);一次运 行程序只计算一位选手成绩太麻烦,
    要求输出当前选手的最后得分后,提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输
    入的不是N或n,可以为下 一位选手计算成绩(在main函数中进行控制即可)。
输入:
    输入n以及各位评委的给分。
输出:
    去掉的最高分及最低分以及最后得分
样例输入:
    对于(1):
    7 10 9 8 7 6 5 4
    对于(2):
    7 0 9 8 7 6 8 10
    g -1 -9 -7 89 8 7 6 7 8 6 10 n
 样例输出:
    对于(1):
    10.00  4.00
    7.000
    对于(2):
    10.00  0.00
    7.600
    10.00 6.00
    7.200
分析(1):
#include <stdio.h>
#include <stdlib.h>

void calScore(int n);
/*功能:
输入评委人数,调用函数*/
int main()
{
    int n;   /*评委人数*/
    printf("输入评委人数:");
    scanf("%d",&n);
    calScore(n);
    return 0;
}
/*功能·:
计算出评委给出的分的最高分和最低分以及歌手最后得分*/
void calScore(int n)
{
    int i;
    float score,last_score;  /*评委给分以及最后得分*/
    float max=0,min=10;     /*最高分和最低分*/
    float sum=0;        /*评委给出的分的总和*/
    printf("请输入选手的成绩(0-10)\n");
    for(i=0;i<n;i++)
    {
        printf("第%d位评委给分:",i+1);
        scanf("%f",&score);
        sum=sum+score;   /*累加每次的给分*/
        if(score>max)     
            max=score;
        if(score<min)
            min=score;
    }
    last_score=(sum-max-min)/(n-2);  /*计算最后得分*/
    printf("去掉一个最高分:%.2f,去掉一个最低分:%.2f\n",max,min);
    printf("当前选手的最后得分是:%.3f",last_score);
    return;
}
分析(2):
#include <stdio.h>
#include <stdlib.h>

void calScore(int n);
/*功能:
可计算多位歌手的得分*/
int main()
{
    int n;   /*评委人数*/
    char judge;  /*判断是否计算下一个歌手的字符常量*/
    printf("输入评委人数:");
    scanf("%d",&n);
    do
    {
        calScore(n);   /*调用函数*/
        printf("按 N 或者 n 退出,按其他键继续计算下一位歌手的成绩:\n");
        fflush(stdin);  /*清除缓冲区*/
        judge=getchar();
    }
    while(judge!='n' && judge!='N');  /*输入非N或n时计算下一个歌手的得分*/
    return 0;
}
/*功能:
计算最高分,最低分及最后得分*/
void calScore(int n)
{
    int i;
    float score,last_score;   /*评委给分以及最后得分*/
    float max=0,min=10;         /*最高分和最低分*/
    float sum=0;                 /*评委给出的分的总和*/
    printf("请输入选手的成绩(0-10)\n");
    for(i=0; i<n; i++)
    {
        printf("第%d位评委给分:",i+1);
        scanf("%f",&score);
        while(score<0 || score>10)
        {
            printf("第%d位评委给分:",i+1);
            scanf("%f",&score);
        }
        sum=sum+score;    /*累加每次的给分*/
        if(score>max)
            max=score;
        if(score<min)
            min=score;
    }
    last_score=(sum-max-min)/(n-2);    /*计算最后得分*/
    printf("去掉一个最高分:%.2f,去掉一个最低分:%.2f\n",max,min);
    printf("当前选手的最后得分是:%.3f\n",last_score);
    return;
}

结果(1):


结果(2):


知识点总结:

运用了计算和的方法以及找最大值及最小值的方法。

心得体会:

一直卡在为下一位歌手怎么样计分的地方,最后才发现需要先清除缓冲区才可以再输入下一个字符。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值