2014-09-26 6 views
1

그래서 저는 메신저가 정말 답답한 느낌입니다. 그냥 내가 무엇을 놓치고 있는지 정확히 파악할 수 없습니다. 이 프로그램은 배열에 임의의 숫자를 채운 다음 실행하여 가장 작은 숫자를 찾습니다. 가장 작은 번호를 찾으면 위치와 함께 인쇄합니다. 가장 작은 정수를 찾으려면 내 for 루프에 문제가 있습니다.가장 작은 정수 찾기

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

void main(int argc, char* argv[]) 
{ 
    const int len = 8; 
    int a[len]; 
    int smallest; 
    int location =1; 
    int i; 

    srand(time(0)); 

    //Fill the array 
    for(i = 0; i < len; ++i) 
    { 
     a[i] = rand() % 100; 
    } 

    //Print the array 
    for (i = 0; i < len; ++i) 
    { 
     printf("%d ", a[i]); 
    } 
    printf("\n"); 

    //Find the smallest integer 
    smallest = a[0]; 
    for (i = 1; i < len; i++) 
    { 
     if (a[i] < smallest) 
     { 
      smallest = a[i]; 
      location = i++; 
     } 
     printf("The smallest integer is %d at position %d\n", smallest, location); 
     getchar(); 
    } 
} 
+0

참고 :'int location = 1;은'int location = 0;이어야합니다. else'a [0]'는 절대로 작을 수 없습니다. – chux

답변

2

문제는 이것이다 :

이 줄은 실제로 당신이 루프에 사용되는 인덱스가 i 값을 변경하기 때문에 일부 요소가 생략되어
location = i++; 

- 기본적으로 절반 건너 뜁니다 .

location = i + 1; 
//or location = i, 
//depending on whether you want to print the location as 0-based or 1-based 
+0

또한 결과 인쇄는 –

+0

루프 외부에 있어야합니다. 나중에 제거하려고 시도했지만 문제를 해결하지 못하는 것 같습니다. 내가 얻을 수있는 모든 것은 첫 번째 위치의 정수가 항상 가장 작다는 것입니다. @Peter Peo Guo – Zanderg

0

당신은 두 가지 문제가 있습니다

당신은 아마의 변경없이 값을 간단한 임무를 수행하는 다음과 같은 무언가를 원했다. 하나는 answerPete Pei Guo으로 올바르게 식별됩니다. 내 돈을 위해 정확한 픽스는 location = i;이지만보고 할 내용에 따라 다릅니다.

다른 문제는 사용자의 printf() 호출이 반복되고 있다는 것입니다. 당신이 있어야합니다

smallest = a[0]; 
for (i = 1; i < len; i++) 
{ 
    if (a[i] < smallest) 
    { 
     smallest = a[i]; 
     location = i; 
    } 
} 
printf("The smallest integer is %d at position %d\n", smallest, location); 
getchar(); 

나는 getchar() 신경 쓰지 것입니다,하지만 난 GUI/IDE 개발을 사용하는 사람들을 알고는 프로그램이 종료해서 사라지는 창을 방지하기 위해 그것을 필요로하는 경향이있다.

관련 문제