2014-04-06 4 views
-2

내 프로그램은 배열 크기 [8]을 만들고 나서 일단 인쇄되면 For 루프를 사용하여 배열에서 가장 작은 숫자를 찾습니다. 내가 가지고있는 문제는 항상 두 번째 요소에서 멈추고 가장 작은 것으로 선언하는 것입니다. 사람이 내 코드에 어떤 문제가 있는지 말해 줄 수배열에서 가장 작은 요소를 찾기위한 루프

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


void main(int argc, char* argv[]) 
{ 
const int len = 8; 
int a[len]; 
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"); 
getchar(); 

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

    } 
} 
} 
이 블록은 당신이 a[i]가 발생하자마자 루프의 돌발하고 의미 if 조건, 같은 시간에 실행됩니다
+3

에 오신 것을 환영합니다. 'C#'와'C++'태그는 무관합니다. [FAQ], [ask] 및 [help]를 시작으로 읽으십시오. –

답변

0

는 다음과 같은 코드에서 몇 가지 실수가 있습니다

1 int 변수는 작은 초기화하기 전에 사용된다. 2- 마지막 for 루프 내부의 논리가 잘못되었습니다.

오른쪽 코드는 다음과 같습니다 스택 오버플로

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"); 

    smallest = a[0]; 

    for (i= 1 ; i < len ; i++) 
    { 
     if (a[i] < smallest) 
     { 
      smallest = a[i]; 
      location = i+1; 
     } 
    } 
    printf("Smallest element is present at location %d and it's value is %d.\n",  location, smallest); 

    getch(); 
} 
+0

나의 주된 실수는 헤더 대신에 For 루프 위에 가장 작은 바로 그 것을 초기화하고 있었다. 위치 변수에 대한 내 선언을 완전히 따라 잡는 것입니다. @AnkitPandey – Zanderg

+0

예, 코드에 약간의 문제가있었습니다. - 1 가장 작은 변수는 사용 전에 초기화해야합니다. for 루프 내부의 로직이 올바르지 않음 잘못된 논리로 잘못된 위치에 브레이크 문이 사용되었습니다. @ user3504208 - user3504208 :-)을 사용하여 이름을 업데이트하십시오. – LearnAndHelp

+0

예,이 프로그래밍을 처음 접했습니다. 그래서 나는 모든 것을 이해하는 데 꽤 오랜 시간이 걸리지 만 나는 그것에 매달려있다. 도와 주셔서 정말 고맙습니다. 내 사용자 이름이 그렇게 이상한 것임을 깨닫지 못했습니다. 감사합니다 @AnkitPandey – Zanderg

0
{ 
    printf("The smallest integer is %d at position %d\n", a[i], i); 
    break; 
    getchar(); 

} 

그 값은 smallest보다 작습니다.

루프를 시작하기 전에 제쳐두고 smallesta[0]과 같게 초기화하려고합니다.

+0

내가 휴식을 사용한 이유는 printf 문을 끊임없이 반복했기 때문이며 내 머리 꼭대기에서 멈출 수있는 유일한 방법 이었기 때문입니다. 단 하나의 실행 후에 전체 프로그램을 멈추고 있다는 것을 깨닫지 못하고 인쇄 한 후에 깨기 시작했습니다. 고마워요 @ 제이슨 – Zanderg

0
Int smallest=a[0]; 
for (int i=1;i<len;i++) 
{ 
    if(a[i]<smallest) 
      Smallest=a[i]; 
} 
+0

내 주요 문제는 내가 휴식을했다고 생각; 첫 번째 두 숫자를 비교하기 위해 한 번 실행되는 즉시 내 코드에서. 원래 작품은 당신이 여기있는 것과 닮았습니다. 고맙습니다 .JunaidShirwani – Zanderg

+0

예 휴식은 문제가 해결되었다는 말을 듣고 좋은 것이 었습니다. 내 대답이 도움이되었다고 생각하면 받아 들일 수 있습니다. –

+0

하나 이상의 대답을 받아 들일 수 있습니까? @JunaidShirwani – Zanderg

관련 문제