JAVA

이것이 자바다 확인문제 (3장 연산자)

atsc 2018. 10. 15. 19:37

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)