程序有错,local function definitions are illegal和unexpected end of file found,怎么改

#include <stdio.h>
#include <stdlib.h>
#define SIZE 30  //成绩数组总长度
#define SEGMENTSIZE 11  //分数段总共有0-10,总计11个段
#define FAILURE -1  //返回失败结果
#define SUCCESS 1   //返回成功结果
#define ASCEND 1    //升序
#define DECEND -1   //降序

void main()
{
    //注:数组中有25个学生分数,其中最一个-1表示该元素之前的数组元素值为有效分数。
    int score[SIZE] = { 78,65,23,34,56,87,90,100,45,88,54,95,63,66,89,54,64,77,63,56,0,86,97,94,30,-1 };//给score[1]到score[25]赋初值。
    int i;
    int scoreSegment[SEGMENTSIZE] = { 0 };//此数组用于存放统计各分数段的人数,分数段为0-10
    int stuNumber, maxScore, minScore, searchArrayPosition;
    int searchScore, appendScoreNum, insertScoreNum, result, arrayPossition;
    int order;//排序方向
    float averageScore, medianScore;
    enum Status { GAMEOVER, CONTINUE };
    int choiceNum;
    enum Status gameStatus;

    do
    {

        gameStatus = CONTINUE;
        printf("\n\t\t学  生  成  绩  管  理  系  统  1.3 \n\t\t\tDesigned by HuangX\n");
        printf("\n\t1.统计学生数\t\t\t2.统计分数段人数\n\n");
        printf("\t3.统计最高分\t\t\t4.统计最低分\n\n");
        printf("\t5.统计平均分\t\t\t6.统计中值\n\n");

        scanf("%d", &choiceNum);
        fflush(stdin);//清除键盘缓冲区的数,否则当输入字符时会出现死循环
    
        switch (choiceNum)
        {
        case 0:
            gameStatus = GAMEOVER;
            break;
        case 1:
            int countStuNum(int array[], int length)
            {
            int i, stuNumber = 0;
            for (i = 0; i<length; i++)
            if (array[i] != -1) stuNumber++; //因为数组的结尾是-1,统计非-1的个数
            else break;
            return stuNumber;

            } //countStuNum(int array[],int length)
        
        case 2:
        void countScoreSegment(int array[], int Len, int segment[], int segmentLen)
        {

    //柱状显示各分类段的人数
        printf("\n\t2. 统计显示各分类段的人数\n");
        break;

        }//end countScoreSegment(int array[],int len)
        case 3:
        int countMaxScore(int array[], int len)
        {
        int max = 100;

        return max;
        break;

        }  //countMaxScore(int array[],int len)
        case 4:
        int countMinScore(int array[], int len)
        {
        int min = 0;

        return min;
        break;

        }//end countMinScore(int array[],int len)
        case 5:
        float countAverageScore(int array[], int len)
        {
        int i, sum = 0;

        return (float)sum / len;
        break;

        }//end countAverageScore
    
    }
}

unexpected end of file found
==这是少了大括号啊,不成对
======================
case 4:
int countMinScore(int array[], int len)
怎么会在case里定义函数代码???你到底想实现啥啊?
函数定义都放到main函数外面,case 的地方调用函数就可以了。