게시판

검색 결과: 29

, 이 민규님이 작성
 

결과는 같이나오는데 통과가 안되네요ㅠㅠ

문의한 코드는 삭제합니다.

(도장_ 관리자님이 수정함 - 원문 제출일: 수요일, 17 11월 2021, 3:11 오후)

 


부분 완성형 문제이니까 빈칸에 해당하는 코드만 제출하세요.


 

종이와 펜을 준비하고

테스트 케이스

20 40 10 50 30

에 대해서 로직을 분석해봅니다.

반복문에서 i = 0일 때

각 변수의 값을 차례대로 씁니다.

i = 1일 때

각 변수의 값을 차례대로 씁니다.

이렇게 하면 문제의 원인을 찾을 수 있습니다.

이를 좀 더 편하게 하는 방법은 UNIT 6에서 설명한 디버거를 이용하는 겁니다.


Visual Studio에서 중단점을 그림과 같이 설정하고, 조사식에서 각각의 값을 볼 수 있습니다.
해당 값을 종이에 메모해서 각 단계를 분석하면 현재 작성한 코드의 동작 방식을 이해할 수 있을 것이고, 문제가 되는 부분을 수정할 수 있을 겁니다.

, 서 영우님이 작성
 

for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) {

smallestNumber = numArr[0];

if (numArr[i] < smallestNumber)

smallestNumber = numArr[i];

else

smallestNumber = numArr[0];

}

먼저 smallestNumber를 numArr[0]으로 지정한후

numArr[i]가 smallestNumber보다 작다면

smallestNumber를 numArr[i]로 지정하도록 했습니다만

계속 맨 numArr[0]값만 나옵니다.

무엇이 잘못되었나요?

, Yun Junhyeok님이 작성
 

36.13 심사문제 반복문으로 입력을 받는 구문을 작성중이었는데

scanf("%d ", &numArr[i]);를 하니까 입력을 6개 받고 마지막 입력은 무시하고 

scanf("%d", &numArr[i]);를 하니까 정상적으로 입력을 5개 받고 끝납니다.

혹시 왜 그런걸까요?? scanf 함수의 구동방식에서 나오는 현상일까요? 

, 구 리피님이 작성
 

    for (int i=0;i<sizeof(numArr)/sizeof(int);i++)

    {

        if (numArr[i] < smallestNumber)

            numArr[i] = smallestNumber;

    }

가장 작은 값을 찾아야 하는 문장입니다. 배열 안에 있는 값을 순차적으로 '가장 작은 값으로 설정한 변수'보다 작은지 확인합니다. 만약 이 조건이 참이라면, 그렇다면,  

            numArr[i] = smallestNumber;    이 문구를 반대로 

            smallestNumber = numArr[i];  이렇게 해야 합니다. 이 문장의 의미는 기존의 가장 작은 값보다 더 작은 값을 찾았으니, 더 작은 값을 교체해준다는 것입니다 .방금 전에 비교했던 값을 새롭게 가장 작은 값으로 만들어 주기 위해서.






, 이 재윤님이 작성
 

int main(void)


{


    int numArr[5];


    int smallestNumber;




    scanf("%d %d %d %d %d", &numArr[0], &numArr[1], &numArr[2], &numArr[3], &numArr[4]);


    smallestNumber = numArr[0];



    for (int i=0;i<sizeof(numArr)/sizeof(int);i++)


    {


        if (numArr[i] < smallestNumber)


            numArr[i] = smallestNumber;


    }


    


    printf("%d\n", smallestNumber);




    return 0;


}

이거는 안되는데

#include <stdio.h>


int main(void)

{

    int numArr[5];

    int smallestNumber;


    scanf("%d %d %d %d %d", &numArr[0], &numArr[1], &numArr[2], &numArr[3], &numArr[4]);


    smallestNumber = numArr[0];


    for (int i = 0; i < 5; i++)

    {

        if (smallestNumber > numArr[i])

            smallestNumber = numArr[i];

    }


    printf("%d\n", smallestNumber);


    return 0;

}

왜 이거는 되는지에 대한 질문 드립니다. 감사합니다.

, 이 재윤님이 작성
 
초기화를 해도 안됩니다.
, 구 리피님이 작성
 

smallestNumber  이 변수를 다른 배열 값과 비교하려면 한 번은 초기화를 해줘야 할 것 같네요. 


, 이 재윤님이 작성
 

#include <stdio.h>


int main(void)

{

    int numArr[5];

    int smallestNumber;


    scanf("%d %d %d %d %d", &numArr[0], &numArr[1], &numArr[2], &numArr[3], &numArr[4]);


    for (int i=0;i<sizeof(numArr)/sizeof(int);i++)

    {

        if (numArr[i] < smallestNumber)

            numArr[i] = smallestNumber;

    }

    

    printf("%d\n", smallestNumber);


    return 0;

}

다음과 같이 코드를 짰는데, 정상적으로 실행되지 않습니다. 어떤 부분을 수정해야 되나요?