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;
我想问下他的max_x=max到下面循环为啥max-=1,max的值不是我输入每个下标的元素吗,假如输入三个人的分数,max里面是1还是3呢
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在给定的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]),因此max和max_x都将初始化为3。接下来的循环将产生如下输出:* * * * * * * * * * * * * -------------------------------------------- 0 10 20 30 40 50 60 70 80 90 100在这个输出中,可以看到每一行的星号数量从最多3个递减到最少1个,直观地展示了学生分数的分布情况。
综上所述,
max变量在循环中减1是为了动态调整直方图的高度,确保每一行的星号数量正确反映scattergram数组中对应频率的大小。本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报 编辑记录解决 1无用