如何检查数字是否更接近特定数字?

时间:2014-05-16 05:59:23

标签: c

  

编写一个程序,重复要求用户输入0之间的数字   到100,直到用户输入该范围之外的值。然后输出   最接近50的数字。

     

例如:

     

输入一个数字:91.3
   输入一个数字:64.4
   输入一个数字:38.12
   输入一个数字:46.9
   输入一个数字:99.45
   输入一个数字:103。

     

最接近50的数字是46.900000

我只学习了do,while,for循环,if和else if selection语句。

我理解我需要一个if语句来检查每个数字与50之间的差异,差异越小,数字越接近50.我包括stdlib.h因为我想我需要取绝对值避免负数的差异。 但我不知道如何将这种思想融入代码中。如何编写代码?

#include<stdio.h>
#include<stdlib.h>

int main (void)
{
  float num;
  printf("Enter a number:");
  scanf("%f",&num);

  while (num>=0 && num<=100)
  {
    printf("Enter a number:");
    scanf("%f",&num);
    //I think I would need an if statement here to check the difference
  }
  printf("\nThe closest is %.2f",/*I think I would need a new variable here.*/ );
  return 0;
}

3 个答案:

答案 0 :(得分:4)

这是一个隐藏在编程问题中的数学问题。

要找到最接近的数字,您将获得两个数字之间差异的最小绝对值,因此您需要取所有数字的差异,并记住哪个差异(以及它对应的数字)具有绝对值最小。

答案 1 :(得分:1)

读完每个数字后,找出该数字与50之间的差异。跟踪到目前为止发现的最小差异,并将其与当前差异进行比较。更新最小差异

float result;
float mindiff = 100; // minimum difference, initialize with any value greater than 50
scanf("%f", &num);
while(num>=0 && num<=100)
{
    //check with minimum till now and update accordingly
    if( fabs(num-50) < mindiff)
    {
        mindiff = fabs(num-50);
        result = num;
    }

    //read next number
    printf("Enter a number:");
    scanf("%f",&num);
}

现在result保存您需要的值

答案 2 :(得分:0)

您需要一个额外的变量float ClosestToFifty,它将使用如下状态更新。

if (fabs(num - 50.0f) < fabs(ClosestToFifty - 50.0f) )
{
    ClosestToFifty = num:
}
可以使用有效范围之外的某些值初始化

ClosestToFifty,例如200.0f