정리/Java

자바의 정석 연습 문제 ch4 조건문과 반복문

민발자 2023. 8. 15. 02:01
728x90

자바의 정석 3판 기초판 연습문제

https://github.com/castello/javajungsuk3

 

GitHub - castello/javajungsuk3: soure codes and ppt files of javajungsuk 3rd edition

soure codes and ppt files of javajungsuk 3rd edition - GitHub - castello/javajungsuk3: soure codes and ppt files of javajungsuk 3rd edition

github.com

 

[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인 조건식 8. 문자열 참조변수 str이 “yes”일 때 true인 조건식

!powerOn

 

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

str.equals("yes")

 

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

int sum = 0;
for(int i = 1; i <=20; i++) {
    if(i%2 !=0 && i%3 != 0) {
        sum += i;
    }
}
System.out.println(sum);

 

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

 

int sum = 0;
int total = 0;
for(int i = 1; i <=10; i++) {
    sum += i; // 1 1+2 1+2+3
    total += sum; // 1 1+(1+2) 1+(1+2)+(1+2+3)
}
System.out.println(total);

 

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

int sum = 0;
int i = 0;
while(true) {
    i++;
    if(i%2 == 0) {
        sum -= i;
    } else {
        sum += i;				
    }
    if(sum >= 100)
        break;
}
System.out.println(i);

 

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

public 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();
        }
    } // end of main
} // end of class
int i = 0;
while(i <= 10) {
    int j = 0;
    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));
        }
    }
}

 

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

(1)에 알맞은 코드를 넣으시오

int value = (int)(Math.random()*6)+1;
System.out.println(value);

 

[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.println("x=" + x + ", y=" + y);
        }
    }
}

 

 

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

String str = "12345";
int sum = 0;
for(int i = 0; i <str.length(); i++) {
    // sum += (int)str.charAt(i);
    // 그냥 형변환시 49, 50, ... 문자코드로 계산
    // 문자 -> 숫자 변환시 '0'을 빼주면 1, 2, 3, ...
    sum += str.charAt(i) - '0';
}
System.out.println("sum=" + sum);

 

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

int num = 12345;
int sum = 0;
while(num > 0) {
    sum += num % 10; // 마지막 숫자를 알수있음
    num /= 10;
}
System.out.println("sum=" + sum);

 

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

// 실행결과
1,1,2,3,5,8,13,21,34,55
int num1 = 1;
int num2 = 1;
int num3 = 0; //세번째값 System.out.print(num1+","+num2);
System.out.print(num1+","+num2);

for (int i = 0 ; i < 8 ; i++ ) {
    num3 = num1 + num2;
    System.out.print("," + num3);

    num1 = num2;
    num2 = num3;
}

 

 

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

String value = "12o34"; 
char ch = ' ';
boolean isNumber = true;

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

    if(!('0'<=ch && ch<='9')) { 
        isNumber = false;
        break;
    }
}

if (isNumber) {
    System.out.println(value+"는 숫자입니다.");
} else {
    System.out.println(value+"는 숫자가 아닙니다.");
}

 

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

// 1~100사이의 임의의 값을 얻어서 answer에 저장한다.
int answer = (int)(Math.random()*100) + 1;
int input = 0; // 사용자입력을 저장할 공간
int count = 0; // 시도횟수를 세기위한 변수

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

do {
    count++;
    System.out.print("1과 100사이의 값을 입력하세요 :");
    input = s.nextInt(); // 입력받은 값을 변수 input에 저장한다.

    if(input == answer) {
        System.out.println("맞췄습니다.");
        System.out.println("시도 횟수는 " + count + "번 입니다.");
        break;
    } else if(answer > input) {
        System.out.println("더 큰 수를 입력하세요");
    } else {
        System.out.println("더 작 수를 입력하세요");
    }

} while(true);

 

 

 

 

 

 

 

 

728x90