首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言實作:歌星大賽評分系統(去除最高最低分計算平均)

     編輯:關於C語言

評分系統:去極值平均法

本程式模擬歌唱比賽評分機制:10 位評委打分 (1~100),去除一個最高分與一個最低分後,計算剩餘 8 位評委分數的平均值作為最終得分。

問題描述

輸入 10 位評委分數,使用排序法將分數由小到大排列,去除首尾(最低、最高),計算中間 8 分平均,並輸出被去除的最高/最低分、總分與平均分。

演算法步驟

  1. 定義常數 num 10,宣告 float score[10]。
  2. 輸入 10 個分數存入陣列。
  3. 呼叫 sort() 以氣泡排序法由小到大排序。
  4. 累加索引 1 到 8 的分數(去除索引 0 與 9)。
  5. 計算平均 sum / 8 並輸出結果。

完整程式碼

/* 程式標頭註解 */
#include <stdio.h>

#define num 10
void star(void);
void sort(float score[]);

int main()
{
    int i;
    float sum = 0, average;
    float score[10];

    star();
    printf("請輸入每個評委給您打的分數\n");
    for(i = 0; i < num; i++)
    {
        printf("第%2d各評委打的分數為:", i+1);
        scanf("%f", &score[i]);
    }

    sort(score);

    for(i = 1; i < num-1; i++) sum += score[i];
    average = sum / 8;

    printf("\n去掉的最高分為:%0.2f\n", score[num-1]);
    printf("\n去掉的最低分為:%0.2f\n", score[0]);
    printf("\n去掉最高分最低分後,您的總分為:%0.2f\n", sum);
    printf("\n去掉最高分最低分後,您的平均分為:%0.2f\n", average);
    printf("\n哈哈, 謝謝您的合作!\nGOOD BYE!\n");
    star();
    return 0;
}

void sort(float score[])
{
    int i, j;
    float t;
    for(i = 0; i < num; i++)
    {
        for(j = i; j < num; j++)
        {
            if(score[i] > score[j])
            {
                t = score[i];
                score[i] = score[j];
                score[j] = t;
            }
        }
    }
}

void star(void)
{
    int i;
    for(i = 0; i < 60; i++) printf("*");
    printf("\n");
}

執行結果示意

歌星大賽評分執行結果

改進建議

  • 加入分數範圍驗證 (1~100)。
  • 若有多個相同最高/最低分,題目要求「去掉一個」,排序法自然滿足。
  • 可改用 qsort() 標準庫函數簡化排序程式碼。
  • 若不想改變原陣列順序,可複製陣列排序或單次遍歷找最大最小值並累加其餘。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved