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. 진법 변환과 표현¶
0x2F + 0b1010의 10진수 결과를 구하세요.- 그 결과를 2진수, 8진수, 16진수로 표현하세요.
0.1011(2)을 10진수로 변환하는 계산식을 쓰세요.
문제 7. 8비트 2의 보수¶
8비트 byte라고 가정합니다.
-37의 2진 표현을 2의 보수법으로 구하세요.- 그 비트를 16진수로 표현하세요.
-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의 정밀도 손실¶
다음 코드에서 f와 back의 값, 그리고 비교 결과를 쓰세요. 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]