게시판
검색 결과: 29
종이와 펜을 준비하고
테스트 케이스
20 40 10 50 30
에 대해서 로직을 분석해봅니다.
반복문에서 i = 0일 때
각 변수의 값을 차례대로 씁니다.
i = 1일 때
각 변수의 값을 차례대로 씁니다.
이렇게 하면 문제의 원인을 찾을 수 있습니다.
이를 좀 더 편하게 하는 방법은 UNIT 6에서 설명한 디버거를 이용하는 겁니다.
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]값만 나옵니다.
무엇이 잘못되었나요?
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;
}
왜 이거는 되는지에 대한 질문 드립니다. 감사합니다.
#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;
}
다음과 같이 코드를 짰는데, 정상적으로 실행되지 않습니다. 어떤 부분을 수정해야 되나요?