콘텐츠로 이동

2단원 숙제: 변수, 기본형, 진법, 형변환

  • 별도 지시가 없으면 모든 코드는 Main.java, 클래스 이름은 Main으로 생각하세요.
  • 출력 예측 문제는 실행 전에 값을 추적해 작성하세요.
  • 컴파일 오류 문제는 오류 여부와 이유를 함께 쓰세요. 오류가 없다면 실행 결과를 쓰세요.
  • 코딩 문제는 Scanner, printf, 형변환을 의도에 맞게 사용하세요.

문제 1. 대입은 오른쪽부터

다음 코드의 각 출력값을 쓰고, a, b가 서로 바뀌는 과정을 세 줄로 설명하세요.

int a = 7;
int b = 12;

a = a + b;
b = a - b;
a = a - b;

System.out.println("a=" + a);
System.out.println("b=" + b);

문제 2. 컴파일러의 관점

각 줄을 독립적으로 보았을 때, 컴파일 오류 여부와 이유 또는 실행 후 값을 쓰세요.

 byte b = 127;
   b = b + 1;

 byte b = 127;
   b = (byte)(b + 1);

 final int MAX = 100;
   MAX = 101;

 float f = 3.14;

문제 3. 리터럴과 진법

다음 선언에서 a, b, c, d타입10진수 값을 쓰세요. 이어서 printf 한 줄의 정확한 출력도 쓰세요.

long a = 3_000_000_000L;
int b = 0xCAFE;
int c = 0b101101;
char d = 65;

System.out.printf("%d / %x / %o / %c%n", c, c, c, d);
변수 타입 10진수 값
a
b
c
d

출력:

문제 4. printf의 폭과 정밀도

다음 코드의 출력에서 대괄호 안 공백까지 정확히 쓰세요. 공백은 ·로 표시해도 됩니다.

int n = 42;
String language = "Java";
double pi = 3.141592;

System.out.printf("[%05d]%n", n);
System.out.printf("[%-6s]%n", language);
System.out.printf("[%.3s]%n", language);
System.out.printf("[%8.3f]%n", pi);

문제 5. Scanner의 입력 버퍼 함정

사용자가 아래처럼 입력했다고 합시다.

20
Kim Java

다음 코드에서 name에 실제로 저장되는 값을 쓰고, Kim Java 전체를 읽도록 최소 한 줄을 추가하여 고치세요.

Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
String name = sc.nextLine();
System.out.println("[" + name + "]");

문제 6. 진법 변환과 표현

  1. 0x2F + 0b1010의 10진수 결과를 구하세요.
  2. 그 결과를 2진수, 8진수, 16진수로 표현하세요.
  3. 0.1011(2)을 10진수로 변환하는 계산식을 쓰세요.

문제 7. 8비트 2의 보수

8비트 byte라고 가정합니다.

  1. -37의 2진 표현을 2의 보수법으로 구하세요.
  2. 그 비트를 16진수로 표현하세요.
  3. -37 + 37을 8비트 덧셈으로 계산할 때, 최종 8비트 결과가 무엇인지 쓰세요. 자리올림은 결과 비트에서 어떻게 되는지도 설명하세요.

문제 8. char는 문자이면서 정수다

다음 코드의 세 출력값과 각 식의 결과 타입을 쓰세요.

char c = '9';
System.out.println((int)c);
System.out.println(c - '0' + 1);
System.out.println((char)('A' + 2));

문제 9. float의 정밀도 손실

다음 코드에서 fback의 값, 그리고 비교 결과를 쓰세요. float로 바꾸었다가 다시 int로 되돌려도 원래 값이 복구되지 않는 이유를 한 문장으로 설명하세요.

int original = 91_234_567;
float f = original;
int back = (int)f;

System.out.printf("f=%.0f%n", f);
System.out.println("back=" + back);
System.out.println(original == back);

문제 10. 명시적/자동 형변환

다음 네 줄의 println 결과를 순서대로 쓰고, ③과 ④의 결과가 다른 이유를 설명하세요.

System.out.println((byte)130);  // ①
System.out.println((int)-3.9);  // ②
System.out.println(5 / 2);      // ③
System.out.println(5 / 2.0);    // ④

문제 11. 직접 코딩 - 1바이트 진법 리포트

0 이상 255 이하의 10진 정수 하나를 입력받아, 아래 형식으로 출력하는 프로그램을 작성하세요.

  • Scanner로 값을 입력받을 것
  • 10진수는 폭 3칸으로, 16진수는 접두사 0x를 포함해 출력할 것
  • 2진수는 반드시 8자리로 출력할 것 (앞자리는 0으로 채움)
  • 16진수와 2진수 변환에는 각각 Integer.toHexString(), Integer.toBinaryString()을 사용할 수 있음

실행 예시

Decimal (0-255): 45
decimal :  45
hex     : 0x2d
binary  : 00101101

문제 12. 직접 코딩 - 입력값의 의미를 지켜라

학생 번호를 입력받아 뒤에 -A를 붙여 출력하는 프로그램을 작성하세요. 학생 번호는 00721처럼 앞에 0이 올 수 있습니다.

  • int가 아니라 String으로 입력받아야 하는지 코드 주석으로 한 줄 설명할 것
  • printf로 아래 형식과 정확히 같게 출력할 것

실행 예시

Student code: 00721
Registered: [00721-A]