이것이 자바다 확인문제 (3장 연산자)
1. 연산자와 연산식에 대한 설명 중 틀린 것은 무엇입니까?
1) 연산자는 피연산자의 수에 따라 단항, 이항, 삼항 연산자로 구분된다.
2) 비교 연산자와 논리 연산자의 산출 타입은 boolean(true/false)이다.
3) 연산식은 하나 이상의 값을 산출할 수도 있다.
4) 하나의 값이올 수 있는 자리라면 연산식도 올 수 있다.
답: 3)
연산식은 반드시 하나의 값을 산출한다. 연산자 수가 아무리 많아도 두 개 이상의 값을 산출하는 연산식은 없다.(p.65)
2. 다음 코드를 실행했을 때 출력 결과는 무엇입니까?
1 2 3 4 5 6 7 8 | public class Exercise02 { public static void main(String[] args) { int x = 10; int y = 20; int z = (++x) + (y--); System.out.println(z); } } | cs |
답: 31
p.70
++피연산자 : 다른 연산을 수행하기전에 피연산자의 값을 1 증가시킴
-- 피연산자 : 다른 연산을 수행하기 전에 피연산자의 값을 1 감소시킴
피연산자++ : 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴
피연산자-- : 다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴
=> line5 : (10+1) + 20
3. 다음 코드를 실행했을 때 출력 결과는 무엇입니까?
1 2 3 4 5 6 7 | public class Exercise03 { public static void main(String[] args) { int score = 85; String result = (!(score>90)) ? "가" : "나"; System.out.println(result); } } | cs |
답: 가
p.73
논리 부정 연산자 (!)
!피연산자 : 피연산자가 true이면 false 값 산출. 피연산자가 false이면 true 값 산출
p.100
삼항 연산자
조건식(피연산자1) ? 피연산자2 : 피연산자3
조건식이 true : 연산 결과는 피연산자2
조건식이 false : 연산 결과는 피연산자3
=> line4
score>90 == false
!(score>90) == true
4. 534자루의 연필을 30명의 학생들에게 똑같은 개수로 나누어 줄 때 학생당 몇 개를 가질 수 있고, 최종적으로 몇 개가 남는지를 구하는 코드입니다. ( #1 )과 ( #2 )에 들어갈 알맞은 코드를 작성하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Exercise04 { public static void main(String[] args) { int pencils = 534; int students = 30; // 학생 한 명이 가지는 연필 수 int pencilsPerStudent = ( #1 ); System.out.println(pencilsPerStudent); // 남은 연필 수 int pencilsLeft = ( #2 ); System.out.println(pencilsLeft); } } | cs |
답
#1 : pencils / students
#2 : pencils % students
5. 다음은 십의 자리 이하를 버리는 코드입니다. 변수 value의 값이 356이라면 300이 나올 수 있도록 ( #1 )에 알맞은 코드를 작성하세요(산술 연산자만 사용하세요).
1 2 3 4 5 6 | public class Exercise05 { public static void main(String[] args) { int value = 356; System.out.println( #1 ); } } | cs |
답: value - (value % 300)
6. 다음 코드는 사다리꼴의 넓이를 구하는 코드입니다. 정확히 소수자릿수가 나올 수 있도록 ( #1 )에 알맞은 코드를 작성하세요.
1 2 3 4 5 6 7 8 9 | public class Exercise06 { public static void main(String[] args) { int lengthTop = 5; int lengthBottom = 10; int height = 7; double area = ( #1 ); System.out.println(area); } } | cs |
답: ((double) lengthTop + lengthBottom) / 2 * 7
* 52.5
정확한 소수자릿수까지 산출 결과로 얻고 싶다면 피연산자 중 최소한 하나는 실수 타입이어야 한다. 따라서 1.0을 곱하여 실수 타입으로 만든 후 산술 연산을 하거나 하나의 피연산자를 double 타입으로 강제 타입 변환한 후 산술 연산을 실행한다. (p.77~78)
7. 다음 코드는 비교 연산자와 논리 연산자의 복합 연산식입니다. 연산식의 출력 결과를 괄호( ) 속에 넣으세요.
1 2 3 4 5 6 7 8 9 | public class Exercise07 { public static void main(String[] args) { int x = 10; int y = 5; System.out.println( (x>7) && (y<=5) ); ( ) System.out.println( (x%3 == 2) || (y%2 != 1) ); ( ) } } | cs |
답: true, false
p.92
논리연산자
&& : 피연산자 모두가 true일 경우에만 연산 결과는 true
|| : 피연산자 중 하나만 true이면 연산 결과는 true
line6 : (x>7) == true, (y<=5)== true
line7 : (x%3 == 2) == false, (y%2 != 1) == false
8. 다음은 %연산을 수행한 결과값에 10을 더하는 코드입니다. NaN값을 검사해서 올바른 결과가 출력될 수 있도록 ( #1 )에 들어갈 NaN을 검사하는 코드를 작성하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Exercise08 { public static void main(String[] args) { double x = 5.0; double y = 0.0; double z = x % y; if( #1 ) { System.out.println("0.0으로 나눌 수 없습니다."); } else { double result = z + 10; System.out.println("결과: " + result); } } } | cs |
답: Double.isNaN(z)
좌측피연산자가 정수 타입인 경우 나누는 수인 우측 피연산자는 0을 사용할 수 없다. 만일 0으로 나누면 컴파일은 정상적으로 되지만 실행 시 ArithmeticException이 발생한다.
실수 타입인 0.0 또는 0.0f로 나누면 ArithmeticException이 발생하지 않고, / 연산의 결과는 Infinity 값을 가지며, % 연산의 결과는 NaN(Not a Number)을 가진다.
프로그램 코드에서 /와 % 연산의 결과가 Infinity 또는 NaN인지 확인하려면 Double.isInfinite() 와 Double.isNaN() 메소드를 이용하면 된다. 이 메소드들은 double 타입의 값을 매개값으로 받아서 이 값이 Infinity 또는 NaN이라면 true를 리턴하고, 그렇지 않다면 false를 리턴한다. (p.83~84)