프로그래밍의 기초(의사 코드 트레이스)

요소 수 n인 배열 a에서 값 x를 찾아, 찾은 인덱스를 i에 구하는 다음 프로그램이 있다. 배열의 인덱스는 1부터 시작한다. and와 or는 왼쪽 식만으로 결과가 정해질 때는 오른쪽 식을 평가하지 않는다. 【a】에 넣을 조건식 중, x가 a 안에 없을 때 범위 밖의 a[n + 1]을 참조해 버리는 것은?

integer: i ← 1
while (【a】)
  i ← i + 1
endwhile
  1. Aa[i] ≠ x and i ≦ n
  2. Bi ≦ n and a[i] ≠ x
  3. Cnot (i > n or a[i] = x)
정답과 해설 보기

정답: A. a[i] ≠ x and i ≦ n

x가 a 안에 없으면 i는 n + 1까지 늘어난 후 조건을 판정합니다. i ≦ n and a[i] ≠ x에서는 왼쪽의 i ≦ n이 false이므로 오른쪽의 a[i]는 평가되지 않아 범위 밖을 참조하지 않습니다. not (i > n or a[i] = x)도 i > n이 true인 시점에서 or의 결과가 정해지므로 a[i]를 평가하지 않습니다. a[i] ≠ x and i ≦ n은 범위를 확인하기 전에 a[n + 1]을 평가해 버립니다. 단락 평가에 의존할 때는 범위 확인을 왼쪽에 씁니다.

이 분야 연습하기 분야로 돌아가기

프로그래밍의 기초(의사 코드 트레이스)의 다른 문제

  1. 실수형 값은 IEEE 754 배정밀도(binary64)로 나타내며, 덧셈 결과는 가장 가까운 표현 가능한 값으로 반올림한다. 다음 프로그램을 실행한 후의 c의 값은?
  2. 클래스 Counter는 인스턴스마다 정수형 멤버 변수 count(생성 시 0)를 가지며, 메서드 inc()는 자신의 count에 1을 더한다. 다음 프로그램을 실행한 후의 x의 값은?
  3. 클래스 Counter는 인스턴스마다 정수형 멤버 변수 count(생성 시 0)를 가지며, 메서드 inc()는 자신의 count에 1을 더한다. Counter형 변수에는 인스턴스 자체가 아니라 인스턴스에 대한 참조가 들어간다. 다음 프로그램을 실행한 후의 x의 값은?
  4. 다음 프로그램에서 x와 y의 값을 교환할 생각으로 대입문 2개를 작성했다. 실행한 후의 x와 y의 값의 조합은?
  5. 세 변수의 값을 차례로 보내는 다음 프로그램을 실행한 후의 a, b, c의 값의 조합은?