1. 연산자와 연산식에 대한 설명 중 틀린 것은 무엇입니까? ① 연산자는 피연산자의 수에 따라 단항, 이항, 삼항 연산자로 구분된다. ② 비교 연산자와 논리 연산자의 산출 타입은 boolean (true/fale)이다. ③ 연산식은 하나 이상의 값을 산출할 수도 있다. ④ 하나의 값이 올 수 있는 자리라면 연산식도 올 수 있다.
<정답> ③ 연산식은 하나 이상의 값을 산출할 수도 있다.
<문제풀이> 연산식은 반드시 하나의 값을 산출한다.
2. 다음 코드를 실행했을 때 출력 결과는 무엇입니까?
<예상결과> -9
<정답>
<문제풀이>
int 타입의 변수 x의 값은 10, y의 값은 20이다. 변수 z는 변수 x, y에 대한 연산식의 결과값을 가지게 되는데 ++x는 변수 x에 대한 선위증감식이므로 x의 값은 11이 되고, 변수 y에 부호 연산자 (-)가 연산되어 -20의 값을 가지게 된다.
11 + (-20)을 연산하면 -9이고, 변수 z를 Line8에서 출력했을 때 출력값 또한 -9인것을 확인할 수 있다.
3. 다음 코드를 실행했을 때 출력 결과는 무엇입니까?
<예상결과> 가
<정답>
<문제풀이>
위의 코드는 삼항연산자의 출력 결과를 묻는 문제이다. 삼항연산자는 " (데이터 타입) (변수명) = (조건식) ? 결과값1 : 결과값2 "의 형식을 갖는데, 조건식을 만족하면 결과값1을 출력하고, 조건식을 만족하지 않으면 결과값2를 출력하게 된다.
String 타입의 변수 result의 조건식은 (!(score>90))인데, 이를 논리연산하면 (score<=90)이 되고, 'score가 90점이 큰 경우'가 아니다라는 조건식이다.
결과적으로는 score가 90보다 작거나 같은 경우를 조건으로 해석할 수 있고, 90보다 작거나 같으면(이하) "가"를 출력, 90보다 크면(초과) "나"를 출력하는 조건식이다. score의 값은 85이므로 '90보다 작거나 같다'라는 조건을 만족하기 때문에 "가"를 출력하게 된다.
4. 534자루의 연필을 30명의 학생들에게 똑같은 개수로 나누어 줄 때 학생당 몇 개를 가질 수 있고, 최종적으로 ㄹ몇 개가 남는지를 구하는 코드입니다. ( #1 )과 ( #2 )에 들어갈 알맞은 코드를 작성하세요.
<정답> #1 : pencils / students
#2 : pencils - (pencilsPerstudents * students)
<문제풀이>
534자루의 연필을 30명의 학생들에게 똑같은 개수로 나누어 줄 때 학생 한 명이 가지는 연필수는 (총 연필 수 / 학생 수) 연산의 정수값이 될 것이고, int 타입의 변수에 값을 저장하면 소수점 이하는 자동으로 생략되기 때문에 pencils / students 로 간단하게 계산할 수 있다. 그리고 남은 연필 수는 (총 연필 수) - ( 학생 한 명이 가지는 연필 수 * 학생 수)로 계산할 수 있기 때문에 pencils - (pencilsPerSudents * students)로 연산하여 계산할 수 있다.
5. 다음은 십의 자리 이하를 버리는 코드입니다. 변수 value의 값이 356이라면 300이 나올 수 있도록 ( #1 )에 알맞은 코드를 작성하세요 (산술 연산자만 사용하세요).
<정답> value/100*100
<문제풀이>
변수 value는 int 타입의 정수이기 때문에 10의 자리 이하를 버리기 위해 100으로 나누어주면 정수값인 3만 남게된다. 그리고 다시 100을 곱해주면 십의 자리 이하는 버려진 300의 결과값을 구할 수 있다. 예를 들어 일의 자리 수를 버리는 코드를 작성하려면 value / 10 * 10 으로 출력할 수 있다.
6. 다음 코드는 사다리꼴의 넓이를 구하는 코드입니다. 정확히 소수자릿수가 나올 수 있도록 ( #1)에 알맞은 코드를 사용하세요.
사다리꼴의 넓이는 (윗변 + 아랫변) * 높이 * 1/2 을 연산하여 구할 수 있다. 그런데 윗변, 아랫변, 높이의 데이터 타입은 모두 int형이고, 정확한 소수자릿수가 나올 수 있도록 double 타입으로 연산하여야 한다. 그런데 int 타입은 double 타입보다 더 작은 크기의 데이터 타입이므로 강제 타입 변환을 하지 않아도 double 타입으로 자동 변환되고, 곱해지거나 나눠지는 수를 double 타입으로 연산하면 double 타입으로 소숫자리까지 연산할 수 있기 때문에 (lengthTop + lengthBottom) * height * 0.5 로 대입하여 계산해주면 된다. 또는(lengthTop + lengthBottom) / 2.0으로 대입해주어도 연산 결과는 동일하다.
7. 다음 코드는 비교 연산자와 논리 연산자의 복합 연산식입니다. 연산식의 출력 결과를 괄호( ) 속에 넣으세요.
<예상결과>
true, false
<정답> true, false
<문제풀이>
비교연산자는 true, false를 결과값으로 갖는 boolean 타입으로 출력된다. 또한 논리연산자 &&는 '그리고', ||는 '또는'의 의미를 가지는데 (1)에서는 비교연산의 결과가 모두 참이기 때문에 true가 출력되고, (2)에서 비교연산의 결과가 모두 거짓이기 때문에 false가 출력된다.
8. 다음은 % 연산을 수행한 결과값에 10을 더하는 코드입니다. NaN 값을 검사해서 올바른 결과가 출력될 수 있도록 ( #1 )에 들어갈 NaN을 검사하는 코드를 작성하세요.
<정답> #1 : Double.isNaN()
<문제풀이>
NaN 값을 검사하는 방법은 "데이터 타입.isNaN(변수명)"으로 isNaN() 메소드를 활용하면 간단하게 확인해 볼 수 있다.
z는 double 타입의 실수이므로 Double.isNaN(z) 로 NaN 값을 검사할 수 있다. 데이터 타입은 첫글자를 대문자로 입력하고, 풀네임을 활용해야한다. (예: int -> Integer)