小戴同学鸭 2024-06-09 19:24 采纳率: 100%
浏览 4
已结题

我想问下他的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日

悬赏问题

  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词