编写一个程序,重复要求用户输入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;
}
答案 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
。