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

class Exercise3_1 {
	public static void main(String[] args) {
	int x = 2;
		int y = 5;
		char c = 'A'; // 'A'의 문자코드는 65
		System.out.println(1 + x << 33);
		System.out.println(y >= 5 || x < 0 && x > 2);
		System.out.println(y += 10 - x++);
		System.out.println(x+=2);
		System.out.println( !('A' <= c && c <='Z') );
		System.out.println('C'-c);
		System.out.println('5'-'0');
		System.out.println(c+1);
		System.out.println(++c);
		System.out.println(c++);
		System.out.println(c);
	}
}
6
true
13
5
false
2
5
66
B
B
C

<<는 쉬프트 연산자이고 int는 8*4=32이므로 왼쪽으로 한번 쉬프트 된다.

0011 > 0110 따라서 6을 값으로 가진다.

 

&&연산자 x > 2는 x <0 거짓이므로 y >=5 || (거짓)이 되고 y는 5보다 크므로 참을 반환한다.

 

y += 10 - x++ 은 y = y+10-x++이고 x의 println이 끝나고 연산되므로 y = 5 + 10 - 2 즉 13이 된다.

 

x = x+2인데 위에서 x의 값이 3이 되었으므로 x = 3+2 즉 5가 된다.

 

!(65 <= 65 <= 90) 괄호 안은 참이나,! 가 붙어서 출력되므로 거짓 

 

67-65 = 2

 

53-48=5

 

65+1=66

 

65+1=66 (A 다음의 문자 B가 된다) ' '가없으므로 문자로 출력한다

 

++c은 전열 연산자로 이번 연산에 1을 추가한다 따라서 65+1=66

 

c++은 후열 연산자로 다음 연산에 1을 추가한다 따라서 65

 

위 연산에서 후열 연산자를 사용했으므로 65+1=66 

 

 

 

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

public class Exercise3_2 {
	public static void main(String[] args) {
		int numOfApples = 123; // 사과의 개수
		int sizeOfBucket = 10; // 바구니의 크기(바구니에 담을 수 있는 사과의 개수)
		int numOfBucket = ( /* (1) */ ); // 모든 사과를 담는데 필요한 바구니의 수


		System.out.println("필요한 바구니의 수 :"+numOfBucket1);	//?
		}
}
int numOfBucket =
numOfApples/sizeOfBucket + (numOfApples%sizeOfBucket > 0 ? 1 : 0) ;

풀이 1 사과의 수/바구니 크기 + (사과의 수/나머지가 0이 아니면 1)

int numOfBucket = 
((numOfApples-1)/sizeOfBucket)+1;

풀이 2 (사과의 수 -1) 사과의 수는 어차피 자연수이므로 일의 자리 숫자가 0으로 끝나면 이 식으로 필요한 개수가 출력이 된다.

int numOfBucket1 =
(int)Math.ceil((float)numOfApples / sizeOfBucket);

풀이 3 Math.ceil함수를 사용해서 올림 해서 123/10을 12.3으로 계산한 뒤 13으로 올림 해서 출력한다.

필요한 바구니의 수 :13

결과(공통)

 

 

3-3 아래는 변수 num의 값에 따라 ‘양수’, ‘음수’, ‘0’을 출력하는 코드이다. 삼항 연산자를 이용해서 (1)에 알맞은 코드를 넣으시오.

public class Exercise3_3 {
	public static void main(String[] args) {
		int num = 10;
		System.out.println(/* (1) */);
	}
}
num > 0 ? "양수" : (num < 0 ? "음수" : "0")

(조건식)? (참일 시 실행) : (거짓일 때 실행)

양수

 

 

3-4 아래는 변수 num의 값 중에서 백의 자리 이하를 버리는 코드이다. 만일 변수 num의 값이 ‘456’이라면 ‘400’이 되고, ‘111’이라면 ‘100’이 된다. (1)에 알맞은 코드를 넣으시오.

public class Exercise3_4 {
	public static void main(String[] args) {
		int num = 456;
		System.out.println( /* (1) */ );
	}
}
num/100 * 100

456을 100으로 나누면 소수점은 int타입이라 없어지므로 4가 되고 거기서 다시 100을 곱한다.

400

 

public class Exercise3_4_1 {
	public static void main(String[] args) {
		double num1 = 456;
		double a= Math.floor(num1/100)*100;
		System.out.println(a);
	}
}
400.0

double타입일때 계산법 내림 함수를 이용한다.

 

 

 

3-5 아래는 변수 num의 값 중에서 일의 자리를 1로 바꾸는 코드이다. 만일 변수 num의 값이 333이라면 331이 되고, 777이라면 771이 된다. (1)에 알맞은 코드를 넣으시오.

public class Exercise3_5 {
	public static void main(String[] args) {
		int num = 333;
		System.out.println( /* (1) */ );
	}
}
num/10*10+1

1의 자리를 버리고 1을 더한다.

331

 

public class Exercise3_5_1 {
	public static void main(String[] args) {
		double num1 = 333;
		double n1 = Math.floor(num1/10)*10+1;
		System.out.println( n1 );
	}
}

내림함수를 사용한다.

331.0

 

 

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

public class Exercise3_6 {
	public static void main(String[] args) {
		int num = 24;
		System.out.println((/* (1) */);
	}
}
(num / 10 + 1) * 10 - num)

(1의자리 버림 연산+10)-24

6

 

		System.out.println(10 - (num % 10));

10에서 나머지를 빼버림

6

 

public class Exercise3_6_1 {
	public static void main(String[] args) {
		double num = 24;
		System.out.println((Math.floor(num / 10+1) * 10 - num));
	}
}

함수 사용

6.0

 

 

3-7 아래는 화씨(Fahrenheit)를 섭씨(Celcius)로 변환하는 코드이다. 변환 공식이 'C = 5/9 ×(F - 32)'라고 할 때, (1)에 알맞은 코드를 넣으시오. 단, 변환 결괏값은 소수점 셋째 자리에서 반올림해야 한다.

(Math.round()를 사용하지 않고 처리할 것)

public class Exercise3_7 {
	public static void main(String[] args) {
		int fahrenheit = 100;
		float celcius = ( /* (1) */ );
		System.out.println("Fahrenheit:" + fahrenheit);
		System.out.println(String.format("%.2f", celcius));
	}
}
(int)((5/9f * (fahrenheit - 32))*100 + 0.5) / 100f;

인트의 버림을 이용함

float celcius = 5 / 9f * (fahrenheit - 32);
Fahrenheit:100
37.78

 

 

3-8 아래 코드의 문제점을 수정해서 실행결과와 같은 결과를 얻도록 하시오.

public class Exercise3_8 {
	public static void main(String[] args) {
		byte a = 10;
		byte b = 20;
		byte c = a + b;
		char ch = 'A';
		ch = ch + 2;
		float f = 3f / 2;
		long l = 3000 * 3000 * 3000;
		float f2 = 0.1f;
		double d = 0.1;
		boolean result = d == f2;
		System.out.println("c=" + c);
		System.out.println("ch=" + ch);
		System.out.println("f=" + f);
		System.out.println("l=" + l);
		System.out.println("result=" + result);
	}
}
public class Exercise3_8 {
	public static void main(String[] args) {
		byte a = 10;
		byte b = 20;
		byte c = (byte) (a + b);
		char ch = 'A';
		ch = (char) (ch + 2);
		float f = 3f / 2;
		long l = 3000L * 3000 * 3000;
		float f2 = 0.1f;
		double d = 0.1f;
		boolean result = d == f2;
		System.out.println("c=" + c);
		System.out.println("ch=" + ch);
		System.out.println("f=" + f);
		System.out.println("l=" + l);
		System.out.println("result=" + result);
	}
}

계산은 int형으로 계산하므로 앞에 형 변환을 해줘야 한다.

float이나 long타입으로 계산하고 싶다면 f나 L을 붙여줘야 한다.

double과 float는 부동소수 형태를 받아야 데이터 손실이 나지 않는다.

c=30
ch=C
f=1.5
l=27000000000
result=true

 

3-9 다음은 문자형 변수 ch가 영문자(대문자 또는 소문자)이거나 숫자일 때만 변수 b의 값이 true가 되도록 하는 코드이다. (1)에 알맞은 코드를 넣으시오.

public class Exercise3_9 {
	public static void main(String[] args) {
		char ch = 'z';
		boolean b = (/* (1) */);
	}
}
(ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
true

 

3-10 다음은 대문자를 소문자로 변경하는 코드인데, 문자 ch에 저장된 문자가 대문자인 경우에만 소문자로 변경한다. 문자코드는 소문자가 대문자보다 32만큼 더 크다. 예를 들어 'A‘의 코드는 65이고 ’a'의 코드는 97이다. (1)~(2)에 알맞은 코드를 넣으시오.

public class Exercise3_10 {
	public static void main(String[] args) {
		char ch = 'A';
		char lowerCase = ( /* (1) */ ) ? ( /* (2) */ ) : ch;
		System.out.println("ch:" + ch);
		System.out.println("ch to lowerCase:" + lowerCase);

	}
}
(ch >= 'A' && ch <= 'Z') ? (lowerCase = (char)( ch + 32)) : ch;
ch:A
ch to lowerCase:a

+ Recent posts