문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> typedef struct { char name[10]; int value; float ratio; } DataSet; int main() { DataSet data[4] = {{"A", 15, 1.5}, {"B", 25, 2.0}, {"C", 10, 0.8}, {"D", 20, 1.2}}; DataSet *ptr = &data[1]; int result = 0; for (int j = -1; j <= 2; j++) { if ((ptr + j)->value % 5 == 0 && (ptr + j)->ratio > 1.0) { result += (ptr + j)->value * (int)(ptr + j)->ratio; } } printf("%d", result); return 0; }
정답
85
85
해설
ptr은 data[1]을 가리킨다. 반복문에서 j가 -1, 0, 1, 2일 때 각각 data[0], data[1], data[2], data[3]을 확인한다.
- data[0]: value=15, ratio=1.5 → 15 * (int)1.5 = 15 * 1 = 15
- data[1]: value=25, ratio=2.0 → 25 * (int)2.0 = 25 * 2 = 50
- data[2]: value=10, ratio=0.8 → ratio > 1.0 조건 불만족
- data[3]: value=20, ratio=1.2 → 20 * (int)1.2 = 20 * 1 = 20 따라서 최종 결과는 15 + 50 + 20 = 85이다.