minghxx.blog
  • 자바의 정석 연습 문제 ch4 조건문과 반복문
    2023년 08월 15일 02시 01분 42초에 업로드 된 글입니다.
    작성자: 민발자
    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
    댓글