这将在C编程中起什么作用:++;组[(int)(值[i]&x2B;0.5)/10]

这将在C编程中起什么作用:++;组[(int)(值[i]&x2B;0.5)/10],c,arrays,C,Arrays,以下代码是如何确认输入的数字是否在特定范围内的示例 例如,如果我输入数字,比如说N,那么我需要递增计数器,该计数器表示它是否在以下范围内: 1-10 11-20 ... 91-100 以下是其中一本教科书中的代码片段: #定义最大值50 #定义计数器11 主要() { 浮点值[MAXVAL]; int i,低,高; 静态组[计数器]={0,0,0,0,0,0,0,0,0,0,0} */阅读和计数*/ 对于(i=0;ium)类似的情况: 假设组[0]=0->10,组[1]=11->20,组[2]=

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

例如,如果我输入数字,比如说N,那么我需要递增计数器,该计数器表示它是否在以下范围内:

1-10 11-20 ... 91-100

以下是其中一本教科书中的代码片段:
#定义最大值50
#定义计数器11
主要()
{
浮点值[MAXVAL];
int i,低,高;
静态组[计数器]={0,0,0,0,0,0,0,0,0,0,0}
*/阅读和计数*/

对于(i=0;ium)类似的情况:

假设
组[0]=0->10,组[1]=11->20,组[2]=21->30..
以浮动为例:
10.3

应用那里的公式,
10.8/10~=1
。因此它在10->20范围内

再举一个例子:22.4


应用那里的公式,
(22.4+0.5)/10~=22.9/10=2
。因此它在
20->30
范围内,依此类推。它将适用于
高=100
低=0
检查组数组的索引:

[(int) (value[i]+0.5)/10]
这有效地从控制台输入中获取扫描的值,加上.50,将总和除以10,然后转换为整数。更好的问题是为什么要这样做

加上0.50是为了说明舍入。如果
值[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)。足够直截了当。从浮点数中去掉分数并生成int

最后,假设输入实际上介于0.00和小于109.50之间,则与组[]数组中所需范围匹配的计数器将增加1

总之,将输入值分组并在适当范围内更新计数器的机制很差,一旦输入值大于109.50,它就会阻塞。

++group[(int)(值[i]+0.5)/10]
已被禁用

  • 取浮点输入值
    值[i]
  • 将其四舍五入为整数
    (int)(值[i]+0.5)
  • 然后除以10得到一个组索引,然后
  • 将1
    ++组[…]
    添加到它所属的组
换句话说,它是计算介于0..9、10..19、20..29、…100..109、110..119之间的值的数量

此代码是完全不安全的。如果输入值大于计数器*10或负值,则会写入随机的内存字节。请扔掉此代码或对其进行一些安全检查

编辑

安全检查,忽略超出范围的输入值

int g = (int) (value[i]+0.5) /10]
if (0 <= g && g < COUNT)
  ++group[g];
intg=(int)(值[i]+0.5)/10]

如果(00),让我们将其分解以了解它

++组[(int)(值[i]+0.5)/10]
读为: 我想将组数组的索引增加1。 哪个指数? 它在某种程度上取决于用户输入的值(值[i]) 为什么要加0.5呢? 对浮点数进行四舍五入。更具体地说,取该数的ceil() 为什么要除以10? 因为你们的团队都是10人

例如: 用户输入11。 值[i]=11(浮动) 11+0.5=11.5(浮动) 11.5/10=1.15(浮动) 类型转换1.15到int=1(int) ++组[1],将组[1]增加1,并显示11属于组1,即10-19

另一个例子: 用户输入9。 值[i]=9(浮动) 9+0.5=9.5(浮动) 9.5/10=0.95(浮动) 类型转换0.95到int=0(int) ++组[0],将组[0]增加1,并显示9属于组0,即0-9

另一个例子: 用户输入9.1。 值[i]=9.1(浮动) 9.1+0.5=9.6(浮动) 9.6/10=0.96(浮动) 类型转换0.95到int=1(int) ++组[1],将组[1]增加1,表明9.1属于组1,即10-19

注:
根据代码,您的分组是0-9、10-19…而不是1-10、11-20

,如果数字是10.5呢?您的范围有差距。您应该对答案进行投票,因为没有人会回答未来的答案。在++组[(int)(值[i]+0.5)/10]中使用(int)有什么用?转换为整数?@user1504633将双精度转换为整数。数组不接受双精度/浮点值作为下标,即在组[i]处增加值那么,最好的方法是什么呢?我必须定义各种范围,并逐一进行比较,以将它们放入适当的范围内?@user1504633只要对值[]的输入值进行范围检查,以确定它们的用途(将索引放入已知的固定数组中),整个操作就可以按编写的方式进行。使用前请检查边界。是的,比较一些数组可以,但如果范围增加,则会出现问题。实际上,我认为我了解了使用要点,或者可能是类似的逻辑,这里我初始化了数组以计算值是否在特定范围内……例如,如果值在0到10范围内,则9+0.5=9.5/10=0.95四舍五入到0或1,由++组递增…同样,如果值为19,则19+0.5=19.5/10为1.9,四舍五入到1,并使数组值的位置递增。因此,当我检查0-10或11-20中的数字时,我将检查组数组位置0和1处的值…听起来合适吗?@user1504633听起来像like你现在可能明白了。范围是[0.00,9.50]、[9.50,19.50]、[19.50,29.50]等等……虽然是[99.50,109.50]。请注意,这些范围上的所有尾值都是独占的,而这些范围的所有头值都是包含的。有任何关于改进或逻辑的建议吗?所以++组[1]实际上在增加存储在位置1中的值
int g = (int) (value[i]+0.5) /10]
if (0 <= g && g < COUNT)
  ++group[g];