以下代码是如何确认输入的数字是否在特定范围内的示例。
例如,如果我输入数字 N,那么我想要增量计数器,该计数器表示它是否在以下范围内:
1-10 11-20日 ... 91-100
Here is the code snip from one of the text book:
#define MAXVAL 50
#define COUNTER 11
main ()
{
float value[MAXVAL];
int i, low, high;
static group[COUNTER] = {0,0,0,0,0,0,0,0,0,0,0}
*/READING AND COUNTING*/
for(i=0; i<MAXVAL; i++)
{
/* READING OF VALUES*/
scanf("%f", &value[i]);
/* COUNTING FREQUENCY OF GROUPS */
++group[ (int) (value[i]+0.5)/10] <<< I would like to understand how this will find if number is in specific ranges?
/* PRINTING OF FREQUENCY TABLE */
printf("\n");
printf(" GROUP RANGE FREQUENCY\N\N");
for(i=0; i< COUNTER; i++)
{
low = i*10;
if (i==10)
high =100;
else
high=low + 9;
printf( " %2d %3dto%3d %d)\n", i+1, low,high,group[i]);
}
}
这在上面的 C 程序中会做什么:++group[ (int) (value[i]+0.5)/10]
谢谢
最佳答案
检查组数组的索引:
[(int) (value[i]+0.5)/10]
这实际上获取从控制台输入扫描到的值,加上 0.50,将总和除以 10,然后转换为 int。更好的问题是为什么要这样做?
加上 0.50 是为了四舍五入。如果value[i]
等于或高于 0.50 的边距(例如 1.51, 2.50, 3.99
等),这会强制它到下一个整数( 2.01, 3.00, 4.49
)。
接下来,除以 10。这显然假设输入的值在 0.00 和完全小于 109.50 之间。除以 10 可确保这些值介于 0.00 和 10.00 之间。当然,一旦控制台输入大于 109.50,这将不起作用。
然后强制转换为 (int)。足够直接了。删除浮点上的分数并制造你的整数。
最后,假设输入实际上在 0.00 到小于 109.50 之间,则与 group[] 数组中必要范围匹配的计数器将增加 1。
底线,对于尝试将输入值聚类到组中并在适当的范围内更新计数器来说,这是一个很差的机制,并且一旦输入值> 109.50,它就会阻塞。
关于c - 这在 C 编程中会做什么 :++group[ (int) (value[i]+0. 5)/10],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126083/