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

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

10 < x && x < 20

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

ch != ' ' || ch != "\t"

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 == false

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

str.equals("yes")



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


class Exercise4_2 {

	public static void main(String[] args) {

		int sum = 0;

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

			if(i%2!=0 && i%3!=0) //i 2 3 sum i . 가 또는 의 배수가 아닐 때만 에 를 더한다

				sum +=i;

		}

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

	} // main

}


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


class Exercise4_3 {

	public static void main(String[] args) {

		int sum = 0;

		int total = 0;

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

			sum +=i;

			total += sum;

		}

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

	} // main

}


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


class Exercise4_4 {



	public static void main(String[] args) {

		int op = 1;

		int i=0;

		for(int sum=0; sum<100;) {

			++i;

			sum +=i*op;

			op = -op;

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

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

		}

		System.out.println("최종 i="+i);

		

		int sum = 0;

		i = 0;

		op = 1;

		while (sum<100) {

			++i;

			sum += i*op;

			op = -op;

		}

		System.out.println("최종 i="+i);

	} // main

}


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

[연습문제]  /ch4/Exercise4_5.java


class Exercise4_5 {

	public static void main(String[] args) {

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

			for(int j=0; j<=i; j++)

				System.out.print("*");

			System.out.println();

		}

		

		int i = 0;

		while (i<=10) {

			++i;

			int j = 0;

			System.out.println();

			while (j<i) {

			j++;

			system.out.print("*");

		}

		System.out.println("최종 i="+i);

	} // main

}


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

<pre class="brush: java">

class Exercise4_6 {

public static void main(String[] args) {

/* int ir = (int)(Math.random()*6+1);

int jr = (int)(Math.random()*6+1);*/

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

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

if (i+j==6) {

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

}

}

}

}

}

</pre>



[4-7] Math.random() 1 6 value 을 이용해서 부터 사이의 임의의 정수를 변수 에 저장하는

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

[연습문제]  /ch4/Exercise4_7.java

<pre class="brush: java">

class Exercise4_7 {

public static void main(String[] args) {

int value = (int)(Math.random()*7);

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

}

}

</pre>




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

<pre class="brush: java">

class Exercise4_8 {

public static void main(String[] args) {

for (int x = 0; x < 11; x++) {

for (int y = 0; y < 11; y++) {

if (2*x+4*y==10) {

System.out.println("x="+x+", y="+y);

System.out.println("2*"+x+" + 4*"+y+" = 10");

}

}

}

}

}

//[실행결과] 

//x=1, y=2

//x=3, y=1

//x=5, y=0

</pre>



[4-9] 숫자로 이루어진 문자열 str이 있을 때 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라

만일 문자열이 "12345"라면 ‘1+2+3+4+5’의 결과인 15를 출력이 출력되어야 한다 에 알맞은 코드를 넣으시오

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

[연습문제]  /ch4/Exercise4_9.java


<pre class="brush: java">

class Exercise4_9 {

public static void main(String[] args) {

String str = "12345";

int sum = 0;

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

sum += (int)str.charAt(i)-48;

System.out.println((int)str.charAt(i)-48);

System.out.println(sum);

}

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

}

}

//[실행결과] 15

</pre>


[4-10] int 타입의 변수 num이 있을 때 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라 만일 변수 num의 값이

12345라면 1+2+3+4+5’의 결과인 15를 출력하라

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

[연습문제] /ch4/Exercise4_10.java


<pre class="brush: java">

class Exercise4_10 {

public static void main(String[] args) {

int num = 12345;

int sum = 0;

/*

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

*/

while (num>0) {

sum += num%10;

System.out.println(sum);

num /= 10;

System.out.println(num);

}

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

}

}

//[실행결과] 15

</pre>


[4-11] 피보나치(Fibonnaci) 수열 (數列)은 앞을 두 수를 더해서 다음 수를 만들어 나가는 수열이다

예를 들어 앞의 두 수가 1과 1이라면 그 다음 수는 2가 되고 그 다음 수는 1과 2를 더해서 3이 되어서 

1,1,2,3,5,8,13,21,...과 같은 식으로 진행된다

1과 1부터 시작하는 피보나치수열의 10번째 수는 무엇인지 계산하는 프로그램을 완성하시오

[연습문제]  /ch4/Exercise4_11.java

<pre class="brush: java">

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 = 3 ; i < 11 ; i++ ) {

num3 = num1+num2;

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

num1 = num2;

num2 = num3;

}

} // end of main

} // end of class

//[실행결과]

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

</pre>



[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


/*

[4-13] 다음은 주어진 문자열 이 숫자인지를 판별하는 프로그램이다 에 알맞 (value) . (1)

은 코드를 넣어서 프로그램을 완성하시오.

[연습문제]  /ch4/Exercise4_13.java


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++) {

			ch = value.charAt(i);

			System.out.println(ch);

			if(!('0'<=ch && ch<='9')) {

			isNumber = false;

			break;

			}

		}

		if (isNumber) {

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

		} else {

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

		}

	} // end of main

} // end of class

//[실행결과] 

//12o34 . 는 숫자가 아닙니다


[4-14] 다음은 숫자맞추기 게임을 작성한 것이다 과 사이의 값을 반복적으로 입력 . 1 100

해서 컴퓨터가 생각한 값을 맞추면 게임이 끝난다 사용자가 값을 입력하면 컴퓨터는 자 . ,

신이 생각한 값과 비교해서 결과를 알려준다 사용자가 컴퓨터가 생각한 숫자를 맞추면 .

게임이 끝나고 몇 번 만에 숫자를 맞췄는지 알려준다 에 알맞은 코드를 넣어 프 . (1)~(2)

로그램을 완성하시오.

[연습문제]  /ch4/Exercise4_14.java


class Exercise4_14{

	public static void main(String[] args){

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

		int answer = (int)(Math.random()*100+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 . 입력받은 값을 변수 에 저장한다

			if (inputanswer){

				System.out.println(count+"번째, 입력값이 답보다 큽니다");

			}else {

				System.out.println(count+"번째, 정답입니다");

				break;

			}

		} 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 .



[4-15] 다음은 회문수를 구하는 프로그램이다 회문수 란 숫자를 거꾸로 읽 . (palindrome) ,

어도 앞으로 읽는 것과 같은 수를 말한다 예를 들면 이나 같은 수를 말한 . ‘12321’ ‘13531’

다 에 알맞은 코드를 넣어서 프로그램을 완성하시오 . (1) .

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

[연습문제]  /ch4/Exercise4_15.java


class Exercise4_15{

	public static void main(String[] args){

		int number = 12321;

		int tmp = number;	// 거꾸로 변환하기 위해 정의한 함수 tmp를 10으로 나눠

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

		while(tmp !=0) {

			result = result*10 + tmp % 10; //거꾸로 변환된 수는 10씩 키우고 뒤에 가져온 수 붙임

			System.out.println("result"+result);

			tmp /= 10;

			System.out.println("tmp"+tmp);

		}

		if(number == result)

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

		else

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

	} // main

}

//[실행결과] 

//12321