'국비교육/문제풀이'에 해당되는 글 3건

  1. 2018.06.28 20180628 연습문제 (ch4)
  2. 2018.06.27 20180627 연습문제 (ch3)
  3. 2018.06.26 20180626 연습문제 (ch2)

[4-1] 다음의 문장들을 조건식으로 표현하라.

1. int형 변수 x가 10보다 크고 20보다 작을 때 true인 조건식

(10<x&&x<20)


2. char형 변수 ch가 공백이나 탭이 아닐 때 true인 조건식

(ch!='\t'&&ch!=' ')


3. char형 변수 ch가 ‘x' 또는 ’X'일 때 true인 조건식

(ch=='x'||ch=='X')


4. char형 변수 ch가 숫자(‘0’~‘9’)일 때 true인 조건식

('0'<=ch&&ch<='9')


5. char형 변수 ch가 영문자(대문자 또는 소문자)일 때 true인 조건식

('A'<=ch&&ch<='Z'||'a'<=ch&&ch<='z')


6. int형 변수 year가 400으로 나눠떨어지거나 또는 4로 나눠떨어지고 100으로 나눠떨어지지않을 때 true인 조건식

(year%400==0||year%4==0&&year%100!=0)


7. boolean형 변수 powerOn가 false일 때 true인 조건식

(powerOn==fasle)


8. 문자열 참조변수 str이 “yes”일 때 true인 조건식

(str=="yes")



[4-2] 1부터 20까지의 정수 중에서 2 또는 3의 배수가 아닌 수의 총합을 구하시오.

int n = 0;

for(int i=1;i<=20;i++) {

if(i%2!=0&&i%3!=0) {

n+=i;

}

}

System.out.println(n);


n==73


[4-3] 1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+10)의 결과를 계산하시오.

int sum=0;

for(int i=1;i<=10;i++) {

for(int j=1;j<=i;j++) {

sum+=j;

}

}

System.out.println(sum);

sum==220



[4-4] 1+(-2)+3+(-4)+... 과 같은 식으로 계속 더해나갔을 때, 몇까지 더해야 총합이 100이상이 되는지 구하시오.


int sum = 0;

int num = 0;

int s = 1;

for(int i=1;sum<100;i++, s=-s) {

num=i*s;

sum+=num;

}

System.out.println(num);


num =199



[4-5] 다음의 for문을 while문으로 변경하시오.

int i = 0;

int j = 0;

while(i<=10){

while(j<=i) {

System.out.print("*");

j++;

}

System.out.println();

i++;

}

}



[4-6] 두 개의 주사위를 던졌을 때, 눈의 합이 6이 되는 모든 경우의 수를 출력하는 프로그램을 작성하시오.

for(int i=1;i<=6;i++) {

for(int j=1;j<=6;j++) {

if(i+j==6) {

System.out.println(i+"+"+j+"="+(i+j));

}

}

}

}



1+5=6

2+4=6

3+3=6

4+2=6

5+1=6

5가지.



[4-7] Math.random()을 이용해서 1부터 6사이의 임의의 정수를 변수 value에 저장하는 코드를 완성하라. (1)에 알맞은 코드를 넣으시오.


public static void main(String[] args) {

int value = ((1))+1;

System.out.println("value:"+value);

}


(int)(Math.random()*6)


[4-8] 방정식 2x+4y=10의 모든 해를 구하시오. 단, x와 y는 정수이고 각각의 범위는

0<=x<=10, 0<=y<=10 이다.

[실행결과]

x=1, y=2

x=3, y=1

x=5, y=0


for(int x=0; x<=10;x++) {
for(int y=0; y<=10;y++) {
if(2*x+4*y==10) {
System.out.printf("x=%d, y=%d%n", x,y);
}
}
}


[4-9] 숫자로 이루어진 문자열 str이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라. 만일 문자열이 "12345"라면, ‘1+2+3+4+5’의 결과인 15를 출력이 출력되어야 한다. (1)에 알맞은 코드를 넣으시오.

[Hint] String클래스의 charAt(int i)을 사용


class Exercise4_9 {

public static void main(String[] args) {

String str = "12345";

int sum = 0;

for(int i=0; i < str.length(); i++) {

sum+=str.charAt(i)-'0';

//문자의 정수 계산은 '0'을 뺀다. 

}

System.out.println("sum="+sum);

}

}

[실행결과]

15



[4-10] int타입의 변수 num 이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코드를완성하라. 만일 변수 num의 값이 12345라면, ‘1+2+3+4+5’의 결과인 15를 출력하라. (1)에 알맞은 코드를 넣으시오.

[주의] 문자열로 변환하지 말고 숫자로만 처리해야 한다.

class Exercise4_10 {

public static void main(String[] args) {

int num = 12345;

int sum = 0;

while(num>0) {

sum+=num%10;

num/=10;

}

System.out.println("sum="+sum);

}

}

[실행결과]

15




[4-11] 피보나치(Fibonnaci) 수열(數列)은 앞을 두 수를 더해서 다음 수를 만들어 나가는 수열이다. 예를 들어 앞의 두 수가 1과 1이라면 그 다음 수는 2가 되고 그 다음 수는 1과 2를 더해서 3이 되어서 1,1,2,3,5,8,13,21,... 과 같은 식으로 진행된다. 1과 1부터 시작하는 피보나치수열의 10번째 수는 무엇인지 계산하는 프로그램을 완성하시오.


public class Exercise4_11 {

public static void main(String[] args) {

// Fibonnaci 수열의 시작의 첫 두 숫자를 1, 1로 한다.

int num1 = 1;

int num2 = 1;

int num3 = 0; // 세번째 값

System.out.print(num1+","+num2);

for (int i = 0 ; i < 8 ; i++ ) {


num3=num1+num2;

num1=num2;

num2=num3;

System.out.print(","+num3);


}

} // end of main

} // end of class

[실행결과]

1,1,2,3,5,8,13,21,34,55



[4-12] 구구단의 일부분을 다음과 같이 출력하시오.

[실행결과]

2*1=2     3*1=3     4*1=4

2*2=4     3*2=6     4*2=8

2*3=6     3*3=9     4*3=12

5*1=5     6*1=6     7*1=7

5*2=10   6*2=12    7*2=14

5*3=15   6*3=18    7*3=21

8*1=8     9*1=9 

8*2=16    9*2=18

8*3=24    9*3=27


public static void main(String[] args) {

int j=2;

for(int i=1;i<=9;i++) {

for(j=1;j<=3;j++) {

int x = j+1+(i-1)/3*3;

int y = i%3==0? 3 : i%3 ; //나머지정리로 3단위 반복

if(x > 9) // 9단까지만 출력

break;

System.out.printf("%d*%d="+x*y+"\t", x,y);

}

System.out.println();

if(i%3==0)

System.out.println();

}


}


[4-13] 다음은 주어진 문자열(value)이 숫자인지를 판별하는 프로그램이다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.


class Exercise4_13

{

public static void main(String[] args)

{

String value = "12o34";

char ch = ' ';

boolean isNumber = true;

// 반복문과 charAt(int i)를 이용해서 문자열의 문자를

// 하나씩 읽어서 검사한다.

for(int i=0; i < value.length() ;i++) {

/*

(1) 알맞은 코드를 넣어 완성하시오.

*/

}

if (isNumber) {

System.out.println(value+"는 숫자입니다.");

} else {

System.out.println(value+"는 숫자가 아닙니다.");

}

} // end of main

} // end of class

[실행결과]

12o34는 숫자가 아닙니다.


(1)   ch=value.charAt(i);

 if(!('1'<=ch&&ch<='9'))

 isNumber=false;


[4-14] 다음은 숫자맞추기 게임을 작성한 것이다. 1과 100사이의 값을 반복적으로 입력해서 컴퓨터가 생각한 값을 맞추면 게임이 끝난다. 사용자가 값을 입력하면, 컴퓨터는 자신이 생각한 값과 비교해서 결과를 알려준다. 사용자가 컴퓨터가 생각한 숫자를 맞추면 게임이 끝나고 몇 번 만에 숫자를 맞췄는지 알려준다. (1)~(2)에 알맞은 코드를 넣어 프로그램을 완성하시오.

class Exercise4_14

{

public static void main(String[] args)

{

// 1~100사이의 임의의 값을 얻어서 answer에 저장한다.

int answer = /* (1) */;

int input = 0; // 사용자입력을 저장할 공간

int count = 0; // 시도횟수를 세기위한 변수

// 화면으로 부터 사용자입력을 받기 위해서 Scanner클래스 사용

java.util.Scanner s = new java.util.Scanner(System.in);

do {

count++;

System.out.print("1과 100사이의 값을 입력하세요 :");

input = s.nextInt(); // 입력받은 값을 변수 input에 저장한다.

/*

(2) 알맞은 코드를 넣어 완성하시오.

*/

} while(true); // 무한반복문

} // end of main

} // end of class HighLow


[실행결과]

1과 100사이의 값을 입력하세요 :50

더 큰 수를 입력하세요.

1과 100사이의 값을 입력하세요 :75

더 큰 수를 입력하세요.

1과 100사이의 값을 입력하세요 :87

더 작은 수를 입력하세요.

1과 100사이의 값을 입력하세요 :80

더 작은 수를 입력하세요.

1과 100사이의 값을 입력하세요 :77

더 작은 수를 입력하세요.

1과 100사이의 값을 입력하세요 :76

맞췄습니다.

시도횟수는 6번입니다.


(1)(int)(Math.random()*100)+1;

(2) if(input<answer) {

System.out.println("더 큰 수를 입력하세요.");

}

if(input>answer) {

System.out.println("더 작은 수를 입력하세요.");

}

if(input==answer) {

System.out.println("맞췄습니다!");

System.out.println("시도 횟수는 "+count+"번 입니다.");

}

[4-15] 다음은 회문수를 구하는 프로그램이다. 회문수(palindrome)란, 숫자를 거꾸로 읽어도 앞으로 읽는 것과 같은 수를 말한다. 예를 들면 ‘12321’이나 ‘13531’같은 수를 말한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.

[Hint] 나머지 연산자를 이용하시오.

class Exercise4_15

{

public static void main(String[] args)

{

int number = 12321;

int tmp = number;

int result =0; // 변수 number를 거꾸로 변환해서 담을 변수

while(tmp !=0) {

/*

(1) 알맞은 코드를 넣어 완성하시오.

*/

}

if(number == result)

System.out.println( number + "는 회문수 입니다.");

else

System.out.println( number + "는 회문수가 아닙니다.");

} // main

}

[실행결과]

12321는 회문수 입니다.


(1)result = result*10 + tmp % 10;

   tmp /= 10;


 y180628.zip



'java > 문제풀이' 카테고리의 다른 글

20180627 연습문제 (ch3)  (0) 2018.06.27
20180626 연습문제 (ch2)  (0) 2018.06.26
Posted by Hearthole
,

[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); 

//32번당 한바퀴. 011 > 0110 = 6

<<연산자가 +연산자보다 우선순위


System.out.println(y >= 5 || x < 0 && x > 2); 

//true||false&&false = true&&fasle = false

true||false&&false = true||false = true 

&&연산자가 ||연산자보다 우선순위


System.out.println(y += 10 - x++);

//y=15-x++ = y=13, x=3 

// y=13출력


System.out.println(x+=2);

//x=4

x=4


System.out.println( !('A' <= c && c <='Z') );

//'A'=65 'Z'=90 c=65 c='A' 이므로 'A'<=c<='Z'식의 부정은 false

System.out.println('C'-c);

//67-65=2


System.out.println('5'-'0');

//같은 실수 문자끼리의 차이므로 5-0 = 5


System.out.println(c+1);

//65에 정수1 추가하여 출력 = 66


System.out.println(++c);

//'A'에서 1증가연산 이후 출력이므로 B


System.out.println(c++);

//'B'문자 출력 후 1증가연산이므로 'B'


System.out.println(c);

//앞서 증가연산 되었으므로 'C'

}

}


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

class Exercise3_2 {

public static void main(String[] args) {

int numOfApples = 123; // 사과의 개수

int sizeOfBucket = 10; // 바구니의 크기(바구니에 담을 수 있는 사과의 개수)

int numOfBucket = ( /*(1)*/ ); // 모든 사과를 담는데 필요한 바구니의 수

System.out.println("필요한 바구니의 수 :"+numOfBucket);

}

}

[실행결과]

13

 (1) numOfApples/sizeOfBucket+1



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

[Hint] 삼항 연산자를 두 번 사용하라.

class Exercise3_3 {

public static void main(String[] args) {

int num = 10;

System.out.println( /* (1) */ );

}

}

[실행결과]

양수


(1) num>=0?(num>0?"양수":"0"):"음수"


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

class Exercise3_4 {

public static void main(String[] args) {

int num = 456;

System.out.println( /* (1) */ );

}

}

[실행결과]

400

(1) num/100*100


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

class Exercise3_5 {

public static void main(String[] args) {

int num = 333;

System.out.println( /* (1) */ );

}

}

[실행결과]

331

(1) num/10*10+1


[3-6] 아래는 변수 num의 값보다 크면서도 가장 가까운 10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다. 예를 들어, 24의 크면서도 가장 가까운 10의 배수는 30이다. 19의 경우 20이고, 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변

수 num의 값이 24라면 6을 결과로 얻어야 한다. (1)에 알맞은 코드를 넣으시오.

[Hint] 나머지 연산자를 사용하라.

class Exercise3_6 {

public static void main(String[] args) {

int num = 24;

System.out.println( /* (1) */ );

}

}

[실행결과]

6

(1) 10-(num%10)


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

class Exercise3_7 {

public static void main(String[] args) {

int fahrenheit = 100;

float celcius = ( /* (1) */ );

System.out.println("Fahrenheit:"+fahrenheit);

System.out.println("Celcius:"+celcius);

}

}

[실행결과]

Fahrenheit:100

Celcius:37.78

(1) (int)((5f/9f*(fahrenheit-32f))*100f+0.5f)/100f



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

class Exercise3_8 {

public static void main(String[] args) {

byte a = 10;

byte b = 20;

byte c = a + b; // (byte)형변환

char ch = 'A';

ch = ch + 2; // (char)형변환

float f = 3 / 2; // f접미사

long l = 3000 * 3000 * 3000; // L접미사

float f2 = 0.1f;

double d = 0.1; 

boolean result = d==f2; // d를 float으로 형변환

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);

}

}

[실행결과]

c=30

ch=C

f=1.5

l=27000000000

result=true



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

class Exercise3_9 {

public static void main(String[] args) {

char ch = 'z';

boolean b = ( /* (1) */ );

System.out.println(b);

}

}

[실행결과]

true

(1) 'a'<= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z'



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

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 to lowerCase:a


(1) 'A'<= ch && ch <= 'Z'

(2) (char)( ch+32 )


y180627.zip



'java > 문제풀이' 카테고리의 다른 글

20180628 연습문제 (ch4)  (0) 2018.06.28
20180626 연습문제 (ch2)  (0) 2018.06.26
Posted by Hearthole
,


[ 연습문제 ]

[2-1] 다음 표의 빈 칸에 8개의 기본형(primitive type)을 알맞은 자리에 넣으시오.


[2-2] 주민등록번호를 숫자로 저장하고자 한다. 이 값을 저장하기 위해서는 어떤 자료형(data type)을 선택해야 할까? regNo라는 이름의 변수를 선언하고 자신의 주민등록번호로 초기화 하는 한 줄의 코드를 적으시오.

int regNo = 910000

long regNo = 9100001234567L

주민번호는 13자리, int값의 범위를 넘음. 그렇기에 롱을 사용하며 접미사L에 주의


[2-3] 다음의 문장에서 리터럴, 변수, 상수, 키워드를 적으시오.

int i = 100;

long l =100L;

final float PI = 3.14f;

- 리터럴 : 100, 100L, 3.14f

- 변수 : i, l

- 키워드 : int, long, final, float

- 상수 : PI

[2-4] 다음 중 기본형(primitive type)이 아닌 것은? b

a. int

b. Byte

c. double

d. boolean

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

System.out.println(“1” + “2”) → ( 12 ) 

// 문자열 1과2 붙여서 출력

System.out.println(true + “”) → ( true ) 

// true를 문자열로 변환하여 출력

System.out.println(‘A' + 'B') → ( 65+66 = 131 ) 

// 문자를 더하였으므로 정수로 변환하여 계산

System.out.println('1' + 2) → ( 49+2 = 51 )

// 문자에 정수를 더하였으므로 문자를 정수로 변환하여 계산

System.out.println('1' + '2') → ( 49+50 = 99 )

// 문자를 더하였으므로 정수로 변환하여 계산

System.out.println('J' + “ava”) → ( J+ava = Java )

// 문자에 문자열을 더하였으므로 문자열로 변환하여 출력

System.out.println(true + null) → ( 오류 )

// 문자타입을 정하여주는 연산자가 없어 오류


[2-6] 다음 중 키워드가 아닌 것은?(모두 고르시오) b,d

a. if

b. True

c. NULL

d. Class

e. System


b,c,d,e

Java 에서는 대소문자를 구별하기 때문에 true는 키워드이지만 True는 키워드가 아니다.


[2-7] 다음 중 변수의 이름으로 사용할 수 있는 것은? (모두 고르시오)  a,d,e,g

a. $ystem

b. channel#5

c. 7eleven

d. If

e. 자바

f. new

g. $MAX_NUM

h. hello@com


[2-8] 참조형 변수(reference type)와 같은 크기의 기본형(primitive type)은? (모두 고르시오) a,d

a. int

b. long

c. short

d. float

e. double


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

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

//char(2 byte) → int(4byte)  이므로 생략가능 


[2-10] char타입의 변수에 저장될 수 있는 정수 값의 범위는? (10진수로 적으시오)

0~65535(2^16-1)


[2-11] 다음중 변수를 잘못 초기화 한 것은? (모두 고르시오) a,b,c,d

a. byte b = 256;

b. char c = '';

c. char answer = 'no';

d. float f = 3.14

e. double d = 1.4e3f;


[2-12] 다음 중 main메서드의 선언부로 알맞은 것은? (모두 고르시오) a

a. public static void main(String[] args)

b. public static void main(String args[])

c. public static void main(String[] arv) 

// 매개변수 args의 이름은 달라도 됨

d. public void static main(String[] args)

e. static public void main(String[] args) 

// public static 과 은 위치가 바뀌어도 됨 


a,b,c,e

[]는 타입 뒤에 붙어도 되고 변수 뒤에 붙어도 됨.

String[] args와 String args[]는 같은 뜻.


[2-13] 다음 중 타입과 기본값이 잘못 연결된 것은? (모두 고르시오) a,c

a. boolean - false

b. char - '\u0000'

c. float - 0.0

d. int - 0

e. long - 0 

// long은 0L이 기본값

f. String - ""

// String은 참조형타입. 모든 참조형타입의 기본값은 null


Java의정석2판_연습문제_답안20130502v1.pdf

java_jungsuk3_연습문제_20170131.pdf



'java > 문제풀이' 카테고리의 다른 글

20180628 연습문제 (ch4)  (0) 2018.06.28
20180627 연습문제 (ch3)  (0) 2018.06.27
Posted by Hearthole
,