如何修复我的最大输出以及如何添加最大和最小数量

How to fix my maximum output and how to add how many maximum and minimum number

所以这是我的代码:

#include <stdio.h>

int main()
{
    float average;
    int i, n, sum = 0, num, min, max;

    printf("Number of Students: ");
    scanf("%d", &n);

    max = min = num;

    for (i = 1; i < (n + 1); i++) {
        printf("Students no: %d\n", i);
        printf("Score: ");
        scanf("%d", &num);

        if (num > max) {
            max = num;
        }

        if (num < min) {
            min = num;
        }

        sum = sum + num;
    }

    average = 1.0*sum/n;

    printf("Average score is %.2f\n", average);
    printf("The highest score is %d\n", max);
    printf("The lowest score is %d\n", min);

    return 0;
}

问题是我的最大输出总是错误的,我不知道我的错误。以及如何添加获得最高分和最低分的学生人数?

在这条线上

max = min = num;

您将所有这些值设置为相同。但是 num 还没有被初始化,所以这是未定义的行为。那时任何事情都可能发生——程序很可能只会继续处理这三个变量的垃圾值。相反,删除此行并像这样初始化变量:

int i, n, sum = 0, num = 0, min = INT_MAX, max = INT_MIN;

min可以设置为最高有效输入。通常你可以将它从 <limits.h> 设置为 INT_MAX 以将其设置为最大可能的值。 maxINT_MIN.

同样

此声明

max = min = num;

没有意义,因为变量num没有初始化。

你的意思如下。我想分数不能是负数。

#include <stdio.h>

int main()
{
    unsigned int n;

    printf( "Number of Students: " );
    scanf( "%u", &n );

    unsigned int min = 0, max = 0, count_min = 0, count_max = 0;
    unsigned int sum = 0;

    for ( unsigned int i = 0; i < n; i++ ) 
    {
        printf("Students no: %u\n", i + 1 );
        printf("Score: ");

        unsigned int num;
        scanf( "%u", &num );

        sum += num;

        if ( i == 0 || max < num ) 
        {
            max = num;
            count_max = 1;
        }
        else if ( !( num < max ) )
        {
            ++count_max;
        }

        if ( i == 0 || num < min ) 
        {
            min = num;
            count_min = 1;
        }
        else if ( !( min < num ) )
        {
            ++count_min;
        }
    }

    float average = n == 0 ? 0.0f : ( float )sum / n;

    printf( "Average score is %3.1f\n", average );
    printf( "The highest score is %u that is had by %u student(s)\n", max, count_max );
    printf( "The lowest score is %u that is had by %u student(s)\n", min, count_min );

    return 0;
}

程序输出可能看起来像

Number of Students: 6
Students no: 1
Score: 1
Students no: 2
Score: 4
Students no: 3
Score: 3
Students no: 4
Score: 2
Students no: 5
Score: 1
Students no: 6
Score: 3
Average score is 2.3
The highest score is 4 that is had by 1 student(s)
The lowest score is 1 that is had by 2 student(s)