c - 这在 C 编程中会做什么 :++group[ (int) (value[i]+0. 5)/10]

标签 c arrays

以下代码是如何确认输入的数字是否在特定范围内的示例。

例如,如果我输入数字 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/

相关文章:

c - 对本声明的评价

c - 用 C 编写自己的 shell,如何运行 Unix 可执行文件?

复制二进制文件的内容

c - 打印语句的输出是什么?

arrays - 算法 - LinkedIn Coding Round

c++ - 文件是否在另一个应用程序中打开?

c - 作为不同用户的 Kerberos 授权

c - 关于用 C 中的用户输入填充数组的问题

java - 在运行时更改二维数组的列大小

python - 如何省略数组中的某些值