2015-03-30 86 views
1

我的代碼的目標是獲得數組和整數之間兩個最接近的差異。這是我的代碼。如何在數組中找到兩個最接近的整數和數字之間的差異

#include <stdio.h> 
int main() 
{ 
int kilometre, exit_gas[7]={90,95,116,150,300,377,677},i,distance; 
distance=(kilometre-exit_gas[0]); 
printf("Enter your kilometre reading:"); 
scanf("%d",&kilometre); 
for(j=1;j<8;++j){ 
    if(abs(kilometre-exit_gas[j])<distance){ 
     distance=abs(kilometre-exit_gas[j]); 
     printf("%d\n",distance); 
    } 
} 
return 0; 
} 

我的代碼,它發現differnce betweeen陣列中的所有數字和整數(公里)的問題。例如,如果公里是299以上代碼的輸出是:

204 
183 
149 
1 

所需的輸出應該是:

149 
1 

我知道我得到204 183,因爲他們也滿足了限制if(abs(kilometre-exit_gas[j])<distance)所以如何我應該修改我的限制以獲得期望的結果嗎?

+1

你打印出每次你找到一個更好的比賽時間距離值。將'printf()'移到for()循環後面的某處,所以你只打印最終結果,而不是所有的中間結果。 – 2015-03-30 20:59:28

+3

'distance =(kilometer-exit_gas [0]);'讀取未初始化的「kilometre」。 (也許'abs'丟失了。) – AlexD 2015-03-30 20:59:39

+1

@yushay bohra我還沒有理解你是如何得到這個結果的:204 183 149 1 – 2015-03-30 21:04:04

回答

1

我還沒有理解你如何得到你的文章中顯示的結果,因爲我得到了另一個結果。儘管如此,該程序可以採用以下方式。

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

int main(void) 
{ 
    int exit_gas[] = { 90, 95, 116, 150, 300, 377, 677 }; 
    const size_t N = sizeof(exit_gas)/sizeof(*exit_gas); 
    size_t i; 
    int kilometre; 
    unsigned int first, second; 

    printf("Enter your kilometre reading: "); 
    scanf("%d", &kilometre); 

    for (i = 0; i < N; i++) 
    { 
     unsigned int distance = abs(kilometre - exit_gas[i]); 
     if (i == 0 || distance < first) 
     { 
      if (i != 0) second = first; 
      first = distance; 
     } 
     else if (i == 1 || distance < second) 
     { 
      second = distance; 
     } 
    } 

    printf("%u\n", first); 
    printf("%u\n", second); 

    return 0; 
} 

我的程序的輸出是

1 
78 
相關問題