这将在C编程中起什么作用:++;组[(int)(值[i]&x2B;0.5)/10]
以下代码是如何确认输入的数字是否在特定范围内的示例 例如,如果我输入数字,比如说N,那么我需要递增计数器,该计数器表示它是否在以下范围内: 1-10 11-20 ... 91-100这将在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]=
以下是其中一本教科书中的代码片段:
#定义最大值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];