带鱼儿6 2024-06-09 19:24 采纳率: 100%
浏览 5
已结题

我想问下他的max_x=max到下面循环为啥max-=1,max的值不是我输入每个下标的元素吗,假如输入三个人的分数,max里面是1还是3呢

printf("请输入学生人数:");

do{
    scanf("%d",&num);
    if(num<1 || num>NUMBER)
    {
        printf("请输入1~%d之间的整数:",NUMBER);
    }
}while(num<1 || num>NUMBER);

printf("请输入%d人的分数。\n",num);
for(i=0;i<num;i++)
{
    printf("%d号:",i+1);
    do{
        scanf("%d",&score[i]);
        if(score[i]<0 || score[i]>100)
        {
            printf("请输入0~100之间的整数:");
        }
    }while(score[i]<0 || score[i]>100);
    scattergram[score[i]/10]++;
}

max=scattergram[0];
for(i=1;i<11;i++)
{
    if(scattergram[i]>max)
    {
        max=scattergram[i];
    }
}

max_x=max;
for(i=0;i<max_x;i++)
{
    for(j=0;j<11;j++)
    {
        if(max>scattergram[j])
        {
            printf("    ");
        }
        else
        {
            printf("*   ");
        }
    }
    putchar('\n');
    
    max -= 1;
}

printf("--------------------------------------------\n");

for(i=1;i<=11;i++)
{
    printf(" %d ",(i-1)*10);
}

putchar('\n');

return 0;
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-09 19:25
    关注

    引自免费微信小程序:皆我百晓生

    在给定的C语言代码片段中,max变量用于追踪scattergram数组中最大频率的数值。scattergram数组记录了分数段(每段10分)内学生分数的分布情况。

    max_x被设置为max的值时,它保存了数组中的最大频率。随后的循环:

    for(i=0;i<max_x;i++)
    {
        // ...
        max -= 1;
    }
    

    这个循环的目的在于可视化scattergram数组中的数据。通过逐行打印星号(*),从最大频率开始,逐渐减少直到0,形成了一个直方图。每次迭代,max都减1,这确保了下一行的星号数量比上一行少,从而创建了一个下降的直方图效果。

    例如,如果scattergram的最大频率为5,那么max_x也将是5。在这个例子中,循环将执行5次,每次打印的星号数量依次为5、4、3、2、1。这是因为每次迭代,max都会减1,而max用于决定当前行是否应该打印星号。

    为了更清晰地理解这一点,让我们考虑一个具体的例子。假设有10名学生的分数分布如下:

    • 分数在0-9之间:2人
    • 分数在10-19之间:1人
    • 分数在20-29之间:3人
    • 分数在30-39之间:0人
    • 分数在40-49之间:2人
    • 分数在50-59之间:1人
    • 分数在60-69之间:0人
    • 分数在70-79之间:1人
    • 分数在80-89之间:0人
    • 分数在90-99之间:0人

    那么scattergram数组将会是:[2, 1, 3, 0, 2, 1, 0, 1, 0, 0]

    在这个示例中,scattergram的最大频率是3(即scattergram[2]),因此maxmax_x都将初始化为3。接下来的循环将产生如下输出:

    *   *   *   *   *   
    *   *   *       *   
    *   *           *   
                    *   
    --------------------------------------------
     0  10  20  30  40  50  60  70  80  90 100 
    

    在这个输出中,可以看到每一行的星号数量从最多3个递减到最少1个,直观地展示了学生分数的分布情况。

    综上所述,max变量在循环中减1是为了动态调整直方图的高度,确保每一行的星号数量正确反映scattergram数组中对应频率的大小。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月17日
  • 已采纳回答 6月9日
  • 创建了问题 6月9日