2015-03-30 27 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 
相关问题