2014-05-16 51 views
2

編寫一個程序,反覆要求用戶輸入0 到100之間的數字,直到用戶輸入超出該範圍的值。然後輸出 最接近50.如何檢查數字是否接近特定數字?

例如數:

輸入一個數字:91.3
輸入一個數字:64.4
輸入一個號碼:38.12
輸入一個數字:46.9
輸入數:99.45
輸入一個號碼:103

數最接近50是46.900000

我只學過do,while循環,if和else如果選擇語句。

我知道我需要一個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

所有你需要的是'晶圓廠(50-NUM)',這雖然住在math.h中。 –

+0

使用第一個輸入初始化最接近的數字,並在每次下一個輸入時更新此數字。打印最終結果。如果輸入大於50,新的差異將是(num-50.0),否則新的差異將是(5.0 - num) –

+0

如果你不想包含'math.h',你可以定義你自己的'abs': #define ABS(a)(a)> 0.0? (a): - (a)',但最好只包括'math.h'。順便說一下,'?'和':'形成一個三元運算符。 – ilent2

回答

0

您需要一個額外的變量float ClosestToFifty,它將用statemet進行更新,如下所示。

if (fabs(num - 50.0f) < fabs(ClosestToFifty - 50.0f)) 
{ 
    ClosestToFifty = num: 
} 

ClosestToFifty可以用有效範圍之外的一些價值被初始化,說200.0f

2

這是一個隱藏在編程問題中的數學問題。

要找到最接近的數字,您將獲得兩個數字之間差異的最小絕對值,因此您需要考慮所有數字的差異並記住哪個差異(及其對應的數字)具有最小的絕對值。

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持有的價值,你需要

相關問題