
정답
㉠ malloc(sizeof(listShape))
㉡ current->x_start, current->y_start, current->dx, current->dy, current->line_color
㉢ current->x_start, current->y_start, current->dx, current->dy, current->line_color, current->fill_color
㉣ current = current->next
출제 의도
연결 리스트 노드를 동적 할당하여 삽입하는 방법과, 저장된 노드를 처음부터 끝까지 순회하면서 구조체의 멤버를 사용해 적절한 함수 인자로 넘기는 방법을 이해했는지 평가하는 문제이다.
풀이 과정
새로운 도형 정보를 리스트에 추가하는 add_shape 함수에서 포인터 p는 새로운 노드를 가리켜야 한다. 연결 리스트 노드를 동적으로 생성하려면 malloc을 이용하여 구조체 크기만큼 메모리를 할당해야 하므로
p = (listShape *) malloc(sizeof(listShape));
가 되어 ㉠에는 malloc(sizeof(listShape))가 들어간다.
다음으로 draw_all_shape에서 현재 노드 current가 가리키는 도형의 타입에 따라 적절한 그리기 함수를 호출해야 한다. 직선인 경우(Tshape == 0)에는 draw_line의 매개변수 (x, y, dx, dy, line_color)에 리스트 노드의 멤버를 그대로 넣어 호출한다.
draw_line(current->x_start, current->y_start, current->dx, current->dy, current->line_color);
따라서 ㉡에는 current->x_start, current->y_start, current->dx, current->dy, current->line_color가 들어간다.
상자인 경우(Tshape == 1)에는 draw_box의 매개변수 (x, y, dx, dy, line_color, fill_color)에 대응되게
draw_box(current->x_start, current->y_start, current->dx, current->dy, current->line_color, current->fill_color);
라고 써야 하므로 ㉢에는 current->x_start, current->y_start, current->dx, current->dy, current->line_color, current->fill_color가 들어간다.
마지막으로 while 문에서 리스트 전체를 순회하려면 현재 노드를 처리한 뒤 다음 노드로 이동해야 한다. 따라서
current = current->next;
를 수행해야 하므로 ㉣에는 이 코드가 들어간다.
<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>