책 내용 질문하기
시나공시리즈 2020년 4,5회 대비 모의고사 문제 7번(java) 질문
도서
2021 시나공 정보처리기사 실기
페이지
0
조회수
463
작성일
2021-04-12
작성자
탈퇴*원
첨부파일

안녕하세요

 

프리미엄 존에 2020년 4,5회 대비 모의고사 문제 7번에 대해 질문이 있는데요,

 

문제는 

문제7. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오. (단, 출력문의 출력 서식을 준수하시오.)

 

public class Test{

       public static void main(String[] args)  {

              int x = 13, y = 9, z = 2;

              switch (x ^ y) {

              case 1 : 

              case 2 : 

                       z *= x -= y;

                       break;

              case 3 :

              case 4 :

                        x %= y /= z;

                        break;

              default:

                        x -= y += z;

              }

              System.out.printlkn(x + y + z);

        }

}

 

에서 제가 헷갈리는 부분이 있는데요.

 

case 2번, case4번, default 로 넘어갔을 때 연산을 하는 식에서

 

저는 x 값만 바뀌고 y나 z 값은 위에서 정의한 9와 2로 고정되는 줄 알았습니다.

 

 

예전에 어떤 식에서는 return += a /= 3 뭔가 같은 느낌의 식이 있었는데

거기서는 return 값만  바뀌고 a 값을 새로 정의가 되지 않았던 기억이 남아있습니다.

 

 

x -= y += z;  이런 식은 무조건 x 값과 y 값이 새로 정의가 되는건지 

 

아니면, 상황에 따라 x값만 정의되는 경우가 있는지가 궁금합니다.

만약 상황에 따라 x 값만 정의되는 경우가 있다면 어느 경우에 그렇게 되는지도 알려주시면 감사하겠습니다.

 

 

저는 y값도 새로 정의되는줄 모르고 x 값 1로 바뀌고 y 값 그대로 9 z 값도 2 해서 답이 12인줄 알았었습니다.

답변
2021-04-13 13:47:33

안녕하세요 길벗수험서 운영팀입니다.

 

연산자 적용 시 연산자 우선순위와 결합규칙을 기억해두세요.

 

대입연산자가 사용되었으므로 당연히 우측의 값은 좌측에 전달되어야 합니다.

 

말씀하신 return의 경우 변수 리턴(예약어의 강제 변수화)이라면 a와 return의 값이 변화하는 정상적인 식이지만, 반환하는 예약어인 return이라면 식 자체가 성립되지 않아 의도를 짐작하기 어렵습니다.

 

대입연산자가 사용되어도 값이 적용되지 않는 경우는 아예 조건을 넣어 수행되지 않도록 하는 방법 외에는 떠오르는 것이 없네요.

 

혹여 해당 수식을 직접 문의주시면 확인 후 답변드리겠습니다.

 

행복한 하루되세요 :)

  • 관리자
    2021-04-13 13:47:33

    안녕하세요 길벗수험서 운영팀입니다.

     

    연산자 적용 시 연산자 우선순위와 결합규칙을 기억해두세요.

     

    대입연산자가 사용되었으므로 당연히 우측의 값은 좌측에 전달되어야 합니다.

     

    말씀하신 return의 경우 변수 리턴(예약어의 강제 변수화)이라면 a와 return의 값이 변화하는 정상적인 식이지만, 반환하는 예약어인 return이라면 식 자체가 성립되지 않아 의도를 짐작하기 어렵습니다.

     

    대입연산자가 사용되어도 값이 적용되지 않는 경우는 아예 조건을 넣어 수행되지 않도록 하는 방법 외에는 떠오르는 것이 없네요.

     

    혹여 해당 수식을 직접 문의주시면 확인 후 답변드리겠습니다.

     

    행복한 하루되세요 :)

  • 관리자
    2021-04-19 11:46:48

    안녕하세요 길벗수험서 운영팀입니다.

     

    예, 맞습니다.

     

    b에 5의 값을 저장한 후, a에는 a*b의 값을 저장하라는 의미죠.

     

    bool의 경우 boolean 자료형으로 참(1)/거짓(0)의 값만이 저장됩니다.

     

    행복한 하루되세요 :)

  • *
    2021-04-16 19:22:50

    안녕하세요. 

     

    프로그래밍 언어 영역의 문제를 풀다가 질문 드렸던 비슷한 내용의 문제가 있었는데,

     

    문제 출력 값으로 출력이 되는게 아니어서 확인이 안 되는데  이 경우도 위에 질문드렸던 것처럼 새로 정의가 되는지 봐주시면 감사하겠습니다.

     

     

    #include <stdio.h>

    #include <stdbool.h>

    void main() {

    int a, b;

    bool c, d;

    a = 10; b=0;

    a *= b = 5;

    c = (a != b)

    d = (a == b)

    print("%d, %d, %d, %d", a, b, c, d) 라면

     

    50, 5, 1, 0

     

    이렇게 b 값도 새로 정의가 돼서 5로 출력이 되는 게 맞나요?

     

    그리고 위에 bool c, d 라고 정의된건

    불린으로 참 거짓 값만 나타낸다는 뜻인가요?

     

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.