[Java]자바의 정석 2~3장 변수~연산자 연습문제 풀이

jh5959·3일 전
0

JAVA

목록 보기
2/2

2-5 다음 문장들의 출력결과를 적으세요. 오류가 있는 문장의 경우 괄호 안에 '오류'라고 적으시오

System.out.println("1"+"2") -> "12"
System.out.println(true + "") -> true
System.out.println('A'+'B') -> 131 //65+66=131
System.out.println('1'+ 2) -> 51 //49+2=51
System.out.println('1'+'2') -> 99 //49+50=99
System.out.println('J'+"ava") -> "Java" //문자열+아무타입=문자열
System.out.println(true+null) -> 오류

2-9 다음 중 형변환을 생략할 수 있는 것은?(모두 고르시오)

byte b = 10;
char ch = 'A';
int i = 100;
long l = 1000L;

a. b = (byte)i;
b. ch = (char)b;
c. short s = (short)ch;
d. float f = (float)l;
e. i = (int)ch;

답: d,e

  • 큰 타입에서 작은 타입 변환은 형변환 표기해야 함

2-11 다음 중 변수를 잘못 초기화 한 것은?(모두 고르시오)

a. byte b =256; //byte의 범위(-128~127)를 넘는 값으로 초기화 불가
b. char c =''; //반드시 한개의 문자 필요
c. char answer = 'no'; //두개이상 문자 저장 안됨
d. float f=3.14; //f가 빠지면 3.14d임,f 넣기
e. double d=1.4e3f; //double(8byte)에 float(4byte)을 넣는것으로 가능

답: a,b,c,d

2-13 다음 중 타입과 기본값이 잘못 연결된 것은?(모두)

a. boolean - false
b. char -'\u0000'
c. float - 0.0 //f가 빠짐
d. int - 0
e. long - 0 //l이 빠짐
f. String '' //null이 기본값

답: c,e,f

3-1 다음 연산의 결과를 적으시오

int x = 2;
int y = 5;
char c ='A'; //'A'의 문자코드는 65

sout(1 + x << 33);
sout(y >= 5 || x < 0 && x > 2); 
sout(y += 10 - x++); //x가 3이 됨
sout(x+=2);
sout(!('A' <= c && c <= 'Z'));
sout('C'-c)
sout('5'-'0');
sout(c+1)
sout(++c);
sout(c++);
sout(c);

답:
6
true - 앤드연산자 먼저
13 - 증감연산자는 연산이 다 끝나고 나중에 함
5
false
2
5
66
B
B
C

3-2 아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다. 만일 사과의 수가 123개이고 하나의 바구니에는 10개의 사과를 담을 수 있다면 13개의 바구니가 필요할 것이다. (1)에 알맞은 코드를 넣으시오.

int numOfApples = 123; //사과의 배수
int sizeOfBucket = 10; //바구니의 크기(바구니에 담을 수 있는 사과의 개수)
int numOfBucket = (1) //모든 사과를 담는데 필요한 바구니 수

sout("필요한 바구니의 수" + numOfBucket);

실행결과: 13
답:numOfApples/sizeOfBucket+(numOfApples%sizeOfBucket>0?1:0)

  • 사과를 바구니에 딱 맞게 담는다면(나머지가 0)이면 그냥 그 몫이 답이다
  • 사과를 바구니에 딱 맞게 담고 나머지가 생기면(나머지가 0보다 큼) 바구니 한개가 더 필요
  • 그러면 1를 더함

3.6 아래는 변수 num의 값보다 크면서도 가장 가까운 10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다.예를 들어 24의 크면서도 가장 가까운 10의 배수는 30이다. 19의 경우 20이고 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변수 num의 값이 24라면 6을 결과로 얻어야 한다. (1)에 알맞은 코드를 넣으시오

int num = 24;
sout((1));

실행결과: 6
답: ((num+10)/10*10)-num //내가 쓴 답
답안지 답: 10- num%10
또 다른 답: (num/10+1)*10- num

3.7 아래는 화씨(Fahrenheit)를 섭씨(celcius)로 변환하는 코드이다. 변환공식이 'C=5/9(F-32)'라고 할 때 (1)에 알맞은 코드를 넣으시오. 단 변환 결과값은 소수점 셋째자리에서 반올림해야한다. (Math.round()를 사용하지 않고 처리)

int fahrenheit = 100;
float celcius = ( (1) )

sout("Fahrenheit:" + fahrenheit);
sout("Celcius:" + celcius);

실행결과
Fahrenheit:100
Celcius:37.78

답:(int)((5f/9(fahre-32)100+0.5))/100f

3.8 아래 코드의 문제점을 수정해서 실행결과와 같은 결과를 얻으시오.

byte a = 10;
byte b =20;
byte c = a+b; // (byte)(a+b);

char ch = 'A';
ch = ch + 2; //(char)(ch + 2);

float f = 3 / 2; //3 / 2f
long l = 3000 * 3000 * 3000;//끝 3000에 l 붙이기 3000l

float f2 = 0.1f;
double d = 0.1;

boolean result = d==f2; //(float)d==f2

sout("c="+c)
sout("ch="+ch)
sout("f="+f)
sout("l="+l)
sout("result="+result)

실행결과
c=30
ch=c
f=1.5
l=27000000000
result=true

0개의 댓글