본문 바로가기
솔루션모음/자바 기초부터 하나씩

[자바 기초부터 하나씩/2장 연습문제 솔루션] true or false

by 이얏호이야호 2020. 3. 31.

1.참 또는 거짓

 

만약 거짓이면 이유를 설명하여라.

 

a.만약 xint 형이고 yfloat형이라면, y=x의 대입은 올바르다.

= .

 

b.하나의 문장으로 변수를 선언하고 초기화할 수 있다.

= .

 

c. 문장 x = 2*y = z;는 오류가 발생한다.

= .

 

d. 문장 x = y = 2 * z;는 오류가 발생한다.

= 거짓. z가 선언이 되어있다면 오류가 발생하지 않는다.

 

e. 문장 int byte = 350;은 오류가 발생한다.

= .

 

f. 문장 int byt= 350;은 오류가 발생한다.

= 거짓. int형은 -2,147,483,468에서 2,147,483,467까지 표현 가능하다.

 

g. byte x = 350; 은 오류가 발생한다.

= .

 

h. double 형의 변수는 32비트를 사용하여 저장된다.

= 거짓. 64비트를 사용하여 저장된다.

 

I.두 표현식 3*5/4 와 3.0* 5/4 는 같은 값을 갖는다.

=거짓. 첫 번째 표현식은 3의 값을 갖고 두 번째 표현식은 3.75의 값을 갖는다.

 

j.두 표현식 3*5/53.0*5/5는 같은 값을 갖는다.

=.

 

3.컴파일러실행

 

다음 각 문장에 대하여 구문 오류가 있다면 찾아보아라. 자바 컴파일러에 의해 발생되는 오류 메시지는 무엇인가?

 

a. int wives = sacks = cats = 7;

= 구문오류. sacks,cats의 선언이 되지 않았다.

 

b.int total; total += total=7;

= 구문오류. total의 값이 초기화 되어있지 않으므로 total+=total의 값을 구할 수 없다. 실행을위해선 int total=7; total+=total;이 적절하다.

 

c. int total = 7; total+= total+=7;

= 구문오류x.

 

d. int wives, cats, sacks; wives= sacks= cats=7;

= 구문오류x.

 

e. wives + 1 = wives;

= 구문오류. 우측에서 좌측으로 저장되기 때문에 wives = wives+1;로 고쳐 사용해야한다.

 

f. int x=7.3;

= 구문오류. int형의 선언이 아닌 double형을 선언해야한다.

 

g.System.out.println("Wives; "+ wives);

= 구문오류x.

 

h.System.out.println("Sacks";+sacks);

= 구문오류. 세미콜론의 경우 문장이 끝나는 경우만 사용해야 한다.

 

i.System.out.println(“Man, + wives, + sack, cats and kits: " +total+7);

= 구문오류x.

 

j.System.out.println(Man, + wives, + sack, cats and kits: " +total+"7");

= 구문오류x.

 

4.출력 계산

 

다음의 코드 일부분에 대한 출력을 구하거나 오류를 지적하여라.

 

a. int num=5;

num = num++;

System.out.println(num);

출력=5

 

b. int num = 5;

num = ++num;

System.out.println(num);

출력=6

 

c. int num = 5;

num = num++ = ++num;

System.out.println(num);

오류. num++++num은 같이 선언될 수 없다.

 

d. int num = 5;

num /=3;

System.out.println(num);

출력=1

 

e. int num=5;

System.out.println(num+=5);

출력=10

 

 

f. int num=5:

System.out.println(++num + num ++);

오류. num=5;로 고쳐써야한다.

 

7. 컴파일러 실행

 

다음 대입문 중 올바르게 작성된 것은 어느 것인가?

 

a. long number = 145;

=

 

b. long number = 145.0;

= 거짓

 

c. float pi = 3.14;

= 거짓

 

d. float pi = 314e-2;

= 거짓

 

e. short number = (byte) 120;

=

 

f. short number = (byte) 150;

=

 

g.byte number = 150;

= 거짓

 

h.short number= 150;

=

 

 

i.char letter = 123;

=

 

j. int a; int b = a = 5;

=

 

k. int a; int b=a=5; boolean c= a==b;

=

 

9.표현식

 

만약 a,b,c가 int 형이라면, a*b/ca*(b/c)의 값은 같은 값인가? 그렇지않다면, 어느부분에서 서로 다른지 예제를 제시하여라.

 

= 다른 값이다. a*b/c는 연산자 우선순위에 근거하여 순서대로 a*b/c를 계산하는 반면에 a*(b/c) 는 b/c를 우선적으로 계산 후 a를 곱하기 때문에 값이 다르다.

ex)

public class a{

public static void main(String[] args){

int a=10;

int b=4;

int c=3;

System.out.println(a*b/c);

System.out.println(a*(b/c));

}

}

출력 = 13

10

11.데이터 유형과 표현식

 

byte 형의 변수는 -128에서 127까지의 값을 저장할 수 있다는 사실을 상기하여라. 다음문장

byte x= 127;

x++;

바이트 오버플로우(byte overflow)’를 발생시킨다. 어ᄄᅠᆫ 언어에서는 이것을 오류로 간주하지만 자바는 래핑 어라운드(wrapping around)’에 의한 음수로 x++;를 계산한다. 예를들어, 127 + 1-128이 된다.

다음의 프로그램 일부분에 대한 출력을 구하여라.

 

1.byte x = 127;

2. int y = x;

3. x++;

4. y++;

5.System.out.println(x);

6.System.out.println(y);

 

출력 = -128

128

 

3행을 x=x+1;로 변경하면 구문오류가 발생하는가? 만약 그렇지 않다면 출력은 무엇인가? 4행을 y=y+1;로 변경하면 구문 오류가 발생하는가? 만약 그렇지 않다면 출력은 무엇인가?

 

=3행을 x=x+1;로 변경하면 구문오류O

4행을 y=y+1;로 변경하면 구문오류X

출력 = -128

128

댓글