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

C語言實作:學生程式設計成績統計系統(總分、平均、標準差、最高最低分)

     編輯:關於C語言

學生成績統計完整實作

本程式模擬某小組 C++ 程式設計課程的成績統計,功能包含:輸入學生人數與各科成績、計算總分、平均分、標準差(樣本標準差)、最高分與最低分並列出對應學號(索引)。

功能需求

  • 動態輸入學生人數(最多 100 人)。
  • 輸入每位學生成績(浮點數)。
  • 模組化設計:分別實作 total()、average()、deviation()、max_min() 四個函數。
  • 輸出總分、平均、標準差、最高分/最低分及對應學號。

關鍵演算法說明

標準差計算

採用樣本標準差公式:dev = sqrt( Σ(grade[i] - ave)² / (n - 1) ),需引入 <math.h> 使用 sqrt()。

最高/最低分與學號追蹤

先遍歷一次找出最大/最小值,再遍歷第二次記錄所有等於極值的索引,最後格式化輸出(以逗號分隔)。

完整程式碼

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

float total(float grade[], int num);
float average(float sum, int num);
float deviation(float grade[], float ave, int num);
void max_min(float grade[], int num);

int main()
{
    int i, num;
    float sum, ave, dev;
    float grade[100];

    printf("您班上有人?嘻嘻嘻共有:");
    scanf("%d", &num);
    printf("\n");

    for(i = 0; i < num; i++)
    {
        printf("輸入第%2d位同學的成績(按ENTER進入):", i);
        scanf("%f", &grade[i]);
    }

    sum = total(grade, num);
    printf("\n總成績為:%0.2f\n", sum);

    ave = average(sum, num);
    printf("\n平均分為:%0.2f\n", ave);

    dev = deviation(grade, ave, num);
    printf("\n標準差為:%0.2f\n\n", dev);

    max_min(grade, num);

    return 0;
}

float total(float grade[], int num)
{
    int i;
    float sum = 0.0;
    for(i = 0; i < num; i++) sum += grade[i];
    return sum;
}

float average(float sum, int num)
{
    return sum / num;
}

float deviation(float grade[], float ave, int num)
{
    int i;
    float s = 0.0;
    for(i = 0; i < num; i++) s += (grade[i] - ave) * (grade[i] - ave);
    return sqrt(s / (num - 1));
}

void max_min(float grade[], int num)
{
    int i, j = 0, l = 0;
    int max_num[100], min_num[100];
    float max, min;

    max = min = grade[0];
    for(i = 0; i < num; i++)
    {
        if(max < grade[i]) max = grade[i];
        if(min > grade[i]) min = grade[i];
    }

    for(i = 0; i < num; i++)
    {
        if(max == grade[i]) max_num[j++] = i;
        if(min == grade[i]) min_num[l++] = i;
    }

    printf("最高分為:%0.2f\n", max);
    printf("最高分的學號有:");
    for(i = 0; i < j; i++)
    {
        printf("%d", max_num[i]);
        if(i < j - 1) printf(",");
    }
    printf("\n\n");

    printf("最低分為:%0.2f\n", min);
    printf("最低分的學號有:");
    for(i = 0; i < l; i++)
    {
        printf("%d", min_num[i]);
        if(i < l - 1) printf(",");
    }
    printf("\n");
}

執行結果示意

成績統計執行結果

改進建議

  • 加入輸入驗證(如成績範圍 0~100、人數 > 0)。
  • 使用動態記憶體配置 (malloc) 替代固定大小陣列。
  • 標準差計算若為母體標準差,分母應為 n 而非 n-1。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved