답이 이상한거같습니다
p *= i 를 하면 p = 1 * 0 이되서 p = 0이 되므로 뭘곱해도 0이 나오기 때문에 답은 0 이 아닌가요?
안녕하세요 길벗수험서 운영팀입니다.
switch문의 각 case에서 p의 초기값은 서로 다릅니다.
+-의 경우 초기값으로 0을
/*의 경우 초기값으로 1을 주고 있습니다.
때문에 p*=i의 경우 p = p*i가 되어 p= 1*i를 저장하게 되죠.
행복한 하루되세요 :)
-
관리자2019-10-04 10:45:02
안녕하세요 길벗수험서 운영팀입니다.
switch문의 각 case에서 p의 초기값은 서로 다릅니다.
+-의 경우 초기값으로 0을
/*의 경우 초기값으로 1을 주고 있습니다.
때문에 p*=i의 경우 p = p*i가 되어 p= 1*i를 저장하게 되죠.
행복한 하루되세요 :)
-
관리자2019-10-07 10:45:49
안녕하세요 길벗수험서 운영팀입니다.
먼저 for문의 기본식이 어떠한 순서대로 수행되는지 떠올려 보세요.
for(①; ②; ③) {
④;
}
위의 for문이 ④를 3회 반복한다고 가정했을 때, 순서는
1회 : ①, ②(조건 참), ④
2회 : ③, ②(조건 참), ④
3회 : ③, ②(조건 참), ④
종료 : ③, ②(조건 거짓) <탈출>
입니다.
이제 해당 for문을 보죠.
for (int i = 0; i < 5; i++, p *= i);
여기서는 for문이 반복해야 하는 ④가 존재하지 않고, ③이 2개로 늘어났습니다. (이것을 ⑤라고 가정하죠)
for(①; ②; ③, ⑤);
이 형태로 볼 수 있죠. 순서는 다음과 같습니다.
1회 : ①, ②(조건 참)
2회 : ③, ⑤, ②(조건 참)
3회 : ③, ⑤, ②(조건 참)
4회 : ③, ⑤, ②(조건 참)
5회 : ③, ⑤, ②(조건 참)
종료 : ③, ⑤, ②(조건 거짓) <탈출>
보시면 초기값(①)이 부여된 후(i=0), 실행할 코드가 없으니 2회로 넘어갈 때 증가식(③, ⑤)이 수행되는데 순서대로 수행하게 되면, i++(i=1), p *= i(p=1)이 됩니다. (③에서 i가 1이되면서 p=p*1이 됩니다.)이렇게 종료까지 총 5회 i가 1~5까지의 값이 곱으로 p에 누적되게 되죠.for문의 기본 수행 순서를 정확하게 알고 계시면, 3개의 식이 어떻게 변형되도 순서대로만 수행해주면 어렵지 않게 답을 도출할 수 있습니다.행복한 하루되세요 :) -
*2019-10-04 13:28:42
네 답변해주신 그내용은 이미 인지하고있습니다
제가 설명은 잘못했는거같습니다
28번 문제를 보시면 switch (c[3]) 이니깐 '*'인데 case 안에 없어서 default에 가서 실행을 하면되는데
일단 첫번째 제가 어렵다고 생각한것은 처음보는 for구문 입니다. 증감식 뒤에 한개의 식이 더 있어서 생소했습니다.
더군다나 p=1이라서 p *= i 를 하면 p=p*i -> p=1*0 이므로 p=0이라서 그뒤에 반복문을 이행해도 p가 0이기 떄문에 저는 프린트 출력을 해서 답을 0으로 적었는데 답이 틀려서 건의드렸습니. 일단 답지의 내용이 전혀이해가 안됩니다....