다음 C 프로그램의 실행 결과를 쓰시오.
#include <stdio.h>
struct Node {
struct Node *next;
unsigned int value;
};
int main(void) {
struct Node n1 = {0, 5u};
struct Node n2 = {0, 7u};
struct Node n3 = {0, 11u};
n3.next = &n2;
n2.next = &n1;
struct Node *cur = &n3;
unsigned int sum = 0;
while (cur) {
sum = sum * 3 + cur->value;
cur = cur->next;
}
sum = (sum ^ 42u) + 100u;
printf("%u", sum);
return 0;
}모범답안
187
풀이와 판단 근거
연결 리스트는 n3(11)→n2(7)→n1(5) 순서다. 반복할 때 sum은 0에서 0×3+11=11, 11×3+7=40, 40×3+5=125로 변한다.
마지막 식에서 125(0x7D)와 42(0x2A)를 비트 XOR하면 87(0x57)이고, 여기에 100을 더해 187이 된다. XOR을 덧셈으로 처리하거나 노드 순서를 n1부터 읽으면 다른 값이 나온다.
자주 틀리는 지점
- 연산자 우선순위나 재귀 반환 순서를 생략하고 눈에 보이는 값만 바로 계산함
- 값 전달·참조 전달, 오버라이딩·오버로딩 또는 배열과 포인터의 차이를 혼동함
- 출력의 공백·줄바꿈·대소문자를 무시해 187와 다른 형식으로 작성함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.