【问题标题】:How to fix my maximum output and how to add how many maximum and minimum number如何修复我的最大输出以及如何添加最大和最小数量
【发布时间】:2020-03-08 06:58:32
【问题描述】:

这是我的代码:

#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;
}

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

【问题讨论】:

  • "我的最大输出总是错误的" 为什么?什么是正确的输出?你会得到什么?您的另一个问题似乎不相关,一个线程应该只包含 1 个问题。
  • 你没有在任何地方初始化minmax。行:max = min = num; 应该是:max = 0; min = MAXINT
  • 所以我得到的最大输出是错误的(例如当我输入100,88和89时,它显示最小值为88,平均值为92.33,最大值为4195504,即错了)
  • 好吧,在我将 max = min = num 更改为 max = min = 0 后,我的最低数字总是以某种方式变为 0
  • 欢迎来到 Stack Overflow!请edit您的代码将其减少为您的问题的minimal reproducible example。您当前的代码包含许多与您的问题无关的内容 - 一个最小样本通常看起来类似于一个好的单元测试:只执行一项任务,并为可重复性指定输入值。

标签: c loops for-loop max min


【解决方案1】:

此声明

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)

【讨论】:

    【解决方案2】:

    在这一行

    max = min = num;
    

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

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

    min 可以设置为最高有效输入。通常,您可以将其从&lt;limits.h&gt; 设置为INT_MAX,以将其设置为最大可能值。 maxINT_MIN 也是如此。

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 2018-04-09
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2019-05-23
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多